使⽤Thymeleaf配置国际化中英文切换⻚⾯

文章介绍了在SpringBoot项目中如何配置多语言文件,包括创建`login.properties`及其不同语言版本,配置`application.properties`,以及自定义区域信息解析器`MyLocalResolver`来处理手动和自动的语言切换。同时,文章还讨论了解决因IDEA默认GBK编码导致的中文乱码问题,提出了修改IDEA的文件编码设置和重写配置文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.编写多语⾔国际化⽂件及配置⽂件
在项⽬的类路径 resources 下创建名称为 i18n 的⽂件夹,并在该⽂件夹中根据需要编写对应的多语⾔国际化⽂件
login.properties login.zh_CN.properties login.en_US.properties ⽂件。

1.下面以登陆注册为例进行配置 

1.login.properties为⾃定义默认语⾔配置⽂件。

login.tip = 请登录
login.username = ⽤户名
login.password = 密码
login.rememberme = 记住我
login.button = 登录
2.login.zh_CN.properties 为⾃定义中⽂国际化⽂件。

login.tip = 请登录
login.username = ⽤户名
login.password = 密码
login.rememberme = 记住我
login.button = 登录
3.login.en_US.properties 为⾃定义英⽂国际化⽂件
login.tip = Please sign in
login.username = Username
login.password = Password
login.rememberme = Remember me
login.button = Login

需要说明的是,Spring Boot默认识别的语⾔配置⽂件为类路径resources下的messages.properties;其他语⾔国 际化⽂件的名称必须严格按照 ⽂件前缀名_语⾔代码_国家代码.properties 的形式命名。

在项⽬类路径resources下⾃定义的i18n包⽤于统⼀配置管理多语⾔配置⽂件,后续如果需要引⼊⾃定义国际化⽂ 件,必须在项⽬的全局配置⽂件中进⾏国际化⽂件的基础名配置。

2.打开项⽬的application.properties全局配置⽂件在⽂件中添加国际化⽂件的基础名

# 配置国际化⽂件基础名  注意此路径位置是否匹配
spring.messages.basename = i18n.login

3 定制区域信息解析器

创建名为 com.cy.config 的包,并在该包下创建⼀个⽤于定制国际化功能区域信息解析器的⾃定
义配置类 MyLocalResolver
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
@Configuration
public class MyLocalResolver implements LocaleResolver {
 /** ⾃定义区域解析⽅式 */
 @Override
 public Locale resolveLocale(HttpServletRequest httpServletRequest) {
 // 获取⻚⾯⼿动切换传递的语⾔参数language的值
 String language = httpServletRequest.getParameter("language");
 // 获取请求头⾃动传递的语⾔参数Accept-Language
 String header = httpServletRequest.getHeader("Accept-Language");
 // Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
 System.out.println("header=" + header);
 Locale locale = null;
 // 如果⼿动切换参数不为空,就根据⼿动参数进⾏语⾔切换,否则默认根据请求头信息切换
 if (!StringUtils.isEmpty(language)) {
 String[] split = language.split("_");
 locale = new Locale(split[0], split[1]);
 } else {
 String[] splits = header.split(",");
 String[] split = splits[0].split("-");
 locale = new Locale(split[0], split[1]);
 }
 return locale;
 }
 @Override
 public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse
httpServletResponse, Locale locale) {
 }
 /** 将⾃定义的MyLocalResolver类重新注册为⼀个类型MyLocalResolver的Bean组件 */
 @Bean
 public LocaleResolver localeResolver() {
 return new MyLocalResolver();
 } 
}
需要注意的是,在请求参数 language 的语⾔⼿动切换组装时,使⽤的是下划线 _ 进⾏的切割,这是由多语⾔配置⽂
件的格式决定的(例如 login_zh_CN.properties );⽽在请求头参数 Accept-Language 的语⾔⾃动切换组装时,使
⽤的是短横线 - 进⾏的切割,这是由浏览器发送的请求头信息样式决定的( Accept-Language: zh
CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 )。

4.编写表现层,注意完成以上配置后其实与此层无关,但是为有始有终,这里就先写好了

  //访问路径可切换语言
  @GetMapping("/toLoginPage")
    public String toLoginPage(Model model){
      
       return "login" ;
    }

5.页面引用配置文件上的可直接用模板引用

例如引用用户名:th:text="#{login.username}" 注意是#,不是&

6.中文乱码处理

访问的项⽬登录⻚出现了中⽂乱码的情况。这是因为 IDEA 开发⼯具编写的 Properties 配置⽂件默认使⽤的是 GBK
码格式,这些⽂件内容显示时最终都会转换为 ASCII 码的形式,这就导致了中⽂乱码的情况
解决方案1:
打开项⽬设置窗⼝,在窗⼝中搜索 "File Encodings"关键字

 设置窗⼝的"File Encodings"编码也只是对当前项⽬有效,后续 通过IDEA开发⼯具创建的Properties配置⽂件仍然默认使⽤GBK编码格式

解决方式2:

关闭此项目,打开 IDEA ⼯具全局默认配置⽂件窗⼝,同样搜索 "File Encodings" 关键字 并进⾏编码格式的设置。

 7.根据上述操作提示,完成"File Encodings"编码格式更改后,项⽬中Properties配置⽂件含有的中⽂部分可能出现 乱码,需要重新编写。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值