欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot整合国际化I18n

程序员文章站 2022-04-09 08:45:15
本文主要实现的功能: 从文件夹中直接加载多个国际化文件 后台设置前端页面显示国际化信息的文件 实现 国际化项目初始化,简单看下项目的目录和文件 在resource下创建国际化文件 messages.properties messages_en_US.properties messages_zh_CN ......

本文主要实现的功能:

  • 从文件夹中直接加载多个国际化文件
  • 后台设置前端页面显示国际化信息的文件

实现

国际化项目初始化,简单看下项目的目录和文件

SpringBoot整合国际化I18n

在resource下创建国际化文件

  • messages.properties
  • messages_en_us.properties
  • messages_zh_cn.properties

配置引用国际化文件

spring.messages.basename=messages

如果是多个源的话,用","相隔即可。

spring.messages.basename=messages,xxx,xxxx,xxxx

创建常量类

public class i18nconstant {

    /**
     * 一个例子
     */
    public static final string text = "devicesummary.device.type.name";

}

对应分别在三个国际化(默认、中文、英文)中加入devicesummary.device.type.name对应转换的语言

使用

  • 代码中使用
@autowired  
private messagesource messagesource;  
  
string msg = messagesource.getmessage(i18nconstant.text, null, locale);  
  • 获取request的locale
locale locale1 = localecontextholder.getlocale(); // 当前request
locale locale2 = requestcontextutils.getlocale(request); // 指定request
locale.getlanguage() //获取当前语言
  • 默认根据浏览器的语言设置来决定显示语言。一般应用多采用会话级别的语言设置sessionlocaleresolver。
@bean
public localeresolver localeresolver() {
    sessionlocaleresolver sessionlocaleresolver = new sessionlocaleresolver();
    sessionlocaleresolver.setdefaultlocale(locale.china);
    return sessionlocaleresolver;
}
  • 切换语言
@bean
public localechangeinterceptor localechangeinterceptor() {
    localechangeinterceptor lci = new localechangeinterceptor();
    lci.setparamname("lang");
    return lci;
}
@override
public void addinterceptors(interceptorregistry registry) {
    registry.addinterceptor(localechangeinterceptor());
}

url中通过参数lang就可以切换到不同语言。比如:http://localhost:8080/hello.html?lang=zh