springboot国际化(前后端分离情况)

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):

比如切换语言的多选框:


     English
     中文
     日本語
 

具体方法:

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' }, 这个就是根据你切换的语言,传给服务端对应的语言,这样就做到前后端同步。


你可能感兴趣的:(springboot国际化(前后端分离情况))