国际化 Vue-i18n的安装与使用 (Vue2.0 / Vue3.0)

国际化 Vue-i18n的安装与使用 (Vue2.0 / Vue3.0)
一、Vue-i18n是什么?
Vue-I18n是 Vue.js 的国际化插件。它可以轻松地将一些本地化功能集成到你的 Vue.js 应用程序中。简单来说就是可以帮助用户进行语言的切换”

二、使用步骤
1.引入库
代码如下(示例):

//npm 
npm install vue-i18n --save-dev

//yarn
yarn add vue-i18n

2.在locales文件夹创建 en.json / zh.json

//en.json
{
  "up":"up",
  "chooseVariants":"Choose Variants",
  "Specifications":"Product Specifications"
}

//zh.json
{
  "up":"起",
  "chooseVariants":"请选择产品规格",
  "Specifications":"产品规格",
}

3.在locales文件夹创建 index.js

import {createI18n} from 'vue-i18n';


import en from './en.json'
import zh from './zh.json'

//const locale = 'zh'
let locale = 'zh'
const messages = {
    'en': en,
    'zh': zh
}
if(localStorage.getItem('lang')){
    locale =  localStorage.getItem('lang')
}

const i18n = createI18n({
    locale: locale,
    messages
})

export default i18n;

4.创建 store.js

import i18n from '../locales'

export default createStore({
    state: {
        locales: [
            {
                code: 'en',
                name: 'English'
            },
            {
                code: 'zh',
                name: '中文'
            },
        ],
        locale: '',
    },
    mutations: {
        SETLANG(state,lang){
            state.locale= lang
            localStorage.setItem('lang', lang);
            i18n.global.locale = lang
        }
    },
    actions: {
    },
    modules: {
    },
    getters: {
    }
})


5.使用方法

{{ $t(“chooseVariants”) }}

6.语言切换示例

<template>
  <div class="language" @click.stop>
    <div class="language-div hor-center slgap" @click="langed = !langed">
      <img class="world" src="@/assets/common/world.svg" alt="" />
      <div class="body1" :class="{ 'body-langed': langed }">
        {{ $t("languages") }}
      </div>
      <img
        src="@/assets/common/chevronDown.svg"
        class="language-img"
        :class="{ 'img-rotate': langed }"
      />
    </div>

    <div class="language-box col" :class="{ 'language-hidden': !langed }">
      <div
        class="language-label flex"
        v-for="(lang, i) in locales"
        :key="i"
        @click="switchLang(lang.code)"
      >
        {{ lang.name }}
      </div>
    </div>
  </div>
</template>

//Vue2.0
<script>
export default {
  head() {
    return {
      htmlAttrs: {
        lang: this.$store.state.locale,
      },
    };
  },
  name: "SwitchLang",
  data() {
    return {
      langed: false,
    };
  },
  methods: {
    switchLanguage(localeCode) {
      document.cookie = `locale=${localeCode}`;
      location.reload();
    },
  },
  computed: {
    locales() {
      return this.$store.state.locales;
    },
    locale() {
      return this.$store.state.locale;
    },
  },
  created() {
    // PubSubs.PubSub.subscribe("closeComps", () => {
    //   this.langed = false;
    // });
  },
};
</script>

//Vue3.0
<script setup>
import { useStore } from "vuex";
const store = useStore();
function switchLang(lang) {
  location.reload();
  store.commit("SETLANG", lang);
}
</script>
<style scoped>
</style>
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值