springboot页面国际化
-
统一字符编码
统一idea的字符编码,避免读取字符时发生乱码情况
-
在resourse根目录下新建i18n文件夹(默认的多语言配置文件路径)
-
在i18n新建login.properties文件和login_en_US.properties文件。
这个时候idea会自动识别并归档这两个文件在一个同级目录下
-
继续添加文件,login_zh_CN.properties文件
新建
下一步
这样就将默认,中文和英文三个语言文件夹添加完成了。
-
添加属性值
-
配置国际化文件路径
spring.messages.basename=i18n.login
-
将属性值放入页面中
<ul> <li th:text="#{login.loginBtnName}"></li> <li th:text="#{login.username}"></li> <li th:text="#{login.password}"></li> <li th:text="#{login.rememberMe}"></li> <li th:text="#{login.tip}"></li> </ul>
这样页面将会显示默认的参数,设置一个按钮来切换中英文
<a th:href="@{/index.html(l='zh_CN')}">中文</a> <a th:href="@{/index.html(l='en_US')}">英文</a>
这样的请求充其量让我们在链接上传递了一个参数罢了,那我们应该怎么去解析并适配呢。源码走起
springboot提供了一个类来解析这种国际化请求请求,自定义这个类可以对其功能进行定制化。
-
LocaleResolver地域解析器
@Bean @ConditionalOnMissingBean //缺乏自定义配置时生效 @ConditionalOnProperty(prefix = "spring.mvc", name = "locale") public LocaleResolver localeResolver() { //如果时默认解析器,直接返回 if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) { return new FixedLocaleResolver(this.mvcProperties.getLocale()); } AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver(); 设置默认的解析器 localeResolver.setDefaultLocale(this.mvcProperties.getLocale()); return localeResolver; }
-
自定义LocalrResolver地域解析器
public class MyLocalResolver implements LocaleResolver { //解析请求 @Override public Locale resolveLocale(HttpServletRequest request) { String language = request.getParameter("l"); Locale locale = Locale.getDefault(); //如果没有使用默认的。 if (!StringUtils.isEmpty(language)) { //如果请求的链接携带国际化参数 String[] split = language.split("_"); locale = new Locale(split[0], split[1]); //语言,地区 } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } }
-
在自定义的WebMvcConfigger注入bean
如果直接注入IOC当中,IOC管理着大量的bean,WebMvcConfigger也无法识别也不支持从整个IOC容器中去扫描所有的bean找到它特有的组件,它只有通过在组件里配置的方式才可以被WebMvcConfiger获取生效。
@Configuration public class MyMvcConfig implements WebMvcConfigurer { //注册bean @Bean public LocaleResolver localeResolver(){ return new MyLocalResolver(); } }
页面国际化完成。