自学内容网 自学内容网

vue使用vue-i18n实现国际化

我使用的是vue2.6版本,具体使用其他版本可以进行修改

一、安装

npm install vue-i18n -D

二、配置

1、文件配置

①在src下创建 i18n 目录

②在 i18n 目录下创建 langs 文件夹 和 index.js文件,具体如下

2、index.js代码如下,这里使用了较多语言,具体按项目定

import Vue from "vue";
import VueI18n from "vue-i18n";
//引入自定义语言配置
import de from "./langs/de";
import en from "./langs/en";
import es from "./langs/es";
import fr from "./langs/fr";
import jp from "./langs/jp";
import ko from "./langs/ko";
import th from "./langs/th";
import tw from "./langs/tw";
import vi from "./langs/vi";
import zh from "./langs/zh";
Vue.use(VueI18n); // 全局注册国际化包
// 准备翻译的语言环境信息
const i18n = new VueI18n({
  locale: localStorage.getItem("lang") || "zh", //将语言标识存入localStorage或sessionStorage中,首次默认中文显示,非首次则以localStorage为准
  messages: {
    de,
    en,
    es,
    fr,
    jp,
    ko,
    th,
    tw,
    vi,
    zh
  },
  silentTranslationWarn: true, //解决vue-i18n黄色警告"value of key 'xxx' is not a string"和"cannot translate the value of keypath 'xxx'.use the value of keypath as default",可忽略
  globalInjection: true, // 全局注入
  fallbackLocale: "zh", // 指定的locale没有找到对应的资源或当前语种不存在时,默认设置当前语种为中文
});
const temLang = localStorage.getItem("lang");
if (!temLang) {
  localStorage.setItem('lang', 'zh')
}
export default i18n;

3、zh.js文件实例,其他语言文件按这格式不变

// 中文
export default {
    loginTitle: "账号登入",
    registerTitle: "账号注册",
    loginTip: "欢迎回来!使用您的电子邮箱或手机号登入",
    registerTip: "使用您的电子邮箱或手机号进行注册",
    userNamePlc: "请输入账号",
    userPassPlc: "请输入密码",
    login: "登入",
    register: "注册",
    overtime: "登录超时,请重新登录",
    loginSuccess: "登入成功",
    registerSuccess: "注册成功",
    userNameTip: "请输入账号",
    userPassTip: "请输入密码",
    userOldPassTip: "请输入旧密码",
    userNewPassTip: "请输入新密码",
    userPassAgainTip: "请再次输入新密码",
    errorPassTip: "两次密码不一致",
    userPassSureTip: "请再次输入密码",
    jumpPageText: "当前页面需要登录查看,请登录",
};

4、为了方便使用,添加了个hooks文件,可以在vue页面引用此文件获取当前语言

// 语言配置
import { ref, computed, getCurrentInstance } from "vue";

export function useLang() {
  const vm = getCurrentInstance();
  const lang = ref(localStorage.getItem("lang") || "zh");
  const langList = ref([
    {
      label: "English",
      src: require("../assets/images/lang/en.png"),
      value: "en",
    },
    {
      label: "简体中文",
      src: require("../assets/images/lang/zh.png"),
      value: "zh",
    },
    {
      label: "繁體中文",
      src: require("../assets/images/lang/tw.png"),
      value: "tw",
    },
    {
      label: "ไทย",
      src: require("../assets/images/lang/th.png"),
      value: "th",
    },
    {
      label: "日本語",
      src: require("../assets/images/lang/jp.png"),
      value: "jp",
    },
    {
      label: "Español",
      src: require("../assets/images/lang/es.png"),
      value: "es",
    },
    {
      label: "Français",
      src: require("../assets/images/lang/fr.png"),
      value: "fr",
    },
    {
      label: "Deutsch",
      src: require("../assets/images/lang/de.png"),
      value: "de",
    },
    {
      label: "한국어",
      src: require("../assets/images/lang/ko.svg"),
      value: "ko",
    },
    {
      label: "Tiếng Việt",
      src: require("../assets/images/lang/vi.svg"),
      value: "vi",
    },
  ]);
  // 获取当前语言对象
  const getLangObject = computed(() => {
    return langList.value.find((item) => item.value === lang.value);
  });
  // 设置语言
  const setLan = (val) => {
    localStorage.setItem("lang", val);
    lang.value = val;
    vm.proxy.$i18n.locale = val; //切换为英文
    // location.reload();
  };
  return { lang, setLan, langList, getLangObject };
}

 5、main.js配置

import Vue from "vue";
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
import App from "./App.vue";
import router from "./router";
import store from "@/store/index";
import i18n from "./i18n";
import "./permission";
Vue.use(ElementUI);
Vue.use({
  i18n: (key, value) => i18n.t(key, value),
});
Vue.config.productionTip = false;
new Vue({
  router,
  store,
  i18n,
  render: (h) => h(App),
}).$mount("#app");

三、使用

1、template模板使用

<template>
    {{ $t("loginTitle") }}
</template>

2、setup中使用,这里使用的vue2.6,和其他会有些差别

import { getCurrentInstance } from "vue";
const vm = getCurrentInstance();

console.log(vm.proxy.$t("loginTitle"))

 3、js文件中使用

import i18n from "./i18n";

i18n.t('loginTitle')


原文地址:https://blog.csdn.net/weixin_45122120/article/details/142361499

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!