在vue 使用i18n

许多项目需要做语言国际化,那就可以用到i18n了,在vue 中用到的插件是vue-i18n

1.安装依赖包

npm install vue-i18n 

或者

yarn add vue-i18n

2.创建语言包、i18n实例对象,并在main.js中引入:

|-- main.js 导入文件
|-- i18n
  |-- index.js 创建实例对象
  |-- languages 各种语言包
    |-- en_us.json  英文包
    |-- id_us.json  中文包

i18n/index.js,创建i18n实例对象,代码如下:

import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n)
 
// 注册i18n实例并引入语言文件
const i18n = new VueI18n({
  locale: 'zh',
  messages: {
    'zh': require('./languages/zh_cn'),
    'en': require('./languages/en_us')
  }
})

export default i18n

接下来我们就需要新建两个js文件(或者josn文件)作为语言包。
其中zh.js中文包中代码为i18n/languages/zh:

module.exports = {
  message: {
    login: '欢迎登录',
    lang:{
      zh: '中文',
      en: '英文'
    }
  }
}

其中en.js英文包中代码为i18n/languages/en:

module.exports = {
    message: {
      login: 'Welcome To Login',
      lang: {
        zh: 'Chinese',
        en: 'English'
      }
    }
   }

将i18n实例对象挂载到Vue实例之上:main.js

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

import "@/assets/plugins/element-ui";
import i18n from '@/assets/plugins/i18n';

new Vue({
    i18n,  // 挂载到Vue实例之上
    router,
    store,
    render: (h) => h(App),
}).$mount("#app");

3.实现中英文切换按钮,代码如下:

<template>
  <div>
    <el-dropdown
      class="languageBox"
      trigger="click"
      placement="bottom-end"
      @command="changeLanguage"
    >
      <el-button class="languageBtn">
        <div class="languageBtnBox">
          <img v-lazy="currentLanguage.icon" class="languageImg" />
          <span>{{ currentLanguage.label }}</span>
          <i class="el-icon-arrow-down el-icon--right"></i>
        </div>
      </el-button>
      <el-dropdown-menu slot="dropdown">
        <el-dropdown-item
          v-for="item in languages"
          :key="item.index"
          :command="item.value"
        >
          <div class="languageItem">
            <img :src="item.icon" alt="" />
            <span>{{ item.label }}</span>
          </div>
        </el-dropdown-item>
      </el-dropdown-menu>
    </el-dropdown>
  </div>
</template>
<script>
import Vue from "vue";
export default {
    data() {
        return {
            language: "zh",
        };
    },
computed: {
    currentLanguage() {
      return this.languages.find((item) => {
        return item.value === this.$i18n.locale;
      });
    },
  },
  mounted() {
    this.$i18n.locale = this.$store.state.language;
  },
    methods:{
 changeLanguage(locale) {
      this.$i18n.locale = locale
 }
    },
};
</script>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 在之前的大数据可视化项目和最近的后台管理项目,都用到了国际化,所以在这里记录下来,以方便后续的维护使用。 S...
    郝艳峰Vip阅读 671评论 0 0
  • 中英文切换功能,笔者是通过i8n实现的。本文讲述了各个场景下的中英文如何替换,包括表单验证,提示信息,各中组件等。...
    Renaissance_阅读 2,901评论 4 4
  • 一、前言 项目中需要实现多语言切换,这时候接触到国际化,前端框架无数,其中几种热门的框架都有相匹配的国际化插件工具...
    w晚风阅读 1,429评论 2 32
  • vue中如何使用i18n实现国际化 一、前言 项目中需要实现多语言切换,这时候接触到国际化,前端框架无数,其中几种...
    张先觉阅读 1,513评论 1 12
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,879评论 28 54

友情链接更多精彩内容