i18n 的使用

400 阅读1分钟

实际上是用vue-i18n来实现多语言切换,从而实现国际化的需求

1.安装依赖

npm install vue-i18n

也可以通过脚本引入:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script>

2.配置main.js文件

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
//引入
import VueI18n from 'vue-i18n';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
// 挂载
Vue.use(VueI18n);
Vue.config.productionTip = false

// 使用
const i18n = new VueI18n({
    locale: 'zh-CN', // 语言标识
    messages: {
        'zh-CN': require('./assets/common/cn'), // 中文语言包
        'zh-EN': require('./assets/common/en'), // 英文语言包
        'zh-FA': require('./assets/common/fa'), // 法语语言包
        'zh-FT': require('./assets/common/ft') // 繁体字语言包
    }
});
new Vue({
    i18n, // 注意这里
    router,
    store,
    render: h => h(App)
}).$mount('#app')

对应的语言包进行配置:

src/assets/common下面的文件:

//  cn.js
export const message = {
    music: '网易云音乐',
    findMusic: '发现音乐',
    myMusic: '我的音乐',
    friend: '朋友',
    musician: '音乐人',
    download: '下载客户端'
}
//  en.js
export const message = {
    music: 'Music',
    findMusic: 'FIND MUSIC',
    myMusic: 'MY MUSIC',
    friend: 'FRIEND',
    musician: 'MUSICIAN',
    download: 'DOWNLOAD'
}
// fa.js
export const message = {
  music: 'Musique pour netease cloud',
  findMusic: 'Découvrir la musique',
  myMusic: 'De ma musique',
  friend: 'Des amis',
  musician: 'Le musicien',
  download: 'Télécharger le client'
}
// ft.js
export const message = {
  music: '網易雲音樂',
  findMusic: '發現音樂',
  myMusic: '我的音樂',
  friend: '朋友',
  musician: '音樂人',
  download: '下載客戶端'
}

测试文件,进行语言包实践

<template>
  <div class="international">
    <!-- 切换语言 -->
    <div class="language">
      <el-select
        v-model="value"
        placeholder="请选择"
        @change="changeLangEvent(value)"
      >
        <el-option
          v-for="(item, index) in options"
          :key="index"
          :label="item.label"
          :value="item.value"
        ></el-option>
      </el-select>
    </div>
    <!-- tabs标签页 -->
    <div class="tabs">
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane :label="$t('message.music')" name="first">
          {{$t('message.music')}}
        </el-tab-pane>
        <el-tab-pane :label="$t('message.findMusic')" name="second">
          {{$t('message.findMusic')}}
        </el-tab-pane>
        <el-tab-pane :label="$t('message.myMusic')" name="third">
          {{$t('message.myMusic')}}
        </el-tab-pane>
        <el-tab-pane :label="$t('message.friend')" name="fourth">
          {{$t('message.friend')}}
        </el-tab-pane>
        <el-tab-pane :label="$t('message.musician')" name="fivth">
          {{$t('message.musician')}}
        </el-tab-pane>
        <el-tab-pane :label="$t('message.download')" name="sixth">
          {{$t('message.download')}}
        </el-tab-pane>
      </el-tabs>
    </div>
  </div>
</template>

<script>
  export default {
    name: 'vueInternationalI18n',
    data() {
      return {
        value: 'zh-CN',
        lang: 'zh-CN',
        activeName: 'first',
        options: [
          {
            value: 'zh-CN',
            label: '中文'
          },
          {
            value: 'zh-EN',
            label: '英文'
          },
          {
            value: 'zh-FA',
            label: '法语'
          },
          {
            value: 'zh-FT',
            label: '繁体'
          }
        ]
      };
    },
    methods: {
      handleClick() {},
      // 切换语言
      changeLangEvent(value) {
        switch (value) {
          case 'zh-CN':
            this.lang = value;
            this.$i18n.locale = this.lang; //关键语句
            break;
          case 'zh-EN':
            this.lang = value;
            this.$i18n.locale = this.lang; //关键语句
            break;
          case 'zh-FA':
            this.lang = value;
            this.$i18n.locale = this.lang; //关键语句
            break;
          case 'zh-FT':
            this.lang = value;
            this.$i18n.locale = this.lang; //关键语句
            break;
          default:
            break;
        }
      }
    }
  };
</script>
<style lang="css">
  .international {
    width: 75vw;
    margin: 0 auto;
  }
  .language {
    position: absolute;
    right: 12.5vw;
    z-index: 20000000;
  }
  .tabs {
    margin-top: 15px;
  }
</style>