首页 > 编程语言 > 详细

Java同步和异步过程中消息语言国际化处理策略

时间:2020-01-17 12:04:14      阅读:94      评论:0      收藏:0      [点我收藏+]

  在Java后端做消息内容的语言国际化处理时可以通过Spring中MessageSource接口的来实现,但是MessageSource接口需要用到Locale对象, 而Locale类又是根据前端传过来的语言类型来生成本地化的Locale对象的;因此,我们可以通过请求头中的某个字段来表明语言类别,例如:X-Lang-Id;这样的话,在前端调用后端接口时可以在请求头中设置X-Lang-Id的值即可,例如:zh_CH或者en_US,即X-Lang-Id:"zh_CH"或X-Lang-Id:"en_US";最后,我们还要在resources资源目录下分别创建语言对应的资源配置文件,例如:messages_en_US.properties和messages_zh_CH.properties,在这两个文件中添加相应的词条信息,如下图所示:

技术分享图片 技术分享图片

  下面将详细说明一下这种语言国际化处理流程,不管是同步过程还是异步过程,其本质是一样的,都需要更改Locale对象。

  (一)前后端协商通过在请求头中添加X-Lang-Id字段来表明语言类型

  (二)在Controller层获取前端传输过来的语言类型

  1、通过HttpHeaders对象来获取语言类型:

String langIdByHttpHeaders = httpHeaders.getFirst("X-Lang-Id");

  2、通过HttpServletResponse对象来获取语言类型:

String langIdByHttpServletRequest = request.getHeader("X-Lang-Id");

  为了简化流程试验,在Controller层接口的参数中同时添加HttpHeaders和HttpServletResponse,如下图所示:

技术分享图片

  输入内容如下图所示:

技术分享图片

  从上图可知,可以任性选择那种方式进行获取,目前的语言类型是en_US。

  (三)在Service层Locale对象处理

  1、添加MessageSource类型的成员变量,通过注解来实现,如下图所示:

技术分享图片

  2、试验的逻辑代码如下

@Override
    @Async
    public void testLang(String langId) {
        System.out.println("the current language is " + langId);
        Locale loc;
        if (!StringUtils.isEmpty(langId)) {
            String[] lanCty = langId.split("_");
            if(lanCty.length == 2) {
                loc = new Locale(lanCty[0], lanCty[1]);
            } else {
                loc = new Locale(lanCty[0]);
            }
        } else {
            loc = new Locale("en", "US"); // 提供默认语言
        }
        String testLang = this.messageSource.getMessage("Test.Lang", (Object[])null, loc); // “Test.Lang”是资源配置文件中的词条
        System.out.println("the current message is " + testLang); 
    }

  3、效果如下:

技术分享图片 技术分享图片

   4、延伸

  (1)也可以通过Locale.createConstant()静态方法来创建Locale对象,例如: Locale loc = Locale.createConstant("en", "US");

  (2)也可以通过Locale.getInstance()静态方法来创建Locale对象,例如:

 

 

 

 

 

------20200117勉

Java同步和异步过程中消息语言国际化处理策略

原文:https://www.cnblogs.com/bien94/p/12204990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!