一、什么是国际化
我们在浏览网站的时候,好比 Nacos :https://nacos.io/zh-cn/docs/quick-start.html
我们不难发现网站上面会有一个语言转换
通过点击语言,我们可以在这个 Nacos 网站上进行中英文转换
这个就是国际化
二、SpringBoot 对国际化的支持
SpringBoot 对这个国际化其实也是有支持的,而且支持的也不错,我们来写一个例子
1. 配置文件
我们需要几个配置文件,一个是默认的语言配置文件,然后还需要几个其他语言的配置文件。
先在 resource 下面创建一个文件:messages.properties (固定名称,不要乱修改,这个是默认的语言配置文件)
我们在里面写一个配置
写好之后,我们再来在同级目录下创建两个文件:messages_en_US.properties 和 messages_zh_CN.properties(这两个是其他语言的配置文件)
在 US 中我们再来配置一些内容
CN 中也来配置一下
配置完成之后 IDEA 这个工具就会变成这样
这个是没有关系的
2. 拦截器
光有上面的语言支持还没有什么屌用,我们还需要通过拦截器进行语言识别,每次请求的时候我们需要知道他语言的类型。
拦截器我们就直接写在 MyWebMvcConfigurer 里面。
我们 setParamName 中传递的这个 lang 是一会我们请求头中带的参数的名称,可以自定义,没有必要是 lang。
当然哈,我们上一篇也说了这个拦截器了,我们还需要将这个拦截器放入到我们的项目中。
3. 设置默认语言
上面的拦截器设置之后,我们还需要配置一下默认语言,因为第一次请求一般是不带着语言的。
默认语言是 US,也就是英语
完整的配置
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名,用于区别语言种类
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
String[] ignorePaths = {
"/hello"
};
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**")
.excludePathPatterns(ignorePaths);
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
// 设置默认语言
slr.setDefaultLocale(Locale.US);
return slr;
}
}
4. Controller
我们在控制层写一个 locale 的请求
我们这里需要引入 MessageSource,它是用于支持信息的国际化和包含参数的信息的替换的。
完整请求如下:
@GetMapping("/locale")
public String locale(HttpServletRequest request) throws Exception {
Locale locale = LocaleContextHolder.getLocale();
request.setAttribute("message", messageSource.getMessage("message", null, locale));
return "hello";
}
这里的这个 getMessage 中的 message 是我们配置文件中的那个 message。第二个参数 null 是动态参数,我们这里因为没有这个东西,所以不需要传递,最后一个 locale 是本地化参数。
写好之后,自己再去页面加一个 message 的显示。
5. 测试
然后我们在请求地址后面加一段 ?lang=zh_CN
刷新页面
这个乱码我们先不管,这个证明我们的国际化是可以使用的。
三、乱码问题
乱码问题我们可以进行编码格式的修改,我们将中文进行转码,转换成 UniCode 码。
文字转码:https://www.bejson.com/convert/unicode_chinese/
我们修改 CN 还有默认的这两个配置文件。
从新启动服务,再来请求
是没有问题的
这一篇东西不多,自己练习一下