Spring Boot “国际化“ 探究

多语言功能的支持

在一些网站中,需要提供多国语言支持的功能,这个功能的实现通常需要前后端的配合,其中一种做法是后端在设计表结构的时候设置英文字段,查询的时候提供给前端,前端设置多语言切换的按钮进行切换。如下图所示:

但是来自后端的一些常用的业务提示消息要怎么设置语言切换呢?如登录验证的时候后端返回的提示信息。

这时,可以使用Spring提供的国际化功能去实现。Spring主要通过org.springframework.web.servlet.i18n包下的AcceptHeaderLocaleResolver解析器提供对国际化的支持(i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称)。主要原理是:通过请求头的 Accept-Language 字段来判断当前请求所属的环境,进而去加载指定文件当中的内容,给出合适的响应。通过查看AcceptHeaderLocaleResolver的源码可知:

简单的示例

在resource目录下创建三个具有相同前缀messages的配置文件,创建完成后IDEA中会自动组织成如下格式:

看下Resource Bundle的官方描述:

Resource bundle is a set of properties files that have same base name with different language-specific suffixes. A resource bundle contains at least two properties files with similar base name, for example file_en.properties and file_de.properties.

简单翻译一下:Resource bundle是有着相同前缀名称但有着不同语言后缀名称的属性文件的集合,目的是为了管理繁多的资源包,在实际当中的组织方式其实没有变。


在messages_en_US.properties中添加:

argument.error=argument error,try it again later...

在messages_zh_CN.properties中添加:

argument.error=请求参数异常,请重试...

编写测试接口:

@RestController
public class TestController {
    @Resource
    MessageSource messageSource;

    @GetMapping("/test")
    @SensitiveConceal
    public String hello() {
        return messageSource.getMessage("argument.error"null, LocaleContextHolder.getLocale());
    }
}

用Postman发送请求:可以看到,程序会根据HTTP请求头Accept-Language的值给出不同的响应结果

探究其中的原理

SpringBoot在启动的时候已经自动为我们配置了MessageSource,所以我们程序当中可以直接注入进来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值