了解springboot国际化用途以及使用

前言:

Spring Boot国际化可以使应用程序能够根据用户的语言和地区设置显示相应的内容。这提高了用户界面的友好性,使用户能够更容易理解和使用应用程序。通过实现国际化,Spring Boot应用程序可以符合行业标准和最佳实践,提高应用程序的质量和可访问性。

归纳为以下几个方面:

1.提升用户体验

多语言支持:通过国际化,应用程序可以支持多种语言,如中文、英文、法文等,满足不同国家和地区用户的需求。

地区适应性:除了语言之外,国际化还可以包括日期、时间、货币等格式的本地化,使应用程序更符合当地用户的习惯。

2.可扩展性和维护性

代码分离:通过国际化,可以将可翻译的信息(如菜单按钮的标签、提示信息等)从代码中分离出来,放入专门的资源文件中。这样,当需要修改这些信息时,无需修改代码,只需更新资源文件即可,降低了维护成本。

易于管理:资源文件通常按照语言或地区进行分类,这使得管理和更新这些信息变得更加容易。

3.增强应用程序的灵活性

国际化使Spring Boot应用程序更加灵活,能够适应不同的市场和用户群体。随着应用程序的不断发展,可能需要添加新的语言或地区支持。通过国际化,可以轻松实现这一需求,而无需对应用程序进行重大修改。

4.支持全球化战略

市场扩展:随着全球化的加速,越来越多的企业开始将目光投向国际市场。通过国际化,应用程序可以更容易地进入新市场,吸引更多的国际用户。

品牌一致性:国际化有助于保持品牌在不同市场的一致性,提升品牌形象和知名度。


实现方式:

在Spring Boot中,实现国际化通常涉及以下几个步骤:

步骤一:

resources目录下创建i18n目录

i18n目录创建资源配置文件

创建不同语言环境的资源文件,如messages_zh_CN.properties,``messages_en_US.properties等。

步骤二:

配置:

复制代码
@Configuration
public class I18nConfig {


    @Bean
    public LocaleResolver localeResolver() {
        return new I18nLocaleResolver();
    }
}


class I18nLocaleResolver implements LocaleResolver {
    //从请求头content-language,语言类型zh_CN
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        String language = httpServletRequest.getHeader("content-language");
        Locale locale = Locale.getDefault();
        if (language != null && language.length() > 0) {
            String[] split = language.split("_");
            locale = new Locale(split[0], split[1]);
        }
        return locale;
    }

    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse             httpServletResponse, Locale locale) {
    }
}

步骤三:

使用上一篇文章进行演示:springboot使用aop防御用户重复请求-CSDN博客

注解:

这里修改信息提示:{repeat.submit.message}

复制代码
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSubmit {
    //间隔
    int interval() default 5000;
    //时间单位
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
    //消息提示
    String message() default "{repeat.submit.message}";
}

切面:

主要代码:

复制代码
         //消息提示读取资源文件
            String message = repeatSubmit.message();
             message = MessageUtils.message(StringUtils.substring(message, 1, message.length() - 1), new Object[0]);
                throw new ServiceException(repeatSubmit.message());
            }

示例:

复制代码
    @Before("@annotation(repeatSubmit)")
    public void doBefore(JoinPoint point, RepeatSubmit repeatSubmit) throws Throwable {
         long interval = repeatSubmit.timeUnit().toMillis(repeatSubmit.interval());
        if (interval < 1000L) {
            throw new ServiceException("重复提交间隔时间不能小于'1'秒");
        } else {
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
             //解析参数point.getArgs()
            String params = getArgs(point.getArgs());
            //获取url
            String url = request.getRequestURI();
            //获取用户登录token
            String token=request.getHeader("Authorization"));
 			//token+参数进行md5
            token = SecureUtil.md5(token + ":" + params);
            String cacheRepeatKey = "cache:repeat_submit:" + url + token;
 			//redis设置key,并且设置过期时间
            if (RedisUtil.setObjectIfAbsent(cacheRepeatKey, "", Duration.ofMillis(interval))) {
                KEY_CACHE.set(cacheRepeatKey);
            } else {

            //消息提示读取资源文件
            String message = repeatSubmit.message();
             message = MessageUtils.message(StringUtils.substring(message, 1, message.length() - 1), new Object[0]);
                throw new ServiceException(repeatSubmit.message());
            }
        }
    }

工具:

复制代码
public class MessageUtils {
    private static final MessageSource messageSource = (MessageSource) SpringUtil.getBean(MessageSource.class);

    public static String message(String code, Object... args) {
        try {
            return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
        } catch (NoSuchMessageException var3) {
            return code;
        }
    }
}

测试结果:

第一次:repeat.submit.message=不允许重复提交,请稍候再试

第二次:repeat.submit.message=不允许重复提交,次数频繁待会就拉黑你!

小结:

总之,Spring Boot使用国际化作用是多方面的,包括提升用户体验、支持多语言和多地区用户、简化维护和管理、增强应用程序的灵活性、遵循最佳实践以及支持全球化战略等。通过实现国际化,Spring Boot应用程序可以更加适应全球用户的需求,并在全球范围内取得更大的成功。

相关推荐
圆山猫6 分钟前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v
caishenzhibiao14 分钟前
期货先行者主图 同花顺期货通指标
java·c语言·c#
史呆芬38 分钟前
分布式事务实战:微服务跨服务数据一致性解决方案
java·后端·spring cloud
IT界的老黄牛43 分钟前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
daad7772 小时前
记录matlab状态机demo
java·网络·matlab
牡丹雅忻12 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
paopaokaka_luck2 小时前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts
学者猫头鹰2 小时前
Java 8 核心新特性
java
冰心孤城3 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
自强的小白3 小时前
maven高级(聚合和私服)以及私服的上传和下载
java·maven