vue使用i18语言切换

1.安装i18

npm install vue-i18n

2.在main.js中引入

import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
import i18n from './lang'

3.在src下新建store文件夹

具体文件

 app.js

import Cookies from 'js-cookie'

const app = {
  state: {},
  mutations: {
    SET_LANGUAGE: (state, language) => {
      state.language = language
      Cookies.set('language', language)
    }
  },
  actions: {
    setLanguage({ commit }, language) {
      commit('SET_LANGUAGE', language)
    }
  }
}

export default app

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import getters from './getters'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    app
  },
  getters
})

export default store

4.src中新建lang文件夹

 en.js/ha.js/ja.js/zh.js分别是语言包

以中文zh为例

export default {

    home: '我是首页'
}

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 elementJaLocale from 'element-ui/lib/locale/lang/ja'// 日
import elementKoLocale from 'element-ui/lib/locale/lang/ko'// 韩
import enLocale from './en'
import zhLocale from './zh'
import jaLocale from './ja'
import haLocale from './ha'

Vue.use(VueI18n)

const messages = {
  en: {
    ...enLocale,
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  },
  ja: {
    ...jaLocale,
    ...elementJaLocale
  },
  ha: {
    ...haLocale,
    ...elementKoLocale
  }
}

const i18n = new VueI18n({
  // set locale
  // options: en | zh | es
  locale: Cookies.get('language') || 'zh',
  // set locale messages
  messages
})

export default i18n

5.具体使用

html代码

<el-dropdown @command="handleCommand">
            <span title="" class="lange">
              <i class="el-icon-arrow-down el-icon--right"></i>
            </span>
            <el-dropdown-menu slot="dropdown" :append-to-body="false" ref="downdiv">
              <el-dropdown-item class="lang" v-for="(item, key) in language" :key="key" :command="key" :disabled="$i18n.locale === key">{{ item }}</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>

data

data () {
    return {
      language: {
        'zh': 'CHINA(中文)',
        'en': 'English',
        'ja': '日本語',
        'ha': '한국어 공부 해요.'
      }
    }
  },

methods

 // 下拉切换语言
    handleCommand(command) {
      this.get()
      this.set(command)
    },
    get() {
      return this.$store.state.app.language
    },
    set(lang) {
      this.$i18n.locale = lang || 'zh'
      this.$store.dispatch('setLanguage', lang)
    },

最后展示样子

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shuleijia

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值