网页国际化处理(中英文切换)
本方法适用场景:springboot+thymeleaf+IDEA
thymeleaf快速上手参考:https://blog.csdn.net/weixin_43365369/article/details/88993230
thymeleaf官方文档:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
thymeleaf官方文档翻译:https://blog.csdn.net/qq_40693171/article/details/107008457
目的:实现网页的中英文切换
步骤如下:
一,确认settings-Editor-File Encodings下的所有编码格式都是UTF-8
二、在resources文件下创建i18n文件夹,再此文件夹下创建login.properties、login_en_US.properties、login_zh_CN.properties (注:直接在i18n下创建,Resource Bundle 'login’是自动生成的)
三、打开login.properties,再打开Resource Bundle(在login.properties界面的左下角),点击+号进行添加,将网页中所有你想要修改的中英文一 一对应。
四、在application.properties配置文件中绑定login.properties,spring.messages.basename=i18n.login(这一行代码就行)
五、将数据绑定到网页中,具体使用查看
<!--
绑定数据的常用语法格式有这么两种:
1、以标签的属性形式: th:text="#{login.passwordTitle}"
2、直接在标签外:[[#{login.remeber}]]
-->
<div class="form-group">
<label th:text="#{login.passwordTitle}">Password</label>
<input type="password" class="form-control" th:placeholder="#{login.password}" placeholder="Password">
</div>
<div class="checkbox">
<label><input type="checkbox"> [[#{login.remeber}]]</label>
<label class="pull-right">
<a th:href="@{#}" th:text="#{login.forgottenPassword}">Forgotten Password?</a>
</label>
</div>
六、设置一个可以切换中英文的标签,href发送请求参数 l=‘zh_CN’ 或 l=‘en_US’
<div class="register-link m-t-15 text-center">
<p>
<a th:href="@{/login.html(l='zh_CN')}">中文</a>
<a th:href="@{/login.html(l='en_US')}">English</a>
</p>
</div>
七、在/src/main/java/com.***/config下自定义一个MyLocaleResolver
八、MyLocaleResolver类实现LocaleResolver接口
package com.zzw.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
//解析请求
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取请求中的语言参数
String language = request.getParameter("l");
//如果没有就使用默认的
Locale locale = Locale.getDefault();
//如果请求的链接携带了国际化的参数
if(!StringUtils.isEmpty(language)){
//zh_CN
String[] split = language.split("_");
//国家地区
locale = new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}