序文最近、複数の国で使用され、多言語切り替えをサポートする必要があるプロジェクトを引き継ぎましたので、ここで記録しておきます。 次の問題を解いてください。
複数の言語を切り替えるにはどうすればいいですか?1. vue-i18nパッケージをインストールするnpm i vue-i18n --save 2. 以下に示すように、src ディレクトリに新しいものを作成します。 定数EN = { ログイン: { タイトル: 「ユーザーログイン」 }, } エクスポートデフォルト EN
定数PL_PL = { ログイン: { タイトル: 「私はとても良い人です」 }, } エクスポートデフォルトPL_PL
定数ZH_CN = { ログイン: { タイトル: 「ユーザーログイン」 }, } エクスポートデフォルトZH_CN
'vue-i18n/index' から {createI18n} をインポートします。 'dayjs/locale/zh-cn' をインポートします './zh-cn' から zh をインポートします './en' から en をインポートします './pl-pl' から pl をインポートします 定数メッセージ = { 'zh-cn': zh、 'en': エン, 'pl': プラス } // 現在のロケールを取得します エクスポート関数 getLanguage() { // 選択した言語を使用する const chooselang = localStorage.getItem('locale') if (chooselang) は chooselang を返します // 言語を選択しない場合は const lang = (navigator.language || navigator.browserLanguage).toLowerCase() const ロケール = Object.keys(メッセージ) locales.includes(lang) を返します。lang : 'zh-cn' } 定数i18n = createI18n({ ロケール: getLanguage(), フォールバックロケール: 'en', グローバル: true、 メッセージ }) エクスポート関数 $t(args) { i18n.global.tc(args) を返す } コンソールログ($t('ログイン.タイトル')) エクスポートデフォルト(アプリ)=> { アプリを使用する(i18n) } 例示する
3. main.js内'./language' から language, { getLanguage, $t } をインポートします 言語(アプリ) 4. Vueファイルで使用する<テンプレート> //1. <div class="ログイン クランプ ta-c fs-28 fw-b m-b10">{{ $t('login.title') }}</div> //2. <el-input v-model="$t('login.title')"></el-input> </テンプレート> 言語を動的に切り替えて elementUI 言語を変更するにはどうすればいいですか?1. vuexを使用して、要素の言語を変更するメソッドをミューテーションで記述する// - - - - - - - - - - - 州 - - - - - - - - - - - - - - - '@/language' から { getLanguage } をインポートします 定数状態 = { 言語: getLanguage() } デフォルト状態をエクスポート //---------------------- 変異----------------------------- './types' から Types として * をインポートします。 'element-plus/lib/locale' からロケールをインポートします。 'element-plus/lib/locale/lang/zh-cn' から localeZH をインポートします。 'element-plus/lib/locale/lang/en' から localeEN をインポートします。 'element-plus/lib/locale/lang/pl' から localePL をインポートします。 定数要素 = { 'zh-cn': ロケールZH、 'en': ロケールEN、 'pl': ロケールPL } const 変異 = { // 言語を切り替える [Types.SET_LANG](state, lang) { 状態.lang = 言語 localStorage.setItem('ロケール', lang) locale.use(要素[lang]) } } デフォルトのミューテーションをエクスポートする // - - - - - - - - - - - - - 種類 - - - - - - - - - - - - - - - エクスポート const SET_LANG = 'SET_LANG' 2. 使用'@/store/types' から Types として * をインポートします。 「vue-i18n」から useI18n をインポートします。 エクスポートデフォルト{ セットアップ(props,ctx) { const { ロケール: lang } = useI18n({ useScope: "global" }) store = useStore() とします const handelLanguage = (名前) => { lang.value = 名前 store.commit(Types.SET_LANG、名前) } 戻る { handel言語 } } } elementUI コンポーネントビューを変更した後、更新されませんか?この時点で、elementUI の言語ページを変更するコミットを送信しても、ビュー コンポーネントが更新されないため、変更がないことがわかります。コンポーネントを更新して再読み込みするにはどうすればよいでしょうか。 1. ルータービューでビューの表示/非表示を制御する// - - - - - - - - - - - テンプレート - - - - - - - - - - - - - - - <ルータービュー v-if="isReloadRouter"/> //---------------------- スクリプト---------------------------- 定数リロード = () => { state.isReloadRouter = false 次のティック(() => { state.isReloadRouter = true }) } provide("reload", reload) <-- nextTick を導入する -> 2. 言語を切り替えるときにリロードを呼び出すconst handelLanguage = (名前) => { lang.value = 名前 store.commit(Types.SET_LANG、名前) 注入('リロード')() } 3. main.jsでcommitを呼び出す必要があります。そうしないと、elementUIに初めて入ったときに言語が変更されません。'./language' から language, { getLanguage, $t } をインポートします '@/styles/elementDefault.scss' をインポートします ストア.コミット(Types.SET_LANG、getLanguage()) $t 関数をグローバルに使用するにはどうすればいいですか? js ファイルで vue-i18n を使用するにはどうすればいいですか? $t 関数をグローバルに使用し、js ファイル内で $t 関数を直接使用します。 方法 1: app.config.globalProperties を通じてグローバルに設定する 方法2: provideとinjectによる実装 './language' から language, { getLanguage, $t } をインポートします const app = createApp(App); //---------------------- app.config.globalProperties----------------------------- app.config.globalProperties.$t = $t // 'vue' から import { getCurrentInstance } を使用します const { プロキシ } = getCurrentInstance() プロキシ.$t() // ----------------------- 提供、注入 ----------------------------- // main.js 内の app.provide('$t', $t) // const $t = inject('$t') を使用する ElMessage.警告({ メッセージ: $t('login.warnMessage'), タイプ: '警告' }); Vue3はプロトタイプチェーンに何かをマウントすることを推奨していませんが、provideとinjectを使用することを推奨しています。したがって、dependencyとinjectionを通じてprovideとinjectを使用するのが最適です。 router.jsでは$tを直接使用することはできません。この関数を自分でインポートする必要があります。'@/language' から { $t } をインポートします { パス: '/mainManage/device', 名前: 'デバイス', 非表示: false、 メタ: { アイコン: 'circle'、 タイトル: $t('router.device') }, コンポーネント: () => インポート(/* webpackChunkName: "device" */ '@/views/mainManage/device') }, 現在、問題があります。メニューに表示されるフィールドはルーティング情報のタイトルから取得されるため、router.js はプロジェクトに最初に入ったときにのみ呼び出されます。言語を切り替えても、メニュー フィールドは動的に切り替わりません。ブラウザーを更新したときにのみ変更されます。解決策がある場合は、メッセージを残してお知らせください。 ! ! 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: テーブルを使用する場合と CSS を使用する場合 (経験の共有)
>>: MySQL の基本クイックスタート知識のまとめ (マインドマップ付き)
Shtml と asp は似ています。shtml という名前のファイルでは、asp の命令と同様に、...
目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...
コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...
目次defineComponent オーバーロード関数開発実務defineComponent 関数は...
目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...
各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...
はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...
目次JSはFileReaderを通じて.txtファイルの内容を取得します。 .txtファイルの読み取...
目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...
目次チュートリアルシリーズ1. MySQL の紹介2. MySQLの開発履歴3. MariaDBの基...
場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...
目次1. 新しいプロジェクトを作成する2. 依存関係を追加する3. SpringコンテナにDrive...
目次【共通コマンド】 [一般的な esxi コマンドの概要] [esxcli コマンドの調査] ES...
前提条件Windows Server でコンテナーを実行するには、Windows Server (半...
による写真に示されている効果を例に挙げてみましょう。明らかに、「次へ」というテキストを水平方向だけで...