java项目i18n国际化语言配置(目前最全,前后端文字、校验、消息提醒等文字国际化)

**

一、简介

**
i18n是Internationalization这个英文的简写,因为Internationalization去掉头尾的i和n刚好还剩下18个字符,它是国际化的意思 。

Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化, 核心的思想就是, 对不同的语言提供一个不同的资源文件。

二、功能

系统页面文字、前端交互信息、后台交互信息都能进行多语言的切换。

手动进行系统语言切换。

系统可以根据浏览器的默认语言设置进行语言切换。

三、Java国际化步骤

3.1建立语言的资源文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如图所示,sysmsg.properties为默认语言模式,当系统没找到相对应的语言文件时,将调用本文件的数据。

sysmsg_en_US.properties为英文资源文件,sysmsg.properties_zh_CN为中文语言文字。

3.2国际化语言配置
3.2.1创建MessageUtils工具类
MessageUtils主要作用是在后台通过key来获取目前系统语言的value值。



 public class MessageUtils {

   private final MessageSource messageSource;

   public MessageUtils(MessageSource messageSource) {
       this.messageSource = messageSource;
   }

   public String getMessage(String msgKey, Object[] args) {
       return messageSource.getMessage(msgKey, args, LocaleContextHolder.getLocale());
   }

   public String getMessage(String msgKey) {
       return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
   }
}

3.2.2创建本地语言的配置类LocaleConfig,用于配置i18n的设置
(1)MessageUtils注入容器。

(2)设置i18资源文件读取的路径。(messageSource()方法)

(3)设置默认本地语言解析器。唯有配置了这个才能系统可以根据浏览器的默认语言设置进行语言切换。(localeResolver()方法)

(4)默认拦截器 其中lang表示切换语言的参数名。(localeInterceptor())

@Configuration
public class LocaleConfig {

   @Bean
   public MessageUtils messageUtils() {
       return new MessageUtils(messageSource());
   }

 /**
 *资源文件路径
 **/
   @Bean
   public ResourceBundleMessageSource messageSource() {
       Locale.setDefault(Locale.CHINESE);
       ResourceBundleMessageSource source = new ResourceBundleMessageSource();
       /*ame of the resource bundle*/
       source.setBasenames("i18n/sysmsg","i18n/userGeneral", "i18n/pageGeneral", "i18n/webValidator");
       //默认是false,调试设置为true
       source.setUseCodeAsDefaultMessage(true);
       source.setDefaultEncoding("UTF-8");
       return source;
   }


   /**
     * 默认解析器 其中locale表示默认语言
     */
   @Bean
   public LocaleResolver localeResolver() {
       SessionLocaleResolver localeResolver = new SessionLocaleResolver();
       // localeResolver.setDefaultLocale(Locale.UK);
       return localeResolver;
   }

   /**
     * 默认拦截器 其中lang表示切换语言的参数名
     */
   @Bean
   public WebMvcConfigurer localeInterceptor() {
       return new WebMvcConfigurerAdapter() {
           @Override
           public void addInterceptors(InterceptorRegistry registry) {
               LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
               localeInterceptor.setParamName("lang");
               registry.addInterceptor(localeInterceptor);
           }
       };
   }
}

3.2.3freemarker页面引入 spring.ftl
spring.ftl文件主要作用于在前端页面获取资源文件中的语言文字, spring.ftl文件位置复制到 resources/static 文件夹下 。spring.ftl文件位于:

在这里插入图片描述

页面上引入<#import “spring.ftl” as spring>

页面上取值roperties文件中的变量值的方法为:<@spring.message code=“login.tip” />

四、示例

4.1 前端展示

在这里插入图片描述

地址带参数lang=en_US 进行切换

http://127.0.0.1:8090/project/login/login?lang=en_US

在这里插入图片描述
在这里插入图片描述

4.2后台交互设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值