1.application.properties中添加:
spring.messages.basename=messages/messages
2.resources文件夹下新增messages文件夹,下面放messages_en_US.properties类似的文件:
3.后台使用:
@Autowired
private LoginService loginService;Locale locale = LocaleContextHolder.getLocale();//locale是获取http请求的header中的Accept-Language的值if(locale.getLanguage()=="en"){
locale = new Locale("en","US");
}else if(locale.getLanguage()=="zh"){
locale = new Locale("zh","CN");
}else if(locale.getLanguage()=="ja"){
locale = new Locale("ja","JP");
}
String msg = messageSource.getMessage("test", null, locale);//test是配置文件中的key
其中if else部分可以省略,看前端传的情况,前端如果传送header中的Accept-Language是en,zh,ja这样的简写,就需要补全,如果前端传过来的就是en-US,zh-CN,这样的就不需要if,else转换。
当然也可以不用messageSource用ResourceBundle :
ResourceBundle bundle = ResourceBundle.getBundle("messages/messages", locale );
String test = bundle.getString("test");
4.配置文件:
messages.properties中的是默认的,如果语言取不到就取默认的。
messages_zh_CN.properties是中文的配置:
test=测试
messages_en_US.properties是英文配置:
test=test
5.前端部分(vue):
比如切换语言的多选框:
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="en">English</el-dropdown-item>
<el-dropdown-item command="zh">中文</el-dropdown-item>
<el-dropdown-item command="ja">日本語</el-dropdown-item>
</el-dropdown-menu>
具体方法:
handleSetLanguage(lang) {
this.$i18n.locale = lang;
localStorage.setItem('lang',lang) //保存到localStorage,或者也可以保存到cookies等
},
则jquery调用可以是这样:
export const requestLogin = params => { return
$.ajax({
type: 'post',
url: `${base}/login`,
contentType: "application/json;charset=UTF-8",
data: JSON.stringify(params),
headers:{ 'Accept-Language':localStorage.getItem('lang')||'en' },
xhrFields: { withCredentials: true },
crossDomain: true,
dataType: 'json' }).
then(res => res);
};
其中headers:{ 'Accept-Language':localStorage.getItem('lang')||'en' }, 这个就是根据你切换的语言,传给服务端对应的语言,这样就做到前后端同步。