Detaillierte Erklärung des Vue-Elements plus Mehrsprachenumschaltung

Detaillierte Erklärung des Vue-Elements plus Mehrsprachenumschaltung

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?
  • Wie kann ich die Sprache dynamisch wechseln und die ElementUI-Sprache ändern?
  • Nach dem Ändern der ElementUI-Komponentenansicht wird sie nicht aktualisiert?
  • Wie verwende ich die $t-Funktion global?
  • Wie verwende ich vue-i18n in JS-Dateien?

Wie wechselt man zwischen mehreren Sprachen?

1. Installieren Sie das vue-i18n-Paket

npm ich vue-i18n --speichern

2. Erstellen Sie ein neues im src-Verzeichnis, wie unten gezeigt:

Bildbeschreibung hier einfügen

en.js

const EN = {
  Anmeldung: {
    Titel: „Benutzeranmeldung“
  },
}
Export Standard DE

pl-pl.js

Konstante PL_PL = {
  Anmeldung: {
    Titel: „Ich bin ein sehr guter Mensch“
  },
}
Standard PL_PL exportieren

zh-cn.js

const ZH_CN = {
  Anmeldung: {
    Titel: „Benutzeranmeldung“
  },
}
Exportvorgabe ZH_CN

index.js

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

Die Funktion getLanguage ermittelt, ob im aktuellen lokalen Speicher eine Sprache ausgewählt ist. Wenn nicht, wird die Sprache des aktuellen Browsers abgerufen.
Kapseln Sie die $t-Funktion und exportieren Sie sie zur Verwendung in JS-Dateien

3. In main.js

importiere 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. Verwendung

importiere * 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 auf

 const 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 aufrufen

importiere 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 importieren

importiere { $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! ! !

Zusammenfassen

Dieser 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:
  • Detaillierte Erklärung zur Verwendung von Element-Plus in Vue3
  • Implementierung von vite+vue3.0+ts+element-plus zum schnellen Erstellen eines Projekts
  • Schritte zum Erstellen des Projekts vite+vue3+element-plus
  • Ideen zur Implementierung der Mehrsprachenumschaltung in Vue-Projekten
  • So erzielen Sie mit vue-i18n einen mehrsprachigen Umschalteffekt
  • Verwenden Sie die Vue-Internationalisierung i18n, um mehrere Funktionen zum Umschalten auf Sprachen zu implementieren
  • Verwenden des Vue-i18-Plugins in Vue zur Realisierung einer mehrsprachigen Umschaltfunktion

<<:  MySQL-Grundlagen - Kurzanleitung - Wissenszusammenfassung (mit Mindmap)

>>:  Zusammenfassung der HTML-Hack-Tags im IE-Browser

Artikel empfehlen

Erläuterung des Vue.js $refs-Anwendungsfalls

Trotz Props und Events müssen Sie manchmal immer ...

Detaillierte Erläuterung der Angular-Datenbindung und ihrer Implementierung

Inhaltsverzeichnis Vorwort Was ist Datenbindung? ...

MySQL-Gruppierungsabfragen und Aggregatfunktionen

Überblick Ich glaube, dass wir häufig auf solche ...

Erklären Sie anhand eines Diagramms, was Web 2.0 ist

Heutzutage sprechen wir oft über Web 2.0. Was als...

Farbverlauf für HTML-Hintergrund durch CSS erreicht

Screenshots der Effekte: Implementierungscode: Cod...

Erläuterung der Dockerfile-Anweisungen und der grundlegenden Struktur

Durch die Verwendung von Dockerfile können Benutz...

Analyse der gemeinsamen Indexfunktion von MySQL und Anwendungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...

Tutorial zum Anmelden bei MySQL nach der Installation von Mysql 5.7.17

Die Installation von mysql-5.7.17 wird weiter unt...

Führen Sie die Schritte aus, um mit Samba Ordner in CentOS 7 freizugeben

Vorwort Samba ist eine kostenlose Software, die d...

Detailliertes Tutorial zur Installation des Quellcodes von CentOS6.9+Mysql5.7.18

Bei der Installation des Quellcodes von CentOS6.9...

VSCode-Entwicklung UNI-APP Konfigurations-Tutorial und Plugin

Inhaltsverzeichnis Vorne geschrieben Vorsichtsmaß...

Verwendung der MySQL-Zeitdifferenzfunktionen TIMESTAMPDIFF und DATEDIFF

Verwendung der Zeitdifferenzfunktionen TIMESTAMPD...