vue3 vue-i18n 国际化

1、安装

$ npm i vue-i18n

2、配置

1、创建 utils/i18n.js
2、编辑 utils/i18n.js

// i18n.js
import {
    createI18n
} from 'vue-i18n';

const messages = {
    cn: {
        country: '中文',
        common: {
            login: '登录',
            toVip: '升级VIP'
        },
        loginPage: {
            mobile: '手机短信',
            wechatLogin: '使用微信扫一扫登录',
            privacyPolicy: '隐私政策'
        }
    },
    en: {
        country: 'English',
        common: {},
        loginPage: {}
    },
    tc: {
        country: '中文繁体',
    },
    mys: {
        country: 'Bahasa Melayu',
    },
    sa: {
        country: 'العربية',
    }
};

const i18n = createI18n({
    locale: 'cn', // set default locale
    fallbackLocale: 'en',
    messages, // set locale messages
});

export default {
    i18n, // vue绑定用
    messages // 手动选择国际化需要使用
};

3、引入

  • main.js
import i18nObj from './utils/i18n.js';

const app = createApp(App);
app.use(i18nObj.i18n);
  • yourComponent.vue 国际化手动选择代码
// setup
import i18nObj from '../utils/i18n.js'

const Countries = reactive([]) // 语种列表,用来下拉让用户选择
const currCountry = ref('中文')

// 初始化语种、并缓存
for (let c in i18nObj.messages) {
    Countries.push(c)
    if (!localStorage.getItem('country')) {
        localStorage.setItem('country', '中文')
    } else {
        currCountry.value = localStorage.getItem('country')
    }
}

function changeLocale(newLocale) {
    locale.value = newLocale;
}

function commandClick(key) {
    changeLocale(key)
    currCountry.value = i18nObj.messages[key].country
    localStorage.setItem('country', i18nObj.messages[key].country)
}
<el-dropdown @command="commandClick" size="small" type="primary">
  <el-text>{{ currCountry }}</el-text>
  <template #dropdown>
    <el-dropdown-menu>
      <el-dropdown-item v-for="c in Countries" :key="c" :command="c">
        {{ i18nObj.messages[c].country }}
      </el-dropdown-item>
    </el-dropdown-menu>
  </template>
</el-dropdown>

4、 yourComponent.vue 国际化引入数据

<div>{{ $t('cuntry') }}<div>
<div>{{ $t('loginPage.mobile') }}<div>

如果值为数组,不拿直接访问数组,需要依次取出下标

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容