Vue2、vue3 は i18n を使用して国際化を実現します

1. 対象となる効果

       ソースコードアドレス: git clone  i18n-demo: vue2、vue3 は i18n 国際化機能を実装します 

        デフォルトの言語は中国語です。

        言語スイッチをクリックして英語に変更します(ここでは中国語と英語が設定されているだけです)

 

        注: vue2 は vue-i18n バージョン 8.0 以降をサポートし、vue3 は vue-i18n バージョン 9.0 以降をサポートします。

2 つ目、vue2 は i18n 国際化を実現します

        (1)国際化関連のコードを識別するために、src の下にロケールフォルダーを作成します (任意の名前を選択できます)。

        (2) ターゲット国の言語を手動で翻訳するために、locale フォルダーの下に lang フォルダーを作成します。index.js ファイルによって、i18n インスタンスが main.js にエクスポートされます。

         (3) locale/index.jsファイルは i18n プラグインのインスタンス化に使用され、vue で i18n プラグインを使用します。メッセージは自動翻訳用の言語パックです。

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import messages from './lang'

Vue.use(VueI18n)

const i18n = new VueI18n({
    locale: 'zh',
    messages,
});
export default i18n;

        (4) zh.js は中国語翻訳パッケージを表し、en.js は英語翻訳パッケージを表します。

 zh はターゲット言語が中国語であることを意味し、i18n はそれを認識できます

export default {
    zh: {
        title: '后台管理系统',
        schoolModule: {
            title: '学校模块',
            kindergarten: '幼儿园',
            primary: '小学',
            junior: '初中',
            senior: '高中',
            university: '大学'
        }
    }
}

en.js はターゲット言語が英語であることを意味し、i18n はそれを認識できます

export default {
    en: {
        title: 'management system',
        schoolModule: {
            title: 'schoolModule',
            kindergarten: 'kindergarten',
            primary: 'primary',
            junior: 'junior',
            senior: 'senior',
            university: 'university'
        },
    }
}

locale/lang/index.js は、すべてのターゲット国の言語翻訳のエクスポートです。これは、上図のメッセージです。

import zh from './zh'
import en from './en'
export default {
    ...en,
    ...zh
}

        (5) 使用

  • テンプレート内で $t('title')として使用されます
  • スクリプトでthis.$i18n.localeを使用して  現在の言語タイプを取得します。this.$t('title') : 現在の言語の翻訳結果を取得します。  

3. vue3 は i18n 国際化を実現します

        (1) vue3 ファイルの locale フォルダーの下にある lang フォルダーの内容は上記とまったく同じです。違いは、vue3 が i18n を異なる方法でインスタンス化することです。

        (2)ロケール/index.js

import { createI18n } from 'vue-i18n'

import messages from './lang'
const i18n = createI18n({
    legacy: false, //处理报错Uncaught (in promise) SyntaxError: Not available in legacy mode (at message-compiler.esm-bundler.js:54:19)
    locale: 'zh',
    messages
})

export default (app) => {
    app.use(i18n)
}

        (3)main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 导入多语言
import lang from './locale'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)
// 将多语言挂在到vue中
lang(app)

app.use(store)
    .use(ElementPlus)
    .use(router)
    .mount('#app')

        (4) 使用

  • テンプレート内で $t('title')として使用されます
  • として使用されるスクリプト

        'vue-i18n' から { useI18n } をインポートします

        

        // ロケールは応答値です

        const { t, ロケール } = useI18n();

        

        console.log('t:', t('タイトル'))

        console.log('locale:', locale.value)

おすすめ

転載: blog.csdn.net/weixin_42375707/article/details/130187397