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

本文介绍了在Java后端如何实现消息语言国际化,通过在请求头中添加X-Lang-Id字段,结合Spring的MessageSource接口,根据前端传入的语言类型创建Locale对象。详细阐述了从获取请求头中的语言类型到在Service层处理Locale对象的步骤,并讨论了在同步和异步处理中如何应用这一策略。
摘要由CSDN通过智能技术生成

在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,在这两个文件中添加相应的词条信息,如下图所示:

2edff122cd0299e309e9b75fb6f7e863.png 

382018c9fcf6a136b83805e7f148d374.png

下面将详细说明一下这种语言国际化处理流程,不管是同步过程还是异步过程,其本质是一样的,都需要更改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,如下图所示:

e61f4275ca0a0f2688b81963e9f991fb.png

输入内容如下图所示:

87955dd9618c473b748b57579c1308d4.png

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

(三)在Service层Locale对象处理

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

10fe3c978f33685b4fc457c81a3f1c86.png

2、试验的逻辑代码如下

@Override

@Asyncpublic voidtestLang(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、效果如下:

b35d7018876c864d1255164e982a0d3b.png 

6898755cf48aa688fe139ef774f4f911.png

4、延伸

若你的工程本身支持了语言国际化处理流程,那么在异步的接口中调用Locale.setDefault(loc)方法即可,同步的接口就不要添加了,因为本身就支持了。

(四)国际化提示语获取的方式

通过注入的方式

@Autowired

LocaleMessageSourceBean lms;

通过工具类获取bean示例

LocaleMessageSourceBean lms=(LocaleMessageSourceBean)SpringContextUtil.getBean("localeResolver");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值