4.2.4 配置国际化页面

1.编写多语言国际化配置文件

​ 在项目的类路径resources下创建名称为i18n的文件夹,并在该文件夹中根据需要编写对应的多语言国际化文件login.properties、login_zh_CN.properties和login_en_US.properties文件

login.properties

properties

login.tip=请登录

login.username=用户名

login.password=密码

login.rememberme=记住我

login.button=登录

login_zh_CN.properties

properties

login.tip=请登录

login.username=用户名

login.password=密码

login.rememberme=记住我

login.button=登录

login_en_US.properties

properties

login.tip=Please sign in

login.username=Username

login.password=Password

login.rememberme=Remember me

login.button=Login

​ login.properties为自定义默认语言配置文件,login_zh_CN.properties为自定义中文国际化文件,login_en_US.properties为自定义英文国际化文件

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

​ 本示例中,在项目类路径resources下自定义了一个i18n包用于统一配置管理多语言配置文件,并将项目默认语言配置文件名自定义为login.properties,因此,后续还必须在项目全局配置文件中进行国际化文件基础名配置,才能引用自定义国际化文件

2. 编写配置文件

​ 打开项目的application.properties全局配置文件,在该文件中添加国际化文件基础名设置,内容如文件

properties

配置国际化文件基础名

spring.messages.basename=i18n.login

​ spring.messages.basename=i18n.login”设置了自定义国际化文件的基础名。其中,i18n表示国际化文件相对项目类路径resources的位置,login表示多语言文件的前缀名。如果开发者完全按照Spring Boot默认识别机制,在项目类路径resources下编写messages.properties等国际化文件,可以省略国际化文件基础名的配置

定制区域信息解析器

​ 在完成上一步中多语言国际化文件的编写和配置后,就可以正式在前端页面中结合Thymeleaf模板相关属性进行国际化语言设置和展示了,不过这种实现方式默认是使用请求头中的语言信息(浏览器语言信息)自动进行语言切换的,有些项目还会提供手动语言切换的功能,这就需要定制区域解析器了

​ 在项目中创建名为com.lagou.config的包,并在该包下创建一个用于定制国际化功能区域信息解析器的自定义配置类MyLocalResovel

java

package com.lagou.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.lang.Nullable;

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 MyLocaleResovel implements LocaleResolver {

// 自定义区域解析方式

@Override

public Locale resolveLocale(HttpServletRequest httpServletRequest) {

// 获取页面手动切换传递的语言参数l

String l = httpServletRequest.getParameter("l");

// 获取请求头自动传递的语言参数Accept-Language

String header = httpServletRequest.getHeader("Accept-Language");

Locale locale=null;

// 如果手动切换参数不为空,就根据手动参数进行语言切换,否则默认根据请求头信息切换

if(!StringUtils.isEmpty(l)){

String[] split = l.split("_");

locale=new Locale(split[0],split[1]);

}else {

// Accept-Language: en-US,en;q=0.9

,zh-CN;q=0.8,zh;q=0.7

String[] splits = header.split(",");

String[] split = splits[0].split("-");

locale=new Locale(split[0],split[1]);

}

return locale;

}

@Override

public void setLocale(HttpServletRequest httpServletRequest, @Nullable

HttpServletResponse httpServletResponse, @Nullable Locale locale) {

}

// 将自定义的MyLocalResovel类重新注册为一个类型LocaleResolver的Bean组件

@Bean

public LocaleResolver localeResolver(){

return new MyLocalResovel();

}

}

MyLocalResolver自定义区域解析器配置类实现了LocaleResolver接口,并重写了其中的resolveLocale()方法进行自定义语言解析,最后使用@Bean注解将当前配置类注册成Spring容器中的一个类型为LocaleResolver的Bean组件,这样就可以覆盖默认的LocaleResolver组件。其中,在resolveLocale()方法中,根据不同需求(手动切换语言信息、浏览器请求头自动切换语言信息)分别获取了请求参数l和请求头参数Accept-Language,然后在请求参数l不为空的情况下就以l参数携带的语言为标准进行语言切换,否则就定制通过请求头信息进行自动切换。

​ 需要注意的是,在请求参数l的语言手动切换组装时,使用的是下划线“_”进行的切割,这是由多语言配置文件的格式决定的(例如login_zh_CN.properties);而在请求头参数Accept-Language的语言自动切换组装时,使用的是短横线“-”进行的切割,这是由浏览器发送的请求头信息样式决定的(例如Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7)

刚学了拉勾教育的《Java工程师高薪训练营》,看到刚学到的点就回答了。希望拉勾能给我推到想去的公司,目标:字节!!


秃头少女
4 声望0 粉丝

« 上一篇
基本使用