最近項目種要支持語言的國際化,之前沒搞過SSM框架的國際化瓜浸,網(wǎng)上有很多資料澳淑,以為很簡單,結(jié)果不知道哪出問題了插佛,就是死活不管用杠巡,最后功夫不負(fù)有心人,找到了一個可以用的朗涩,寫此文紀(jì)念下踩過的這個大坑
SSM支持國際化的步驟
下圖是項目的框架結(jié)構(gòu)圖
1.創(chuàng)建國際化資源文件
如圖所示忽孽,創(chuàng)建多個國際化的資源配置文件,資源配置文件的命名可以參考這里
里面的內(nèi)容如下所示:? param = value
DELETE_SUCCESS=Delete the success
DELETE_FAILED=Delete failed
UPDATE_SUCCESS=Modify the success
UPDATE_FAILED=Modify the failed
2.修改配置文件
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n.message"></property>
<property name="defaultEncoding" value="UTF8"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
這里的配置文件一定要注意谢床,我就是有個地方寫的不對兄一,整了一天才整出來
3.java代碼里返回國際化信息的地方可以這樣寫
不知道MessageUtils的內(nèi)容是什么?不會寫识腿?小姐姐當(dāng)然不會這么坑啦出革,下面就給大家奉上代碼
@Component
@Slf4j
public class MessageUtils {
????????private static MessageSourcemessageSource;
????????public MessageUtils(MessageSource messageSource1) {
????????????????messageSource = messageSource1;
????????}
**
* 獲取單個國際化翻譯值
*/
? ? public static String get(String msgKey) {
????????try {
????????????????//? ? ? ? ? ? log.info("獲取到的多語言設(shè)置為:"+LocaleContextHolder.getLocale().toString());
? ? ? ? ? ? ? ?? return messageSource.getMessage(msgKey,null, LocaleContextHolder.getLocale());
????????}catch (Exception e) {
????????????????return msgKey;
????????}
????}
}
4.前臺配置
我們項目是給移動端開發(fā)接口,控制語言的參數(shù)放在http的請求頭里面了渡讼,傳的是Accept-Language
如圖所示:
5.測試
因為要支持多種語言骂束,發(fā)現(xiàn)泰語、日語成箫、俄語展箱、亞美尼亞語、韓語這幾種語言出現(xiàn)亂碼現(xiàn)象
我的解決方案是在配置文件里添加了如圖一句 ?? <value>text/json;charset=ISO-8859-1</value> ? ? ? 就可以了