vue-admin-template项目实现中英文切换

实现效果:

1.安装

*注意版本号

javascript 复制代码
npm install vue-i18n@8.24.5 -S

2.新建文件夹

在src目录下新建lang文件夹,里面有3个文件

javascript 复制代码
//	index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import Cookies from 'js-cookie'
import elementEnLocale from 'element-ui/lib/locale/lang/en' 
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'
import enLocale from './en'
import zhLocale from './zh'

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: Cookies.get('language') || 'zh', // set locale
  messages:{
    en: {
      ...enLocale,
      ...elementEnLocale
    },
    zh: {
      ...zhLocale,
      ...elementZhLocale
    }
  }
})

export default i18n

en.js 和 zh.js是页面中需要翻译的内容

3.在utils下面新建i18n.js文件

javascript 复制代码
// i18n.js
export function generateTitle(title) {
  const hasKey = this.$te('route.' + title)
  // $t :this method from vue-i18n, inject in @/lang/index.js
  const translatedTitle = this.$t('route.' + title)
  if (hasKey) {
    return translatedTitle
  }
  return title
}

4. 配置main.js

添加以下代码

javascript 复制代码
import i18n from './lang'
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

5. 配置store文件夹里面的文件

  1. app.js

    state里面增加

    javascript 复制代码
    language: Cookies.get('language') || 'zh',

    mutations里面增加

    javascript 复制代码
    // 中英文
    SET_LANGUAGE: (state, language) => {
      	state.language = language
    	Cookies.set('language', language)
    },

    actions里面增加

    javascript 复制代码
    // 中英文
     setLanguage({ commit }, language) {
        commit('SET_LANGUAGE', language)
     },
  2. getters.js

    getters里面增加

    javascript 复制代码
    language: state => state.app.language,

6. 设置语言版本页面使用

页面中使用 $t('')来渲染

html 复制代码
 <template>
    <div class="app-container">
        <div class="main-min">
            <span class="title">{{$t('set.languageSetting')}}</span>
            <div class="radio">
                <el-radio-group v-model="radio" @input=langInput>
                    <el-radio label="zh" border>{{$t('set.Chinese')}}</el-radio>
                    <el-radio label="en" border>{{$t('set.English')}}</el-radio>
                </el-radio-group>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            radio: 'zh',
        }
    },
    created(){
    	// 获取当前语言版本使用  this.$store.getters.language
        this.radio = this.$store.getters.language
    },
    methods: {
        langInput(lang){
            this.$i18n.locale = lang
            this.$store.dispatch('app/setLanguage', lang)
            this.$message({
                message: lang=='en' ? 'switch language success' : '切换成功',
                type: 'success'
            })
        }
    }
}
</script>

<style lang="scss">
// 页面样式
</style>

7.修改左侧路由导航栏

  1. 路由文件中meta里面的title一定对应en.js和zh.js文件中的名字
  2. 找到侧边栏文件目录

    引入i18n.js

    更改html部分代码
相关推荐
一只欢喜26 分钟前
uniapp使用uview2上传图片功能
前端·uni-app
程序员大金36 分钟前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
尸僵打怪兽39 分钟前
后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)
前端·javascript·vue.js·elementui·axios·博客·后台管理系统
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
ggome1 小时前
Uniapp低版本的安卓不能用解决办法
前端·javascript·uni-app
Ylucius1 小时前
JavaScript 与 Java 的继承有何区别?-----原型继承,单继承有何联系?
java·开发语言·前端·javascript·后端·学习
前端初见1 小时前
双token无感刷新
前端·javascript
、昔年1 小时前
前端univer创建、编辑excel
前端·excel·univer
emmm4591 小时前
前端中常见的三种存储方式Cookie、localStorage 和 sessionStorage。
前端
Q186000000001 小时前
在HTML中添加视频
前端·html·音视频