npm i --save @angular/localize
===Configuration===
Il faut activer les options ''localize'' et ''aot''. Voir la [[https://angular.io/guide/i18n|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. [[https://github.com/angular/angular-cli/issues/17140|ng xi18n not working for library]] {{ :lang:angular:traduction:ng_xi18n_not_working_for_library_issue_17140_angular_angular-cli_2021-08-22_01_17_44_.html |Archive du 03/03/2020 le 23/08/2021}}
* 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 '''', ajouter la traduction ''
Largeur :
La traduction peut aussi gérer le ''binding'' :
Form Values: {{ result | json }}
Résultats :
=====@ngx-translate/core=====
[[https://github.com/ngx-translate/core|Site web]]
====Présentation====
L'inverse de ''@angular/localize''. C'est donc une dépendance externe à Angular.
Avantages :
* Un seul site dont la langue est changeable sans recharger,
* On peut avoir un fichier de traduction distinct par librairie et par application [[https://github.com/ngx-translate/core/issues/199#issuecomment-339084987|Loading Multiple file from a directory]] {{ :lang:angular:traduction:loading_multiple_file_from_a_directory._issue_199_ngx-translate_core_github_2021-08-24_20_45_19_.html |Archive du 16/08/2016 le 24/08/2021}}
Inconvénient :
* Comme c'est une dépendance externe, on ne profite pas d'une intégration profonde des avantages du compilateur,
* Dépendance externe,
* Le texte est traduit à la volée. Avant la conversion, le texte est manquant. Cela peut donc réduire l'expérience utilisateur,
* Nécessite de définir l'utilisation d'un pipe pour chaque composant.
====Initialisation====
===Installation===
npm i --save @ngx-translate/core
===Configuration===
Il n'y a besoin de rien.
===Sources===
Un exemple simple : [[https://blog.angulartraining.com/how-to-internationalize-i18n-your-angular-application-tutorial-dee2c6984bc1|How to internationalize (i18n) your Angular application?]] {{ :lang:angular:traduction:how_to_internationalize_i18n_your_angular_application_tutorial_by_alain_chautard_angular_training_2021-10-09_22_38_52_.html |Archive du 02/04/2019 le 09/10/2021}}
Un autre exemple plus complet avec uniquement une application: [[https://blog.briebug.com/blog/internationalizing-your-angular-app|Internationalizing your Angular app]] {{ :lang:angular:traduction:internationalizing_your_angular_app_2021-10-02_09_46_07_.html |Archive du 20/08/2019 le 02/10/2021}}
Exemple bien détaillé avec une librairie et une application: [[https://medium.com/@lopesgon/translate-angular-4-with-ngx-translate-and-multiple-modules-7d9f0252f139|Translate Angular >=4 with ngx-translate and multiple modules]] {{ :lang:angular:traduction:translate_angular_4_with_ngx-translate_and_multiple_modules_by_frederic_lopes_medium_2021-08-24_20_55_45_.html |Archive du 09/08/2017 le 24/08/2021}}
* Librairie
Il faut exporter le module de traduction. [[https://github.com/ngx-translate/core/blob/master/README.md#sharedmodule|@ngx-translate/core - SharedModule]] {{ :lang:angular:traduction:core_readme.md_at_master_ngx-translate_core_github_2021-08-24_23_54_17_.html |Archive du 28/05/2021 le 24/08/2021}}
import { registerLocaleData } from '@angular/common';
const locale = await import(
/* webpackInclude: /(en|fr)\.js$/ */
'@angular/common/locales/' + selectedLang
);
registerLocaleData(locale.default, selectedLang);
translate.use(selectedLang);
Ici, translate est ''TranslateService''.
L'utilisation de ''webpackInclude'' permet de ne pas charger toutes les langues mais uniquement celles supportées.
[[https://medium.com/angular-in-depth/dynamic-import-of-locales-in-angular-b994d3c07197|Dynamic Import of Locales in Angular]] {{ :lang:angular:traduction:dynamic_import_of_locales_in_angular_by_michael_karen_angular_in_depth_medium_2021-10-10_18_22_30_.html |Archive du 14/11/2018 le 10/10/2021}}
====Traduction====
* HTML
{{ 'HOME.TITLE' | translate }}
* Traduction
import likelySubtags from 'cldr-data/supplemental/likelySubtags.json';
import numberingSystems from 'cldr-data/supplemental/numberingSystems.json';
import * as globalize from 'globalize';
import 'globalize/number';
globalize.load([likelySubtags, numberingSystems]);
const cldrLocale = await import(
/* webpackInclude: /main.(en|fr).numbers.json/ */
'cldr-data/main/' + selectedLang + '/numbers.json'
);
globalize.load(cldrLocale.default);
let parserFrom = globalize.locale(from).numberParser();
let parserTo = globalize.locale(to).numberFormatter();
[[https://medium.com/@penghuili/how-to-use-globalizejs-4a30d3919c8f|How to use Globalizejs]] {{ :lang:angular:traduction:how_to_use_globalizejs._at_ginmon_our_frontend_supports_3_by_penghui_li_medium_2021-10-10_18_19_28_.html |Archive du 05/04/2019 le 10/10/2021}}
L'utilisation du commentaire ''webpackInclude'' permet à Angular de n'inclure dans la version finale du site que quelques locales.