Se connecter

La solution d'internationalisation ultime de Nuxt : I18n+Nuxt Content

Auteur:néo yang Temps:2023/12/06 Lire: 6616
Avec la tendance à l'étranger, Vue et Nuxt, qui sont largement utilisés en Chine, sont souvent confrontés à des problèmes d'internationalisation. Si c’est wordpress, c’est simple, installez […]

Avec la tendance à l'étranger, Vue et Nuxt, qui sont largement utilisés en Chine, sont souvent confrontés à des problèmes d'internationalisation.

Si c'est WordPress, c'est simple : installez un plug-in, configurez l'interface de traduction de Google, et le système traduira automatiquement chaque jour le nouveau contenu dans différentes versions linguistiques.

Mais pour d'autres systèmes, ce n'est pas si pratique.

Le code est open source : https://github.com/aigc-projects/nuxt-i18n-starter

1. Internationalisation de base-I18n

nuxt-i18n

1. Qu'est-ce que l'I18n ?

I18n est un incontournable pour l’internationalisation de Nuxt. Il fournit principalement un ensemble complet de solutions d'internationalisation, y compris le routage d'internationalisation et les méthodes de changement de langue basées sur le routage d'internationalisation.

2. Installez I18n

Tous les éléments suivants conviennent.

fil ajouter @nuxtjs/i18n # fil npm je @nuxtjs/i18n # npm pnpm je @nuxtjs/i18n pnpm ajouter @nuxtjs/i18n@next --save-dev

