深入浅出 SpringBoot 2.x _ 9. SpringBoot 国际化支持

一、什么是国际化

我们在浏览网站的时候,好比 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 还有默认的这两个配置文件。

从新启动服务,再来请求

是没有问题的

 

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值