vue2国际化

下载

npm i vue-i18n@8.22.2

新建i18n文件夹

index.js内容

import Vue from "vue";
import VueI18n from "vue-i18n";
import elementLang from "element-ui/src/locale/lang/en";

Vue.use(VueI18n);

// 各个国家的key
const localeKeys = ["en", "zh-CN"];

// 各个国家语言包
const messages = {};
for (const key of localeKeys) {
  const langObj = require(`./locales/${key}/index.js`).default;
  messages[key] = {
    ...langObj,
    ...(elementLang ? elementLang.default : {}),
  };
}

export default new VueI18n({
  locale: localStorage.getItem("change-language") || "zh-CN",
  messages,
  silentTranslationWarn: true, // 忽略翻译警告
});

change-language.vue

<template>
  <el-dropdown @command="handle">
    <span class="el-dropdown-link">
      {{ $t("Language") }}<i class="el-icon-caret-bottom el-icon--right"></i>
    </span>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item
        v-for="(item, index) of list"
        :key="index"
        :command="item.key"
        >{{ item.name }}</el-dropdown-item
      >
    </el-dropdown-menu>
  </el-dropdown>
</template>
 
<script>
export default {
  name: "change-language",
  data() {
    return {
      list: [
        { key: "en", name: "English" }, // 英语
        { key: "zh-CN", name: "中文" }, // 中文
      ],
    };
  },
  methods: {
    handle(value) {
      this.$i18n.locale = value;
      localStorage.setItem("change-language", value);
    },
  },
};
</script>
<style scoped lang="less">
</style>

locales/en/index.js

export default {
  page_home: {
    mock_tit: "english teacher",
  },
};

locales/zh-CN/index.js

export default {
  page_home: {
    mock_tit: "英语老师",
  },
};

main.js引入

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

import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
Vue.use(ElementUI, {
  i18n: (key, value) => {
    i18n.t(key, value);
  },
});


import i18n from "./components/i18n";

new Vue({
  i18n,
  render: (h) => h(App),
}).$mount("#app");

页面使用

<template>
  <div class="container">
    <ChangeLanguage />
    <div class="text">{{ $t("page_home.mock_tit") }}</div>
  </div>
</template>
<script>
import ChangeLanguage from "@/components/i18n/change-language.vue";
export default {
  name: "home",
  components: {
    ChangeLanguage,
  },
};
</script>

页面显示语法

// title
:title="$t('btnBulkOperations')"
 
// js 
this.$i18n.t('username')
 
// 标签,注意冒号
:label="$t('username')"
 
// 输入框中的占位符,注意冒号
:placeholder="this.$t('username')"
 
// 表格标题
:label="$t('username')"
 
// div语法
<div>{{$t("username")}}</div>
 
// 多个key拼接
:placeholder="`${this.$t('userInput')}${this.$t('userPhone')}`"
:label="`${this.$t('indexTablePrimaryKey')} • ${this.$t('wordName')}`"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值