热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入浅出SpringBoot2.x_9.SpringBoot国际化支持

一、什么是国际化我们在浏览网站的时候,好比Nacos:https:nacos.iozh-cndocsquick-start.html我们不难发现网站
一、什么是国际化

我们在浏览网站的时候,好比 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;}@Overridepublic void addInterceptors(InterceptorRegistry registry) {String[] ignorePaths = {"/hello"};registry.addInterceptor(localeChangeInterceptor());registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns(ignorePaths);}@Beanpublic 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 还有默认的这两个配置文件。

从新启动服务,再来请求

是没有问题的

 

这一篇东西不多,自己练习一下

有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人自愿网站:https://www.lemon1234.com

最近网站在改造中,欢迎各位提出意见。


推荐阅读
author-avatar
vbppn65853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有