简介
记录一下,前端使用vue,后端使用若依(ruoyi,基于spring-boot)实现页面,后端返回提示信息国际化
前端
vue:2.6.12
vue-i18n:^8.27.2
安装vue-i18n,注:最新的交于该版本有差异,所以指定使用版本:8.27.2
npm install --save vue-i18n@8.27.2 --force
添加国际化js文件:language.en_US.js
export default {
message: {
"language": "language",
}
}
添加国际化js文件:language.zh_***.js
export default {
message: {
"language": "语言",
}
};
添加i18n.js
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import enLocale from '@/api/language/language.en_US'
import usLocal from '@/api/language/language.zh_***'
// element-ui 组件国际化
import ElementLocale from 'element-ui/lib/locale'
import elementEnLocal from "element-ui/lib/locale/lang/en"
import elementZh***Local from "element-ui/lib/locale/lang/zh-***"
ElementLocale.i18n((key, value) => i18n.t(key, value))
Vue.use(VueI18n);
const messages = {
en_US: {
...enLocale,
...elementEnLocal
},
zh_***: {
...usLocal,
...elementZh***Local
}
}
const i18n = new VueI18n({
locale: localStorage.getItem('lang') || 'zh_***', // 通过this.$i18n.locale的值实现语言切换
messages,
});
export default i18n;
main.js加载i18n.js
import i18n from "@/api/i18n"
new Vue({
el: '#app',
router,
i18n,
store,
render: h => h(App)
})
添加vue文件,方便使用
<template>
<div>
<el-select style="width: 100%" @change="changeLanguage" v-model="lang">
<el-option v-for="lan in langList"
:key="lan.value"
:label="lan.label"
:value="lan.value">
</el-option>
</el-select>
</div>
</template>
<script>
import {isNotNull} from "@/api/default";
import { changeLanguages } from "@/api/system/api";
export default {
name: "i18n",
data(){
return {
lang: "***",
langList: [
{
label: "中文",
value: "zh_***"
},
{
label: "English",
value: "en_US"
}
],
}
},
created() {
let value = localStorage.getItem("lang");
if (isNotNull(value)){
this.lang = value;
}
},
methods: {
changeLanguage(value){
this.$i18n.locale = value;
localStorage.setItem("lang", value);
changeLanguages(value).then(response => {
console.info("change-language:" + value);
window.location.reload();
});
},
}
}
</script>
changeLanguages,用于访问后端接口,修改语言
/**
* * 获取信息
* @param address
* @returns {AxiosPromise}
*/
export function changeLanguages(lang){
return request({
url: '/changeLanguages',
method: 'get',
headers: {
isToken: false,
},
params: {
lang: lang
}
})
}
使用方式:
#form中使用
<el-form-item class="mb-3" prop="lang" :label="$t('message.language')">
<i18n-select></i18n-select>
</el-form-item>
#导入
import i18nSelect from "@/***ponents/i18n/i18n"
# 加载
***ponents: { i18nSelect }
#script内使用:
this.$t("message.language")
若依分离版后端
版本:3.8.4
添加:I18nConfig
package ***.ruoyi.framework.config;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMv***onfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
/**
* 资源文件配置加载
*
* @author ruoyi
*/
@Configuration
public class I18nConfig implements WebMv***onfigurer
{
@Bean
public LocaleResolver localeResolver()
{
SessionLocaleResolver slr = new SessionLocaleResolver();
// 默认语言
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor()
{
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry)
{
registry.addInterceptor(localeChangeInterceptor());
}
}
添加接口:changeLanguages,只是提供给前端调用,修改语言使用
@GetMapping("/changeLanguages")
public AjaxResult changeLanguages(String lang){
return AjaxResult.su***ess();
}
添加:messages_en_US.properties
su***ess=Su***ess
添加:messages_zh_***.properties
su***ess=成功
application.yml配置,i18n/messages,表示在文件夹:resource/i18n下的messages_xx.properties文件,其中xx为Locale的信息,例如:Locale SIMPLIFIED_CHINESE,lang为:zh;country为:***,所以对应的国际化文件为:messages_zh_***.properties文件
# Spring配置
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
使用:使用:MessageUtils.message("su***ess"),来获取所需返回的信息即可,示例:
@GetMapping("/test")
public AjaxResult test(){
return AjaxResult.su***ess(MessageUtils.message("su***ess"));
}