
Vue i18n: išsamus internacionalizavimo konfigūravimas naudojant vue-i18n
Nuo diegimo iki gamybinės aplinkos: sukonfigūruokite vue-i18n naudodami Composition API, tvarkykite daugiskaitą pagal CLDR taisykles, naudokite komponentų interpoliavimą ir pridėkite išmanias lokalių atsarginio parinkimo grandines.
Įdiekite vue-i18n
vue-i18n yra oficialus Vue.js internacionalizavimo papildinys. Jis suteikia reaktyvius vertimus, ICU stiliaus daugiskaitą, komponentų interpoliavimą, datos, laiko ir skaičių formatavimą bei palaiko Options API ir Composition API.
npm install vue-i18n@9Sukonfigūruokite vue-i18n
Sukurkite i18n egzempliorių naudodami createI18n() ir užregistruokite jį kaip Vue papildinį. Apibrėžkite lokalės pranešimus, nustatykite numatytąją ir atsarginę lokales. vue-i18n palaiko ir senąjį (Options API), ir kompozicijos (Composition API) režimus.
// src/i18n.ts
import { createI18n } from 'vue-i18n'
import en from './locales/en.json'
import de from './locales/de.json'
const i18n = createI18n({
legacy: false, // Use Composition API mode
locale: 'en', // Default locale
fallbackLocale: 'en', // Fallback locale
messages: { en, de },
})
export default i18n// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n'
const app = createApp(App)
app.use(i18n)
app.mount('#app')Naudokite vertimus šablonuose
vue-i18n pateikia funkciją $t() šablonuose (Options API) ir funkciją t() iš useI18n() (Composition API). Abi variantai priima vertimo raktą ir pasirinktinius vardinius arba sąrašo parametrus interpoliavimui.
// src/locales/en.json
{
"nav": {
"home": "Home",
"about": "About",
"settings": "Settings"
},
"greeting": "Hello, {name}!",
"cart": {
"itemCount": "no items | one item | {count} items"
}
}
// src/locales/de.json
{
"nav": {
"home": "Startseite",
"about": "Über uns",
"settings": "Einstellungen"
},
"greeting": "Hallo, {name}!",
"cart": {
"itemCount": "keine Artikel | ein Artikel | {count} Artikel"
}
}Tvarkykite daugiskaitą
vue-i18n palaiko daugiskaitą naudodama vertikaliuoju brūkšniu atskirtas formas ir funkciją $tc() (senajame režime) arba t() su skaičiaus parametru (Composition API). Lokalės pranešimuose apibrėžkite daugiskaitos formas su vertikaliuoju brūkšniu: 'no items | one item | {count} items'.
<template>
<div>
<!-- Simple translation -->
<h1>{{ $t('nav.home') }}</h1>
<!-- With variables -->
<p>{{ $t('greeting', { name: userName }) }}</p>
<!-- In attributes -->
<input :placeholder="$t('nav.settings')" />
<!-- Composition API -->
<p>{{ greeting }}</p>
</div>
</template>
<script setup lang="ts">
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const userName = 'Alice'
const greeting = t('greeting', { name: userName })
</script>Pridėti atsarginių lokalių grandines
Integruota vue-i18n fallbackLocale palaiko tik plokščią atsarginių lokalių sąrašą, o ne kiekvienai lokalei skirtas grandines. Jei pt-BR naudotojui trūksta rakto, pasirenkama anglų, o ne pt-PT kalba. vue-i18n-locale-chain prideda konfigūruojamas giliojo suliejimo grandines, kad regionų naudotojai visada matytų artimiausią galimą vertimą.
<template>
<div>
<!-- Pipe-separated plurals -->
<p>{{ $t('cart.itemCount', count) }}</p>
<!-- Named plurals (recommended for complex languages) -->
<p>{{ $t('orders', { n: orderCount }) }}</p>
</div>
</template>
<!-- In your locale file: -->
<!-- "orders": "{n} order | {n} orders" -->Automatizuoti vertimus
Sukonfigūravę vue-i18n, išverskite lokalės JSON failus naudodami DI. IDE aplinkoje paprašykite DI asistento išversti šaltinio failą arba integruokite vertimą į CI/CD konvejerį, kad lokalizavimas būtų visiškai automatizuotas.
<template>
<select v-model="locale">
<option v-for="lang in availableLocales" :key="lang" :value="lang">
{{ lang }}
</option>
</select>
</template>
<script setup lang="ts">
import { useI18n } from 'vue-i18n'
const { locale, availableLocales } = useI18n()
</script>// src/i18n.ts
import { createI18n } from 'vue-i18n'
const i18n = createI18n({
legacy: false,
locale: 'en',
fallbackLocale: 'en',
messages: {},
})
export async function loadLocale(locale: string) {
const messages = await import(`./locales/${locale}.json`)
i18n.global.setLocaleMessage(locale, messages.default)
i18n.global.locale.value = locale
}
export default i18nLokalės atsarginio parinkimo grandinės konfigūracija
Sukonfigūruokite kiekvienai lokalei skirtas atsarginio parinkimo grandines, kad regionų naudotojai matytų artimiausią galimą vertimą, o ne iškart pereitų prie anglų kalbos. vue-i18n palaiko objekto tipo fallbackLocale, skirtą kiekvienos lokalės grandinėms apibrėžti.
// src/i18n.ts
import { createI18n } from 'vue-i18n'
const i18n = createI18n({
legacy: false,
locale: 'pt-BR',
fallbackLocale: {
'pt-BR': ['pt', 'en'],
'zh-Hant-TW': ['zh-Hant', 'zh', 'en'],
'es-419': ['es', 'en'],
default: ['en'],
},
messages: {
en: { /* ... */ },
pt: { /* ... */ },
'pt-BR': { /* ... */ },
},
})Dažnos klaidos
Senojo ir Composition API režimų maišymas
v-html naudojimas išverstoms eilutėms
Regionų naudotojai vietoje pirminės lokalės mato anglų kalbą
Išbandykite i18n Agent dabar
Nuvilkite vertimo failą čia
JSON, YAML, PO, XML, CSV, Markdown, Properties
arba spustelėkite norėdami pasirinkti
Tikslinės kalbos