Ceci est une ancienne révision du document !
Table des matières
@angular/localize
Présentation
Le système de traduction natif intégré à Angular.
Avantages :
- Pas de dépendances externes,
- Le texte est traduit en dur dans le code généré,
- On compile une fois, on génère un site par langue.
Inconvénient :
- On ne peut pas traduire des librairies, i18n Support in Angular Library Archive du 27/03/2019 le 22/08/2021
- On génère un site autonome par langue. Cela duplique les
assets. Localizing your app Archive du 12.2.3 le 22/08/2021 - Il n'est que possible de générer la liste des textes à traduire. Il n'est pas possible de mettre à jour une liste des traductions. ng-xi18n: Merge/Update Existing Translations File (XLIFF) Archive du 02/06/2017 le 23/08/2021
Initialisation
Installation
npm i --save @angular/localize
Configuration
Il faut activer les options localize et aot. Voir la i18n d'Angular.
Dans le code source, on met une langue par défaut (anglais par exemple) et la traduction dans le fichier .xlf.
Ajouter l'action extract-i18n dans la librairie qu'on souhaite traduire. ng xi18n not working for library Archive du 03/03/2020 le 23/08/2021
- angular.json
{ "projects": { "lib-library": { "architect": { "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { "browserTarget": "angular-i18n:build" } } } }, "app-main": { "i18n": { "sourceLocale": "en-US", "locales": { "fr": "projects/app-main/src/locale/messages.fr.xlf" } }, "architect": { "build": { "options": { "localize": true, "aot": true } } } } } }
Sources
- Librairie
Il faut ajouter au fichier test.ts:
- test.ts
/****************************************************************************** * Load `$localize` onto the global scope - used if i18n tags appear in Angular * templates. */ import '@angular/localize/init';
- Application
Il faut ajouter la même chose au fichier polyfills.ts:
- polyfills.ts
/****************************************************************************** * Load `$localize` onto the global scope - used if i18n tags appear in Angular * templates. */ import '@angular/localize/init';
Traduction
.html
Il suffit d'ajouter un attribut i18n. Il est possible d'ajouter des catégories aux textes descriptifs.
<label for="width" i18n="input form|Foundation strip width">Width: </label>
- Extraction des données
ng extract-i18n --output-path ./projects/app-main/src/locale
S'il y a une librairie et une application, la traduction fusionne les textes de la librairie et de l'application.
- Traduire la langue
Copier le fichier généré dans ./projects/app-main/src/locale/messages.xlf.
En dessous de chaque <source>…</source>, ajouter la traduction <target>…</target>.
<source>Width: </source> <target>Largeur : </target>
La traduction peut aussi gérer le binding :
<pre i18n="output form|Output of Meyerhof calculation"> Form Values: {{ result | json }}</pre>
<source>Form Values: <x id="INTERPOLATION"/></source> <target>Résultats : <x id="INTERPOLATION"/></target>
@ngx-translate/core
Présentation
L'inverse de @angular/localize.
