
Vue i18n : configuration complète de l'internationalisation avec vue-i18n
De l'installation à la production : configurez vue-i18n avec la Composition API, gérez les pluriels selon les règles CLDR, utilisez l'interpolation de composants et ajoutez des chaînes de repli de locale intelligentes.
Installer vue-i18n
vue-i18n est le plugin d'internationalisation officiel de Vue.js. Il fournit des traductions réactives, une pluralisation de type ICU, l'interpolation de composants, le formatage des dates, heures et nombres, ainsi que la prise en charge de l'Options API et de la Composition API.
npm install vue-i18n@9Configurer vue-i18n
Créez une instance i18n avec createI18n() et enregistrez-la en tant que plugin Vue. Définissez vos messages de locale, la locale par défaut, et configurez la locale de repli. vue-i18n prend en charge à la fois le mode legacy (Options API) et le mode composition (Composition API).
// 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')Utiliser les traductions dans les modèles
vue-i18n fournit la fonction $t() dans les modèles (Options API) et la fonction t() issue de useI18n() (Composition API). Les deux acceptent la clé de traduction ainsi que des paramètres nommés ou de liste facultatifs pour l'interpolation.
// 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"
}
}Gérer la pluralisation
vue-i18n prend en charge la pluralisation via des formes séparées par des barres verticales et la fonction $tc() (legacy) ou t() avec un paramètre count (Composition API). Définissez les formes plurielles dans vos messages de locale à l'aide du séparateur barre verticale : '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>Ajouter des chaînes de repli de locale
Le paramètre fallbackLocale intégré de vue-i18n ne prend en charge qu'une liste plate de locales de repli, et non des chaînes propres à chaque locale. Un utilisateur pt-BR ayant une clé manquante se replie sur l'anglais au lieu de pt-PT. vue-i18n-locale-chain ajoute des chaînes de fusion profonde configurables afin que les utilisateurs régionaux voient toujours la traduction disponible la plus proche.
<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" -->Automatiser les traductions
Une fois vue-i18n configuré, traduisez vos fichiers JSON de langue à l'aide de l'IA. Depuis votre IDE, demandez à votre assistant IA de traduire le fichier source, ou intégrez la traduction à votre pipeline CI/CD pour une localisation entièrement automatisée.
<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 i18nConfiguration de la chaîne de repli des locales
Configurez des chaînes de repli par locale afin que les utilisateurs régionaux voient la traduction disponible la plus proche, au lieu de basculer directement vers l'anglais. vue-i18n prend en charge un fallbackLocale de type objet pour définir des chaînes par locale.
// 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': { /* ... */ },
},
})Pièges courants
Mélange des modes Legacy et Composition API
Utilisation de v-html pour les chaînes traduites
Les utilisateurs régionaux voient l'anglais au lieu de la locale parente
Essayez i18n Agent maintenant
Déposez votre fichier de traduction ici
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou cliquez pour parcourir
Langues cibles