Aller au contenu

Lab 24 : Internationalisation (i18n)

album-wholesale-v17-signal-pre-jest

Dans ce lab, vous ajouterez la prise en charge multi-langues à l’application album wholesale en utilisant le système i18n natif d’Angular. Vous marquerez les chaînes pour la traduction, extrairez un fichier de messages XLIFF, fournirez une traduction française et construirez un bundle localisé.

Étape 1 : Marquer les chaînes dans les templates

Section intitulée « Étape 1 : Marquer les chaînes dans les templates »

Ajoutez l’attribut i18n aux éléments texte :

<!-- Texte simple -->
<h1 i18n="@@app.title">Album Store</h1>
<!-- Avec description pour les traducteurs -->
<p i18n="Nombre d'albums|Affiche le nombre d'albums@@album.count">
Albums disponibles
</p>
<!-- Traduction d'attribut -->
<input
type="search"
i18n-placeholder="@@search.placeholder"
placeholder="Rechercher des albums…"
/>
<!-- Bouton -->
<button i18n="@@cart.add">Ajouter au panier</button>

Marquez au moins 5 chaînes dans l’application.

Dans angular.json, ajoutez la configuration i18n :

{
"projects": {
"album-wholesale": {
"i18n": {
"sourceLocale": "en-US",
"locales": {
"fr": {
"translation": "src/locale/messages.fr.xlf"
}
}
}
}
}
}
Fenêtre de terminal
ng extract-i18n --format xlf2 --output-path src/locale

Cela génère src/locale/messages.xlf. Ouvrez le fichier — vous verrez chaque chaîne marquée comme une <trans-unit>.

Copiez le fichier source et renommez-le :

Fenêtre de terminal
cp src/locale/messages.xlf src/locale/messages.fr.xlf

Ouvrez messages.fr.xlf et ajoutez des éléments <target> pour chaque unité :

<trans-unit id="app.title" datatype="html">
<source>Album Store</source>
<target>Boutique d'Albums</target>
</trans-unit>
<trans-unit id="cart.add" datatype="html">
<source>Add to cart</source>
<target>Ajouter au panier</target>
</trans-unit>
<trans-unit id="search.placeholder" datatype="html">
<source>Search albums…</source>
<target>Rechercher des albums…</target>
</trans-unit>

Traduisez toutes les unités extraites.

Étape 5 : Utiliser les expressions pluriel et select

Section intitulée « Étape 5 : Utiliser les expressions pluriel et select »
<!-- Pluriel -->
<p i18n="@@cart.items">
{itemCount, plural,
=0 {Aucun article dans le panier}
=1 {1 article dans le panier}
other {{{itemCount}} articles dans le panier}
}
</p>
<!-- Select (genre ou catégorie) -->
<span i18n="@@album.type">
{albumType, select,
vinyl {Disque vinyle}
cd {Disque compact}
other {Numérique}
}
</span>

Ajoutez les traductions françaises pour ces expressions dans messages.fr.xlf :

<trans-unit id="cart.items" datatype="html">
<source>
{itemCount, plural,
=0 {No items in cart}
=1 {1 item in cart}
other {{{itemCount}} items in cart}
}
</source>
<target>
{itemCount, plural,
=0 {Aucun article}
=1 {1 article}
other {{{itemCount}} articles}
}
</target>
</trans-unit>

Configurez la cible de build dans angular.json :

"build": {
"configurations": {
"fr": {
"localize": ["fr"]
},
"production": {
"localize": true
}
}
}

Construisez toutes les locales :

Fenêtre de terminal
ng build --localize

Inspectez le dossier dist/ — vous devriez voir les sous-dossiers browser/en-US/ et browser/fr/.

Servez le build français localement :

Fenêtre de terminal
cd dist/album-wholesale/browser/fr
npx http-server -p 8080

Ouvrez http://localhost:8080 et vérifiez que toutes les chaînes marquées apparaissent en français.