最近项目需要国际化,一般常见的方式就是采用配置文件话国际化。
根据请求头传入不同的语言,返回不同的内容;
自己搭建了一个模型,分如下几步:
1.spring配置文件修改,定义国际化消息
2.查找项目中需要返回到web的国际化内容,写到配置文件中
3.处理国际化封装成一个工具类,在controller层 统一处理。
国际化需要注意,如果调用方未传language,系统需要默认一个,最好写在配置文件中,方便随时修改,用 @value注入到国际化工具类中。
一 :Spring配置文件
<!-- 定义国际化消息--> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- 其中basename用来指定properties文件的通用名 如实例中的messages_en.properties,messages_ja.properties通用名都是messages --> <property name="basename" value="messages"/> <property name="useCodeAsDefaultMessage" value="true" /> <property name="defaultEncoding" value="UTF-8"/> <property name="cacheSeconds" value="100"></property> </bean>
二:配置文件国际化,如下图
三:工具类:
1 @Service 2 public class ResponseUtil { 3 4 @Value(value = "${default.xLanguage}") 5 public String language; 6 7 public String getMessage(String xLanguage, Error error, String className){ 8 9 if(StringUtils.isEmpty(xLanguage)){ 10 xLanguage = language; 11 } 12 if(null==error){ 13 return "请求成功"; 14 } 15 /***此处根据不同的code获取国际化资源**/ 16 17 18 ResourceBundle resourceBundle = null; 19 switch (xLanguage){ 20 case "en-US": 21 resourceBundle = ResourceBundle.getBundle("messages", Locale.US); 22 break; 23 case "zh-CN": 24 resourceBundle = ResourceBundle.getBundle("messages", Locale.SIMPLIFIED_CHINESE); 25 break; 26 } 27 if(null==resourceBundle){ 28 return null; 29 } 30 31 return resourceBundle.getString(messageKey); 32 } 33 34 35 } 36 }
PostMan模拟后,返回结果成功。