Fallback
fallbackLocale: '<lang>' pour choisir la langue à utiliser lorsque votre langue préférée ne dispose pas d'une traduction.
Fallback implicite en utilisant les locales
Si un locale est donné contenant un territoire et un dialecte optionnel, le fallback implicite est activé automatiquement.
Par exemple de-DE-bavarian effectuera un fallback
de-DE-bavariande-DEde
Pour supprimer le fallback automatique, ajoutez le point d'exclamation ! comme suffixe, par exemple de-DE!
Fallback explicite avec une seule locale
Parfois certains éléments ne seront pas traduits dans certaines langues. Dans cet exemple, l'élément hello est disponible en anglais mais pas en japonais :
const messages = {
en: {
hello: 'Hello, world!'
},
ja: {
}
}Si vous souhaitez utiliser les éléments en lorsqu'un élément n'est pas disponible dans votre locale souhaitée, définissez l'option fallbackLocale dans createI18n :
const i18n = createI18n({
locale: 'ja',
fallbackLocale: 'en',
messages
})Modèle :
<p>{{ $t('hello') }}</p>Résultat :
<p>Hello, world!</p>Par défaut, le fallback vers fallbackLocale génère deux avertissements de console :
[intlify] Clé 'hello' introuvable dans les messages de la locale 'ja'.
[intlify] Retour en arrière pour traduire la clé 'hello' avec la locale 'en'.Le premier message d'avertissement indique la clé qui n'a pas été trouvée, car celle transmise à la fonction de traduction $t n'est pas présente dans les messages de la locale ja, et le second message d'avertissement apparaît quand on effectue le fallback pour résoudre les messages localisés à partir des messages de la locale en. Ces messages d'avertissement sont affichés pour faciliter le débogage avec Vue I18n.
NOTE
Ces messages d'avertissement ne sont affichés que en mode développement (process.env.NODE_ENV !== 'production') par défaut, pas en production.
Pour supprimer le premier avertissement (Clé introuvable...), définissez silentTranslationWarn: true en mode Legacy API ou définissez missingWarn: false en mode Composition API lors de l'initialisation du createI18n.
Pour supprimer le deuxième avertissement (Retour en arrière pour...), définissez silentFallbackWarn: true en mode Legacy API ou définissez fallbackWarn: false en mode Composition API lors de l'initialisation du createI18n.
Fallback explicite avec un tableau de locales
Il est possible de définir plusieurs locales de fallback en utilisant un tableau de locales. Par exemple
fallbackLocale: [ 'fr', 'en' ],Fallback explicite avec des cartes de décision
Si des cartes de décision plus complexes pour les locales de fallback sont requises, il est possible de définir des cartes de décision avec les locales de fallback correspondantes.
En utilisant la carte de décision suivante :
fallbackLocale: {
/* 1 */ 'de-CH': ['fr', 'it'],
/* 2 */ 'zh-Hant': ['zh-Hans'],
/* 3 */ 'es-CL': ['es-AR'],
/* 4 */ 'es': ['en-GB'],
/* 5 */ 'pt': ['es-AR'],
/* 6 */ 'default': ['en', 'da']
},Ce qui donnera les chaînes de fallback suivantes :
| locale | chaînes de fallback |
|---|---|
'de-CH' | de-CH > fr > it > en > da |
'de' | de > en > da |
'zh-Hant' | zh-Hant > zh-Hans > zh > en > da |
'es-SP' | es-SP > es > en-GB > en > da |
'es-SP!' | es-SP > en > da |
'fr' | fr > en > da |
'pt-BR' | pt-BR > pt > es-AR > es > en-GB > en > da |
'es-CL' | es-CL > es-AR > es > en-GB > en > da |
Interpolation de fallback
Définissez fallbackFormat: true pour effectuer une interpolation de template sur les clés de traduction lorsque votre langue ne dispose pas d'une traduction pour une clé.
Puisque les clés des traductions sont des chaînes de caractères, vous pouvez utiliser un message lisible par l'utilisateur (pour une langue particulière) comme clé. Exemple :
const messages = {
ja: {
'Hello, world!': 'こんにちは、世界!'
}
}Cela est utile car vous n'avez pas besoin de spécifier une traduction pour la chaîne "Hello, world!" en anglais.
En fait, vous pouvez même inclure des paramètres de template dans une clé. En combinaison avec fallbackFormat: true, cela vous permet de sauter l'écriture de templates pour votre langue "de base"; les clés sont vos templates.
const messages = {
ru: {
'Hello {name}': 'Здравствуйте {name}'
}
}
const i18n = createI18n({
locale: 'ru',
fallbackLocale: 'en',
fallbackFormat: true,
messages
})Quand le template est le suivant :
<p>{{ $t('Hello {name}', { name: 'John' }) }}</p>
<p>{{ $t('The weather today is {condition}!', { condition: 'sunny' }) }}</p>Le résultat sera :
<p>Здравствуйте, John</p>
<p>The weather today is sunny!</p>