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

  在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、

------20200117勉

猜你喜欢

转载自www.cnblogs.com/bien94/p/12204990.html