有的项目中需要根据环境切换不同的语言,使用国际化可以轻松解决
下面简单介绍在SpringBoot中简单使用国际化的示例,并结合源码分析
-
第一步,引入Thymeleaf,我们是通过Thymeleaf标签的形式对国际化取值的
<!-- 引入thymeleaf模板引擎--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> -
编写国际化配置文件
这里以登录界面为例,写了login_zh_CN.properties和login_en_US.properties
这是常见的一些国家、语言的写法(后面大写)配置文件如下:
login_en_US.propertieslogin.password=Password login.remember=remember-me login.sign=Sign in login.tip=Please Login login.username=Usernamelogin_zh_CN.propertieslogin.password=密码 login.remember=记住我 login.sign=登录 login.tip=请登录 login.username=用户名 -
分析SpringBoot为我们自动配置的国际化处理器
打开MessageSourceAutoConfiguration,这就是有关国际化的自动配置类
里面真正处理国际化的组件是ResourceBundleMessageSource,可以看到SpringBoot已经为我们自动配置好了,配置项由MessageSourceProperties提供
继续看,这个类里面添加了组件MessageSourceProperties,并跟全局配置文件进行了绑定@ConfigurationProperties从配置文件取值,前缀是spring.messages
继续打开该组件,其中basename这个属性表明的是加载的国际化文件的前缀(默认是messages,我这里自定义成了login)
那很简单的我们知道可以在全局配置文件里面修改basename的值#修改默认国际化识别的文件前缀(可以指定包名) spring: messages: basename: "i18n.login"i18n是国际化配置文件的包名
-
最后在页面使用Thymeleaf进行国际化取值即可
需要注意的是:单标签使用行内写法[[#{login.remember}]]
双标签直接使用th:text="#{login.password}"代码示例:
-
最终效果
简体中文
在浏览器设置中将美国英文移到最前面
效果:
谢谢指正下一篇写如何自己通过页面下方的链接切换不同的语言