Spring Boot国际化开发实战
本章将讲解如何在Spring Boot和Thymeleaf中做页面模板国际化的支持,根据系统语言环境或者session中的语言来自动读取不同环境中的文字。
国际化自动配置
Spring Boot中已经对国际化这一块做了自动配置。
国际化自动配置类:
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration
查看自动配置源码有以下主要几个参数:
private String basename = "messages";
private Charset encoding = Charset.forName("UTF-8");
private int cacheSeconds = -1;
private boolean fallbackToSystemLocale = true;
basename
:默认的扫描的国际化文件名为messages,即在resources建立messages_xx.properties文件,可以通过逗号指定多个,如果不指定包名默认从classpath下寻找。
encoding
:默认的编码为UTF-8。
cacheSeconds
:加载国际化文件的缓存时间,单位为秒,默认为永久缓存。
fallbackToSystemLocale
:当找不到当前语言的资源文件时,如果为true默认找当前系统的语言对应的资源文件如messages_zh_CN.properties,如果为false即加载系统默认的如messages.properties文件。
国际化实战
1、国际化配置
spring:
messages:
fallbackToSystemLocale: false
basename: i18n/common, i18n/login, i18n/index
2、在i18n目录下创建以下几个文件
如index.properties,index_zh_CN.properties,index.properties作为找不到定义语言的资源文件时的默认配置文件。
创建对应的key/value,如:
index_zh_CN.properties
index.welcome=欢迎
index.properties
index.welcome=welcome
3、添加语言解析器,并设置默认语言为US英文
LocaleResolver接口有许多实现,如可以从session、cookie、Accept-Language header、或者一个固定的值来判断当前的语言环境,下面是使用session来判断。
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.US);
return sessionLocaleResolver;
}
4、添加切换语言过滤器
private LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
添加以上过滤器并注册到spring mvc中
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
然后页面通过访问指定的url?lang=zh_CN进行切换。
5、通过#{}
来读取资源文件
如Thymeleaf模板文件中使用:
<label th:text="#{index.welcome}"></label>
默认会读取英文的资源文件并显示:welcome
最新文章
- 15、ASP.NET MVC入门到精通——MVC-路由
- 基于WCF MSMQ 的企业应用解决方案
- Python_Day9_Socket编程
- codevs3145 汉诺塔问题
- Maven使用笔记(六)使用Maven进行多模块拆分
- return 还是 不return
- yii2源码学习笔记(十五)
- 关于target is null for setProperty的问题总结
- .net程序员求职简历
- 简单svg动画实现
- Excel 2010高级应用-气泡图(八)
- FormDestroy 和 FormClose 有什么区别和联系?
- input:checked + label用法
- Luogu P1439 【模板】最长公共子序列
- 2017秋季面向对象程序设计(Java)教材、教学纲要、考核要求
- SQL点点滴滴_聪明的小写法(持续更新中)
- Python数据结构练习
- 局域网不同用户同时登录同一个网站,会出现session乱窜的问题
- quartz 实现调度任务 SchedulerManager
- 【python】BeautifulSoup的应用
热门文章
- Data Persistence
- Unity中的点击,长按,划动
- flash/flex builder在IE中stage.stageWidth始终为0的解决办法
- Dubbo helloword
- [leetcode]341. Flatten Nested List Iterator展开嵌套列表的迭代器
- 20165315 2017-2018-2《Java程序设计》课程总结
- .NET, ASP.NET, ADO.NET, C# 区别
- js data日期初始化的5种方法
- MQ消息队列在软件开发中的作中
- MongoDB 官网教程 下载 安装