Vorwort Ich habe vor Kurzem ein Projekt übernommen, das in mehreren Ländern verwendet wird und die Umschaltung auf mehrere Sprachen unterstützen muss. Dies werde ich hier aufzeichnen. Lösen Sie die folgenden Probleme:
Wie wechselt man zwischen mehreren Sprachen?1. Installieren Sie das vue-i18n-Paketnpm ich vue-i18n --speichern 2. Erstellen Sie ein neues im src-Verzeichnis, wie unten gezeigt: const EN = { Anmeldung: { Titel: „Benutzeranmeldung“ }, } Export Standard DE
Konstante PL_PL = { Anmeldung: { Titel: „Ich bin ein sehr guter Mensch“ }, } Standard PL_PL exportieren
const ZH_CN = { Anmeldung: { Titel: „Benutzeranmeldung“ }, } Exportvorgabe ZH_CN
importiere { createI18n } von 'vue-i18n/index' importiere 'dayjs/locale/zh-cn' importiere zh aus './zh-cn' importiere en von './en' importiere pl aus './pl-pl' const Nachrichten = { 'zh-cn': zh, 'en': de, 'pl': pl } // Ruft das aktuelle Gebietsschema ab Exportfunktion getLanguage() { // Verwenden Sie die Sprache Ihrer Wahl const chooselang = localStorage.getItem('locale') if (Sprache auswählen) returniere „Sprache auswählen“ // wenn nicht, wähle die Sprache const lang = (navigator.language || navigator.browserLanguage).toLowerCase() const locales = Objekt.keys(Nachrichten) returniere locales.includes(lang) ? lang : "zh-cn" } const i18n = erstelleI18n({ Gebietsschema: getLanguage(), FallbackLocale: 'en', global: wahr, Mitteilungen }) Exportfunktion $t(args) { gibt i18n.global.tc(Argumente) zurück } Konsole.log($t('login.title')) exportiere Standard (App) => { app.use(i18n) } veranschaulichen
3. In main.jsimportiere Sprache, { getLanguage, $t } aus './language' Sprache (App) 4. Verwendung in Vue-Datei<Vorlage> //1. <div Klasse="login clamp ta-c fs-28 fw-b m-b10">{{ $t('login.title') }}</div> //2. <el-input v-model="$t('login.title')"></el-input> </Vorlage> Wie kann ich die Sprache dynamisch wechseln und die ElementUI-Sprache ändern?1. Verwenden Sie vuex, um eine Methode in Mutationen zu schreiben, um die Elementsprache zu ändern//---------------------- Zustand----------------------------- importiere { getLanguage } von '@/language' konstanter Zustand = { Sprache: getLanguage() } Standardstatus exportieren //---------------------- Mutationen----------------------------------------- importiere * als Typen aus './types' Gebietsschema aus „element-plus/lib/locale“ importieren importiere localeZH aus „element-plus/lib/locale/lang/zh-cn“ importiere localeEN aus „element-plus/lib/locale/lang/en“ importiere localePL aus „element-plus/lib/locale/lang/pl“ const-Element = { 'zh-cn': GebietsschemaZH, 'en': GebietsschemaEN, 'pl': GebietsschemaPL } const Mutationen = { // Sprache wechseln [Types.SET_LANG](state, lang) { state.lang = lang localStorage.setItem('locale', lang) locale.use(element[lang]) } } Standardmutationen exportieren //------------------------- Typen----------------------------- exportiere const SET_LANG = 'SET_LANG' 2. Verwendungimportiere * als Typen aus '@/store/types' importiere { useI18n } von "vue-i18n"; Standard exportieren { setup(Requisiten, ctx) { const { locale: lang } = useI18n({ useScope: "global" }) lass speichern = useStore() const handelLanguage = (name) => { lang.value = Name store.commit(Typen.SET_LANG, Name) } zurückkehren { handelSprache } } } Nach dem Ändern der ElementUI-Komponentenansicht wird sie nicht aktualisiert?An diesem Punkt werden Sie feststellen, dass selbst wenn wir ein Commit zum Ändern der Sprachseite von elementUI übermitteln, keine Änderung erfolgt, da die Ansichtskomponente nicht aktualisiert wird. Wie können wir die Komponente aktualisieren, um sie neu zu laden? 1. Kontrollieren Sie die Anzeige/Ausblendung der Ansicht in der Router-Ansicht//---------------------- Vorlage----------------------------- <router-view v-if="isReloadRouter"/> //---------------------- Skript----------------------------- const neu laden = () => { state.isReloadRouter = false nächsterTick(() => { state.isReloadRouter = true }) } bereitstellen("neu laden", neu laden) <-- nextTick bereitstellen -> 2. Rufen Sie beim Wechseln der Sprache neu aufconst handelLanguage = (name) => { lang.value = Name store.commit(Typen.SET_LANG, Name) injizieren('neu laden')() } 3. Sie müssen Commit in main.js aufrufen, sonst wird die Sprache nicht geändert, wenn Sie elementUI zum ersten Mal aufrufenimportiere Sprache, { getLanguage, $t } aus './language' importiere '@/styles/elementDefault.scss' store.commit(Typen.SET_LANG, getLanguage()) Wie verwende ich die $t-Funktion global? Wie verwende ich vue-i18n in JS-Dateien? Hängen Sie global an die $t-Funktion und verwenden Sie die $t-Funktion direkt in der js-Datei. Methode 1: Hängen Sie es global über app.config.globalProperties auf Methode 2: Implementierung durch Bereitstellen und Einfügen importiere Sprache, { getLanguage, $t } aus './language' const app = erstelleApp(App); //---------------------- app.config.globalProperties----------------------------- app.config.globalProperties.$t = $t // Verwenden Sie import { getCurrentInstance } von 'vue' const { proxy } = getCurrentInstance() proxy.$t() // ----------------------- bereitstellen, injizieren ----------------------------- // app.provide('$t', $t) in main.js //Verwenden von const $t = inject('$t'). ElMessage.warning({ Nachricht: $t('login.warnMessage'), Typ: "Warnung" }); Vue3 empfiehlt nicht, etwas in der Prototypkette zu montieren, sondern empfiehlt die Verwendung von provide und inject. Daher ist es am besten, provide und inject durch Abhängigkeit und Injektion zu verwenden. Sie können $t nicht direkt in router.js verwenden, Sie müssen diese Funktion selbst importierenimportiere { $t } von '@/Sprache' { Pfad: '/mainManage/device', Name: "Gerät", versteckt: falsch, Meta: { Symbol: „Kreis“, Titel: $t(„Router.Gerät“) }, Komponente: () => import(/* webpackChunkName: "Gerät" */ '@/views/mainManage/Gerät') }, Derzeit gibt es ein Problem: Da das in meinem Menü angezeigte Feld aus dem Titel in den Routing-Informationen stammt, wird router.js nur aufgerufen, wenn das Projekt zum ersten Mal aufgerufen wird. Beim Umschalten der Sprache wird das Menüfeld nicht dynamisch umgeschaltet. Es ändert sich nur, wenn der Browser aktualisiert wird. Wenn es eine Lösung gibt, hinterlassen Sie mir bitte eine Nachricht, um es mir mitzuteilen! ! ! ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können! Das könnte Sie auch interessieren:
|
<<: MySQL-Grundlagen - Kurzanleitung - Wissenszusammenfassung (mit Mindmap)
>>: Zusammenfassung der HTML-Hack-Tags im IE-Browser
Docker umfasst drei grundlegende Konzepte: Image:...
1. Gehen Sie zunächst auf die offizielle Website,...
In diesem Artikel finden Sie das grafische Tutori...
Wenn wir eine Single-Page-Anwendung entwickeln, m...
Inhaltsverzeichnis Anforderungsbeschreibung Probl...
I. Einleitung Lassen Sie mich zunächst die MySQL-...
Installieren Sie das SSH-Tool 1. Öffnen Sie das T...
Da dies mein erster Beitrag ist, weisen Sie mich ...
Inhaltsverzeichnis 1. v-Text (v-Befehlsname = „Va...
Zuerst gebe ich Ihnen den Aktivierungscode für VM...
HTML-Tags zur Textformatierung 標簽 描述 <b> 定義...
Inhaltsverzeichnis Browserkernel JavaScript-Engin...
#include <linux/moduleparam.h> 1. Modulpara...
Redis im Docker bereitstellen Installieren Sie zu...
Inhaltsverzeichnis 1. Szeneneinführung 2 Code-Opt...