3. Configurez nuxt.config.ts

 modules : [ '@nuxtjs/i18n', ], i18n : { locales : [ { nom : "English", code : "en", iso : "en-US", dir : "ltr" }, { nom : " español",code: "es", iso: "es-LA", dir: "ltr" }, { nom: "En français",code: "fr", iso: "fr-FR", dir: "ltr " }, { name : "العربية", code : "ar", iso : "ar-EG", dir : "rtl" },], defaultLocale : "en", detectBrowserLanguage : false, // 👇 Référencez la Vue I18n fichier de configuration vueI18n : "./i18n.config.js", }, 

4. Configurez i18n.config.ts

Créez un nouveau i18n.config.ts ou i18n.config.js

Ce fichier est utilisé pour configurer les champs de traduction.

export default definitionI18nConfig(() => ({ legs: false, // 👇 Ajouter des messages de traduction : { "en": { nav_about: "About", }, "es": { nav_about: "sobre", }, "ar " : { nav_about : "نبذة عنا", }, "fr": { nav_about : "À propos", }, }, }))

5. Lier les composants

code

usage

{{ $t('nav_home') }}

6. Composant de changement de langue

code

<!-- components/LangSwitcher.vue -->

<script setup lang="ts">
// Used for type casting
// Used for type casting
import type { LocaleObject } from "@nuxtjs/i18n/dist/runtime/composables";

// Get active locale and supported locales
const { locale, locales } = useI18n()
// Cast to avoid TypeScript errors in template
const supportedLocales = locales.value as Array<LocaleObject>

const router = useRouter()
const switchLocalePath = useSwitchLocalePath()

// When the visitor selects a new locale, route to
// to the new locale's path e.g. /en-CA/foo → /ar-EG/foo
function onLocaleChanged(event: Event) {
  const target = event.target as HTMLInputElement
  
  // switchLocalePath('ar-EG') will return Arabic equivalent
  // for the *current* URL path e.g. if we're at /en-CA/about,
  // switchLocalePath('ar-EG') will return '/ar-EG/about'
  router.push({ path: switchLocalePath(target.value) })
}
</script>

<template>
  <div>
    🌐
    <select :value="locale" @change="onLocaleChanged">
      <option v-for="loc in supportedLocales" :key="loc.code" :value="loc.code">
        {{ nom du lieu }}
      </option>
    </select>
  </div>
</template>

usage

Utiliser des balises sur une page ou une mise en page :

7. Obtenez la langue actuelle

context.app.i18n.locale // où vous avez accès à NuxtContext this.$i18n.locale // dans le composant $i18n.locale // dans le modèle

2. Internationalisation du contenu du document

L'utilisation d'I18n seule peut réaliser complètement l'internationalisation de l'ensemble du site. Mais si le site Web contient de nombreux articles, un grand nombre d'éléments de configuration doivent être écrits dans i18n.config.ts, ce qui est assez gênant.

Bien entendu, si le contenu de l'article provient de la base de données principale, il n'est pas nécessaire d'en tenir compte : il vous suffit de stocker le contenu traduit dans la base de données et d'obtenir la version de l'article dans la langue correspondante pour les pages de différentes langues.

Ce qui est dit ici, c'est que le contenu de l'article ne se trouve pas dans la base de données back-end, mais sur le front-end.

Pour nuxt, le meilleur moyen est d’utiliser le contenu nuxt. En termes simples, tous les articles sont stockés dans des fichiers de démarque, puis, lorsqu'un certain itinéraire est ouvert, la page et le fichier de démarque correspondant à cet itinéraire seront chargés.

Parce qu'une même page, comme la page d'accueil, utilise des itinéraires différents dans différentes langues.

Par exemple, la valeur par défaut est l'anglais. La page d'accueil est www.xxx.com et la version espagnole est www.xxx.com/es.

Ainsi, www.xxx.com appellera index.vue dans le répertoire des pages et chargera index.md dans le répertoire de contenu. Cependant, www.xxx.com/es appellera index.vue dans le répertoire pages et chargera le document es.md dans le répertoire content.

Par conséquent, pour différentes versions linguistiques du même article, il vous suffit de créer la version correspondante du fichier de traduction en fonction de l'itinéraire dans le répertoire de contenu.

1. Installez le contenu nuxt

pnpm ajouter @nuxt/content

2. Configuration nuxt.config.ts

modules : [ '@nuxt/content' ], contenu : { // ... options }

3. Appelez le document de traduction correspondant sur la page

La page d'accueil est par défaut en anglais et les itinéraires et pages en espagnol sont configurés.

Le parcours final est le suivant :

Page d'accueil par défaut (anglais) : www.xxx.com

Page d'accueil espagnole : www.xxx.com/es

Tout d'abord, concevez le répertoire du fichier de contenu

//conception du répertoire de contenu | pages . index.vue contenu . index.md . es.md

Ensuite, ajoutez des balises à la partie de la page d'accueil où l'article doit être appelé

 <ContentDoc />

3. Bonnes pratiques pour le routage international

en-US, en signifie anglais, US signifie pays : États-Unis. Il s'agit d'un code de langue standard. L'itinéraire peut être écrit directement comme ceci : www.xxx.com/en-US

Cependant, la plupart du temps, nous n’avons pas besoin de ventiler le niveau au niveau national, seul le niveau linguistique suffit. Il est donc plus approprié de l'écrire ainsi : www.xxx.com/fr

Bien sûr, cela ne peut pas être le cas pour le chinois. Le chinois comprend : zh-CN (chinois simplifié), zh-HK (Hong Kong traditionnel), zh-TW (Taiwan traditionnel).

Donc, pour les chinois, c'est le seul moyen : www.xxx.com/zh-cn

4. Annexe : Codes linguistiques normalisés internationaux

code de languepays de langue
un Fafrikaans
af-ZAafrikaans
ararabe
ar-AEArabe (EAU)
ar-BHArabe (Bahreïn)
ar-DZArabe (Algérie)
ar-EGArabe (Egypte)
ar-IQArabe (Irak)
ar-JOArabe (Jordanie)
ar-KWArabe (Koweït)
ar-LBArabe (Liban)
ar-LYArabe (Libye)
ar-MAArabe (Maroc)
ar-OMArabe (Oman)
ar-QAArabe (Qatar)
ar-SAArabe (Arabie Saoudite)
ar-SYArabe (Syrie)
ar-TNArabe (Tunisie)
ar-YEArabe (Yémen)
azazerbaïdjanais
az-AZazerbaïdjanais (latin)
az-AZazerbaïdjanais (cyrillique)
êtreBelge
être-PARBelge
bgbulgare
bg-BGbulgare
bs-BAbosniaque (latin, Bosnie-Herzégovine)
Californiecatalan
ca-EScatalan
cstchèque
cs-CZtchèque
cygallois
cy-GBgallois
papadanois
da-DKdanois
deAllemand
de-ATAllemand (Autriche)
de-CHAllemand (Suisse)
de-DEAllemand Allemagne)
épicerie fineAllemand (Liechtenstein)
de-LUAllemand (Luxembourg)
dvTiwiese
dv-MVTiwiese
elgrec
el-GRgrec
frAnglais
fr-AUAnglais (Australie)
fr-BZAnglais (Belize)
fr-CAAnglais (Canada)
fr-CBAnglais (Caraïbes)
fr-FRAnglais Royaume-Uni)
fr-IEAnglais (Irlande)
fr-JMAnglais (jamaïcain)
fr-NZAnglais (Nouvelle-Zélande)
fr-PHAnglais (Philippines)
fr-TTAnglais (Trinité)
fr-USÉtats Unis Anglais)
fr-ZAAnglais (Afrique du Sud)
fr-ZWAnglais (Zimbabwe)
eoespéranto
esEspagnol
es-AREspagnol (Argentine)
es-BOEspagnol (Bolivie)
es-CLEspagnol (Chili)
es-COEspagnol (Colombie)
es-CREspagnol (Costa Rica)
es-DOEspagnol (République Dominicaine)
es-ECEspagnol (Équateur)
es-ESEspagnol (traditionnel)
es-ESEspagnol (international)
es-GTEspagnol (Guatemala)
es-HNEspagnol (Honduras)
es-MXEspagnol (Mexique)
es-NIEspagnol (Nicaragua)
es-PAEspagnol (Panama)
es-PEEspagnol (Pérou)
es-PREspagnol (Porto Rico (États-Unis))
es-PYEspagnol (Paraguay)
es-SVEspagnol (El Salvador)
es-UYEspagnol (Uruguay)
es-VEEspagnol (Venezuela)
etestonien
et-EEestonien
UEBasque
eu-ESBasque
FAFrançais
sapinFrançais
Fifinlandais
fi-FIfinlandais
pourféroïen
fo-FOféroïen
frFrançais
fr-BEFrançais (Belgique)
fr-CAFrançais (Canada)
fr-CHFrançais (Suisse)
F RFRFrance francaise)
fr-LUFrançais (Luxembourg)
fr-MCFrançais (Monaco)
glgalicien
gl-ESgalicien
gugujarati
gu-INgujarati
ilhébreu
il-ILhébreu
Saluthindi
Salut danshindi
heurecroate
h-BACroate (Bosnie-Herzégovine)
rh-rhcroate
heinhongrois
hu-HUhongrois
salutarménien
hy-AMarménien
IDENTIFIANTindonésien
je l'ai faitindonésien
estislandais
est-ESTislandais
ilitalien
démangerItalien (Suisse)
ça çaItalien (Italie)
ouiJaponais
ja-JPJaponais
kagéorgien
ka-GEgéorgien
kkKazakh
kk-KZKazakh
je saisCanara
kn-INCanara
kola langue coréenne
ko-KRla langue coréenne
kokKonkani
kok-INKonkani
kyKirghize
ky-KGKirghize (cyrillique)
ltlituanien
lt-LTlituanien
lvletton
lv-LVletton
miMaori
mi-NZMaori
mkMacédonien
mk-MKMacédonien (ARYM)
minutemongol
mn-MNMongol (cyrillique)
M.marathi
monsieur-INmarathi
MSmalais
ms-BNMalais (Brunéi Darussalam)
Mme-MYMalais (Malaisie)
montmaltais
mt-MTmaltais
nbNorvégien (Berkemeier)
nb-NONNorvégien (Berkemeier) (Norvège)
nlNéerlandais
nl-BENéerlandais (Belgique)
nl-NLNéerlandais (Pays-Bas)
n-NONNorvégien (Nynosk) (Norvège)
nsSotho du Nord
n-ZASotho du Nord
Pennsylvaniependjabi
douleurpendjabi
PLpolonais
pl-PLpolonais
ptPortugais
pt-BRPortugais (Brésil)
pt-PTPortugais (Portugal)
quQuechua
qu-BOQuechua (Bolivie)
qu-ECQuechua (Équateur)
qu-PEQuechua (Pérou)
roroumain
ro-ROroumain
rurusse
ru-RUrusse
saSanskrit
sa-INSanskrit
seSamos du Nord
se-FISamoa du Nord (Finlande)
se-FIScott Samos (Finlande)
se-FIInari Samos (Finlande)
se-NONSamoa du Nord (Norvège)
se-NONLulea Samos (Norvège)
se-NONSamos du Sud (Norvège)
se-SESamien du Nord (Suède)
se-SELulea Samos (Suède)
se-SESamos du Sud (Suède)
skslovaque
sk-SKslovaque
slslovène
sl-SIslovène
carréalbanais
carré-ALalbanais
sr-BASerbe (latin, Bosnie-Herzégovine)
sr-BASerbe (cyrillique, Bosnie-Herzégovine)
sr-SPSerbie (latin)
sr-SPSerbie (cyrillique)
svsuédois
sv-FISuédois (Finlande)
sv-SEsuédois
swSwahili
sw-KESwahili
Syriesyriaque
syr-SYsyriaque
taTamil
ta-INTamil
Tetélougou
te-INtélougou
èmethaïlandais
e-THthaïlandais
téléTagalog
tl-PHTagalog (Philippines)
tnTswana
tn-ZATswana
trturc
tr-TRturc
tsDzonga
tttatar
tt-RUtatar
Royaume-Uniukrainien
Royaume-Uni-UAukrainien
tonOurdou
votre-PKOurdou
ouzOuzbek
uz-UZOuzbek (latin)
uz-UZOuzbek (cyrillique)
vivietnamien
vi-VNvietnamien
xhlangue bantoue
xh-ZAlangue bantoue
zhChinois
zh-CNChinois simplifié)
zh-HKChinois (Hong Kong)
zh-MOChinois (Macao)
zh-SGChinois (Singapour)
zh-TWchinois traditionnel)
zuzoulou
zu-ZAzoulou

Lien

https://github.com/aigc-projects/nuxt-i18n-starter



copyright © www.lyustu.com tous droits réservés.
Thème : TheMoon V3.0. Auteur : neo yang