14

主要由以下几个模块组成由 :

  • src\main.js
  • src\locales\index.js
  • src\locales\zh_CN.json
  • src\utils\config.js

# src\main.js

import i18n from '@/locales/index.js'

new Vue({
  el: '#app',
  i18n,
  router,
  store,
  render: h => h(App)
})

# src\locales\index.js

import Cookies from 'js-cookie'
import VueI18n from 'vue-i18n'
import Vue from 'vue'

const data = {}
const locale = Cookies.get('hb_lang') || 'en_US'
const readDir = ['en_US', 'zh_CN', 'th_TH']
for (let i = 0; i < readDir.length; i++) {
  data[readDir[i]] = require(`./${readDir[i]}.json`)
}

Vue.use(VueI18n)
const i18n = new VueI18n({
  locale,
  fallbackLocale: locale, // 语言环境中不存在相应massage键时回退到指定语言
  messages: data
})

export default i18n

# src\locales\zh_CN.json

示例项目包涵中英泰三国语言, 这里仅抽出中文作为示例 :

{
  "欢迎登录": "欢迎登录",
  "参数配置":"参数配置",
  "折价币种":"折价币种"
}

调用方法 :
<h1 class="slogan">{{ $t('欢迎登录') }}</h1>

# src\utils\config.js

import Cookies from 'js-cookie'
import i18n from '@/locales/index.js'
const Key = 'hb_lang'

export function get() {
  return Cookies.get(Key)
}

export function set(data) {
  i18n.locale = data
  return Cookies.set(Key, data)
}

export function remove() {
  return Cookies.remove(Key)
}

其中 , 当需要动态切换语言时,调用 set 方法即可, 例如:

import { set as setLanguage } from '@/utils/config.js'

setLanguage('en_US')

# 注意事项

以上配置须臾结合 Vue{{}} 进行编辑, 例如上文所提到的 :
<h1 class="solutions">{{ $t('solutions') }}</h1>

倘若像下面这样则会导致切换语言时, 无法动态即时更新文案 :

// 不要这样写, 解决方法在下面
<template>
  <div>
    <div class="solutions">{{ solutions }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      solutions : this.$t('solutions')
    }
  }
}
</script>

解决方法 :

<template>
  <div>
    <div class="solutions">{{ solutions }}</div>
  </div>
</template>

<script>
export default {
  watch: {
    '$store.state.lang'(language) {
      this.init()
    }
  },
  data() {
    return {
      solutions : this.$t('solutions')
    }
  },
  created() {
    this.init()
  },
  methods: {
    init(){
      this.solutions = this.$t('solutions')
    }
  },
}
</script>

# 同系列的其他文章


Raymond
4.3k 声望305 粉丝