Dans ce tutoriel, nous allons vous emmener à travers le processus de rendre votre application accessible et conviviale pour les personnes du monde entier. Environ 20% du monde parle anglais, la fourniture d'autres options de langue peut améliorer votre expérience utilisateur et augmenter considérablement la portée de votre application. Nous allons jeter un coup d'œil aux outils d'internationalisation intégrés d'Angular et vous montrer comment les utiliser correctement.
Si vous construisez un site plutôt qu'une application, assurez-vous que vous avez votre outil de travail. Voir nos guides au meilleur Générateur de site Web et haut hébergement Web Pour en savoir plus.
Nous avons créé une application de démonstration très simple pour démontrer le processus. Le cloner d'ici puis suivez les instructions d'installation.
Démarrer l'application pour vous familiariser avec elle. Il suffit d'afficher et de mettre à jour des nombres et des valeurs aléatoires avec des contextes différents, par ex. devises, dates, etc. Nous couvrirons certains des tuyaux et des fonctionnalités utilisées lors du tutoriel.
Il existe deux mots qui sont souvent utilisés de manière interchangeable lorsque vous parlez de la traduction d'une application - internationalisation et localisation - cependant, ils signifient réellement des choses légèrement différentes. L'internationalisation fait référence au processus de préparation de votre application pour soutenir différentes langues. En revanche, la localisation fait référence au processus de traduction de votre application dans vos langues requises. L'internationalisation essentiellement est quelque chose que vous faites une fois par application, et la localisation se produit une fois par lieu locale - au moins c'est le plan.
Ces termes peuvent également être familiers dans leurs versions raccourcies: I18N (où 18 est le nombre de lettres entre le premier «I» et la dernière «N» d'internationalisation) et L10N (où 10 est le nombre de lettres entre le «I» et le 'n' de la localisation).
Il y a plus de 6 000 langues utilisées dans le monde aujourd'hui, dont la plupart ne sont utilisées que par de très petits groupes de personnes. Pourtant, même si nous ne nous concentrons que sur les trois premières langues - Mandarin, espagnol et anglais - il y aura des différences significatives de mise en forme de jour, de structure grammaticale, de pluralisation et de mise en forme du nombre.
Si nous incluons la cinquième langue la plus largement utilisée - arabe - nous rencontrons une autre différence; L'arabe est un script de droite à gauche (RTL) qui signifie que l'interface utilisateur devra également être reflétée.
Donc, pendant la localisation, nous devons envisager des différences de grammaire, de mise en page et de formatage, et bien sûr, nous devons également modifier le texte lui-même. Angular peut aider avec une grande partie de cela, mais vous aurez toujours besoin de traduire manuellement le texte (et de sauvegarder la traduction dans stockage en ligne , donc c'est sécurisé et partageable avec votre équipe).
Nous devrons localiser pour chaque région que nous devons soutenir. Un local fait référence à l'ensemble général de préférences pour les considérations mentionnées ci-dessus qui ont tendance à être partagées dans une région du monde, généralement un pays. Chaque paramètre local est représenté par un identifiant Locale Unicode, qui spécifie le code de langue et l'extension locale.
Les paramètres régionaux par défaut de l'angulaire sont «EN-US», qui est le code de langue 'fr' (anglais) comme parlé dans la région «US» (États-Unis d'Amérique). Une application localisée pour 'fr-US' sera subtilement différente d'une application localisée pour "EN-GB" qui est l'anglais comme parlé en Grande-Bretagne. Par exemple, aux dates américaines sont (déconcertées) formatées MM / DD / AAAA, alors qu'au Royaume-Uni, nous utilisons l'approche la plus judicieuse DD / MM / AAAA. Cette différence mineure peut entraîner une erreur majeure de la compréhension.
Pour rendre les choses intéressantes localisons notre application de démonstration pour l'arabe comme parlé en Irak, alias «AR-IQ» et anglais comme parlé au Royaume-Uni, aka «EN-GB». Nous utiliserons l'anglais comme défaut de cette époque.
Notre projet de démonstration a été créé à l'aide de CLI angular, qui inclut une outils utile. Nous allons utiliser le compilateur à l'avance (AOT) pour ce projet afin de pouvoir apporter des modifications au fichier de configuration de la CLI: 'angular.json'. Si vous souhaitez utiliser Just-in-Time (JIT), vous devez configurer des choses légèrement différemment.
Avec une boîte à AOT, vous obtenez une petite application prête-à-go de rendu plus rapide et plus rapide qui charge sans avoir besoin de demandes asynchrones d'aller chercher des objets tels que des modèles et des foyers de style. En conséquence, vous devez créer une version pour chaque paramètre locale et servir la construction appropriée à l'aide de l'URL ou une sorte de logique de détection de langage côté serveur. L'approche la plus simple consiste à créer un répertoire pour chaque paramètre local, par ex. www.example.com/en-gb et www.example.com/ar-iq. Le commerce est que vous ne pouvez pas changer de langue à la volée, mais dans la réalité, il est peu probable que ce soit quelque chose de requis par des utilisateurs réels.
Tout d'abord, nous devons ajouter une configuration de construction pour nos locaux arabes. Dans le fichier JSON recherche l'objet 'architecte.build.configurations'. Ajoutez le bloc suivant pour définir une configuration pour la locale:
"AR-IQ": {
"basehref": "/ ar-iq /",
"Deployurl": "/ ar-iq /",
"OutputPath": "dist / angulaire-i18n-démo /
ar-iq ",
"I18NFILE": "SRC / locale / messages.ar-IQ.
XLF ",
"i18nformat": "XLF",
"I18Nlocale": "AR-IQ"
Cette configuration indique à l'angulaire où émettre la construction compilée et laquelle des traductions Fichier et format à utiliser. Il définit également les paramètres régionaux et indique angulaire quel répertoire l'application sera déployée à.
Nous devons également modifier les options par défaut dans «architecte.build.options» pour utiliser la locale «EN-GB». Définissez les propriétés suivantes comme indiqué. Notez que nous permettons à ATOT ici de l'autre côté de la carte afin qu'il soit utilisé pour les constructions de production et de développement:
"OutputPath": "dist / angulaire-i18n-démo /
EN-GB ",
"i18nlocale": "EN-GB",
"Deployurl": "/ fr-gb /",
"basehref": "/ fr-gb /",
"AOT": vrai
L'angulaire prend en charge un certain nombre de locaux. Assurez-vous d'utiliser la valeur correcte de la propriété 'i18nlocale'. Vous pouvez voir la liste complète ici .
Dans les coulisses, les configurations ci-dessus se chargent et lisent l'un de ces fichiers de préférence locale.
En plus de la configuration de la sortie de construction, nous devons également configurer la configuration de la commande 'NG Servir' pour le développement. Ceci est plus simple car nous pouvons simplement référencer la configuration de construction que nous venons d'ajouter. Dans 'Angular.json' Ajoutez le bloc suivant à "architecte.serve.configurations":
"AR-IQ": {
"BrowserSertaget": "Angular-i18n-
Démo: Construire: AR-IQ ",
"ServerPath": "/ ar-iq /"
}
Ici, nous parlons des options de configuration de construction à l'aide de la propriété 'BrowserSertaget', et nous définissons également le "ServerPath". Avant de pouvoir servir ou construire l'application arabe, nous devons créer le fichier de traduction référencé dans la propriété «I18NFILE» ci-dessus. CLI angulaire comprend un outil permettant d'extraire du texte marqué dans un fichier source de traduction de l'industrie.
Nous couvrirons ces fichiers plus détaillés plus loin dans le didacticiel, mais nous devons désormais exporter le fichier de base et vide pour nous permettre de compiler.
Nous utiliserons la commande 'ng xi18n' avec les options suivantes. C'est la seule fois où nous inclurons l'ID locale dans le nom de fichier '-out-file':
$ ng xi18n --Output-chemin Locale --Out -Out -Out -Out -Out
Messages.ar-iq.xlf --i18n-locale AR-IQ
Cela devrait créer un fichier dans un répertoire SRC / locale. À partir de maintenant, nous allons toujours émettre le fichier nommé 'Messages.xlf' et le copier manuellement sur la version avec l'identifiant locale dans le nom. La raison en est d'empêcher l'outil d'extraction d'écraser toutes les traductions existantes que nous avons ajoutées au fichier.
À ce stade, nous pouvons maintenant compiler le projet et voir ce qui se passe, mais nous devons dire à la commande 'NG Servir' quelle configuration à utiliser. Premièrement, jetons un coup d'oeil à la version anglaise. Aucun changement ici car l'anglais est la valeur par défaut:
$ NG Servir
Comme vous pouvez le constater, cela ressemble beaucoup à la version originale, qui utilise les paramètres régionaux par défaut de Angular de 'EN-US ». La différence notable est la monnaie spécifie maintenant US $ au lieu de seulement $. D'accord, essayons maintenant la version arabe. Arrêtez la version anglaise et exécutez:
$ NG Servir --Configuration = AR-IQ
Comme vous vous attendez, il existe des différences plus évidentes dans cette version, la date est maintenant écrite en arabe. Angular peut faire cela parce que les noms de certaines choses, tels que des mois et des jours, proviennent d'une liste de jeux et ils sont finalement liés à un nombre connu. Tout le reste, cependant, est toujours en anglais.
Regardez de plus près le code source de 'app.component.html' et vous verrez que nous utilisons un certain nombre de tuyaux différents. Les tuyaux angulaires suivants sont conscients des paramètres régionaux, ce qui signifie qu'ils adaptent leur sortie basée sur les paramètres régionaux actuels: «Datepipe», «Currencipe», «décimalpipe» et «pourcentagepipe».
Si vous utilisez ces tuyaux soigneusement angulaires traitera de nombreuses jambes de localisation pour vous. Par soigneusement, nous voulons dire utiliser les options prédéfinies disponibles où que vous puissiez le faire. Un bon exemple est le formatage de la date des États-Unis par rapport au Royaume-Uni que nous avons mentionné précédemment. Si vous êtes au Royaume-Uni et que vous souhaitez afficher une date à l'aide du format (sensible) jour-mois-mois-année, vous pourriez être frustré de constater que l'option «Shortdate» prédéfinie rend comme m / d / yy (par exemple, . 10/9/18) et être tenté de coder le format souhaité comme celui-ci:
{{mydate | Date: 'DD / mm / y'}}
Mais nous savons maintenant que nous obtenons le format M / D / AA, car Angular utilise le paramètre local «EN-US» par défaut. Donc, au lieu de codage dur, le format, nous devons utiliser l'option «Shortdate» et localiser notre application pour utiliser «EN-GB».
{{mydate | Date: 'Shortdate'}}
Il faut un peu plus d'effort de peu, mais nous pouvons ensuite ajouter des locaux au contenu de notre cœur et toujours avoir un format de date convivial.
Malheureusement, il ne semble pas qu'il soit facile de remplacer un format prédéfini. Par exemple, vous ne pouvez pas simplement décider que vous préférez que le format «ShortDate» soit dd / mm / aaaa au lieu de DD / mm / y car il n'ya aucun moyen de modifier le format au moment de l'exécution. Vous ne pouvez pas également ajouter vos propres options prédéfinies.
Pour ces cas de bord, vous pouvez créer un tuyau de date personnalisé qui enveloppe le «Datepipe» angulaire et gère les formats personnalisés par région. Tout ce qu'il ne reconnaît pas serait transmis au «Datepipe» intégré.
De l'étagère, le «Currencype» formatera un nombre en dollars américains, coupera deux décimales et ajouter des groupements tels que définis dans les préférences de la locale.
Vous remarquerez que dans nos deux localités, la monnaie est toujours en dollars américains. Il ne passe pas par magiquement à Sterling (GBP) lorsque vous utilisez la locale 'EN-GB'. La raison en est que 10 £ n'est pas identique à 10 $. Vous devez donc spécifier explicitement la monnaie que votre numéro se réfère.
Mettez à jour 'app.component.html' pour utiliser GBP partout. Lorsque vous spécifiez le code de devise, vous devez utiliser la valeur correcte de la norme ISO 4217 (liste disponible en ligne).
Modifiez les deux tuyaux de change en ajoutant ':' GBP '' comme si:
{{valeur $ | async | Devise: 'GBP'}}
Et vous allez commencer à voir le symbole £ au lieu de US $.
N'oubliez pas que cela ne fait rien d'intelligent comme convertir automatiquement USD en valeur équivalente en GBP si vous modifiez la monnaie - cela modifie simplement le symbole utilisé.
D'accord, nous avons donc que nos deux groupes locaux configurés et angular font de l'autre du travail pour nous sortir de la boîte, mais le texte est toujours en anglais. Angular ne peut pas traduire cela automatiquement, tristement, mais cela peut nous aider avec des parties du flux de travail. C'est ce qui doit arriver:
Angular nous aide avec les étapes 2 et 4, mais comme des développeurs dont nous avons besoin faire une étape 1 manuellement. L'étape 3 serait généralement complétée par un professionnel de la traduction ou une agence, à l'aide d'un logiciel spécial pour lire et mettre à jour le fichier de traduction.
Pour y parvenir, nous devons ajouter un attribut spécial à chaque élément contenant du texte fixe à traduire. Pour être clair si le contenu arrive d'une API, ce n'est pas un texte fixe et que vous auriez besoin de localiser cela dans l'API. Il vous suffit d'ajouter l'attribut lorsque le texte est écrit directement dans le modèle HTML de votre code source. Un point clé ici est que vous devriez essayer de conserver vos fichiers dossiers locale-agnostic - en d'autres termes, évitez de mettre un texte à traduire dans la logique de composant et de la conserver dans les modèles. Sinon, l'outil d'extraction ne sera pas capable de l'extraire. C'est une bonne pratique de toute façon de séparer vos préoccupations - dans la vie et en code.
Ouvrons 'app.component.html' et commencez par le titre "Valeur actuelle". Ajoutez simplement l'attribut 'i18n' à l'élément qui contient directement le texte.
& lt; div la classe = "meta__title" i18n & gt;
Valeur actuelle
& lt; / div & gt;
Il est important de comprendre que ceci est juste un attribut personnalisé "muet". Ce n'est pas une directive angulaire qui déclenche quoi que ce soit au moment de l'exécution, le compilateur le supprime après la traduction.
Quoi qu'il en soit, voyons ce qui se passe lorsque nous exécutons à nouveau l'outil d'extraction pour régénérer le fichier de traduction. N'oubliez pas que «-Out-file» est juste 'Messages.xlf' maintenant:
$ ng xi18n --Output-chemin Locale --Out -Out -Out -Out -Out
messages.xlf --i18n-locale AR-IQ
Ouvrez le fichier XLF de sortie et vous devez voir un nouveau bloc d'unité de traduction qui ressemble à quelque chose comme celui-ci avec quelques informations de contexte supplémentaires:
& lt; trans-unité ID = "FACE3D45C0F0CD38B726E7798DA15
3E2F8D55551 "DataType =" HTML "& GT;
& lt; source & gt;
Valeur actuelle
& lt; / source & gt;
Génial, cela signifie que l'outil a ramassé l'attribut «I18N». Cette identification longue est générée par l'outil et restera la même si le texte change. Si vous avez plusieurs instances d'exactement le même texte, ils obtiendrez tous le même identifiant. Ne pas éditer cet identifiant!
Si vous préférez, vous pouvez spécifier un identifiant personnalisé dans l'attribut «I18N». Si vous faites cela, l'identifiant restera le même même si le texte change, vous devez donc vous assurer de ne pas avoir de collisions d'identité dans votre application. Utilisez le préfixe '@@' pour définir un identifiant personnalisé. Ici, l'identifiant deviendra "titre":
& lt; div class = "meta__title" i18n = "@@ title" & gt;
Valeur actuelle
& lt; / div & gt;
Pour vous assurer que le traducteur est capable de fournir une traduction précise, il aura souvent besoin de connaître le contexte que le texte est utilisé. L'attribut «I18N» nous permet de définir une description et un sens pour aider le traducteur. Le format est le suivant:
& lt; div i18n = "Signification | Description @@
personnalisé "& gt; text & lt; / div et gt;
Mettez à jour notre titre avec un sens et une description:
& lt; div class = "Meta__title" i18n = "carte
Titre | Valeur en ce moment dans le temps @@ Titre "& GT;
Valeur actuelle
& lt; / div & gt;
Cela devrait donner suffisamment de contexte au traducteur pour fournir une traduction précise. Regénérez le fichier de traduction et vous devriez voir que ces valeurs ont été émises. Il convient de noter que si vous n'utilisez pas d'identifiant personnalisé, l'identifiant généré prend le sens et le texte en compte. Donc, le même texte, mais avec une signification différente, obtiendra un identifiant différent. La description n'a toutefois aucun impact sur l'ID.
Passons à la section Intro. Le premier paragraphe contient du texte et une variable qui sera interpolée au moment de l'exécution. Comment allons-nous gérer ceci?
Bien heureux c'est assez simple. Encore une fois, nous devons ajouter un attribut «I18N» significatif à l'élément contenant. Ajoutez-le directement au paragraphe:
& lt; p i18n = "Valeur de fermeture | Valeur quand le marché
fermé hier @@ fermetingValue "& gt;
Exécutez à nouveau l'outil d'extraction et vous verrez cette nouvelle unité de traduction:
& lt; ID trans-unité = "ClostingValue"
DataType = "html" & gt;
& lt; source & gt; hier & amp; la valeur de fermeture des APOS était
& lt; x id = "Interpolation" Equiv-text = "{{{
FermetureValue | Devise: & amp; APOS; GBP & AMP; APOS;
}} "/ & gt; & lt; / source & gt;
Voyez comment l'interpolation variable a été détaillée dans la sortie. La bonne chose à ce sujet est qu'elle permet au traducteur de modifier la structure grammaticale de la phrase si nécessaire, sans casser la liaison. Par exemple, il peut y avoir une langue où la phrase serait mieux écrite: la valeur de x était la fermeture d'hier, c'est-à-dire avec la variable au début.
Passer au paragraphe suivant, vous verrez une syntaxe intimidante. Ceci s'appelle le format de message ICU et vous permet de spécifier différents morceaux de texte en fonction de la valeur d'une variable.
Vous pouvez l'utiliser pour ajouter les mots «S» en anglais lorsque la valeur est zéro ou non. Par exemple, si "secondes" est une variable contenant le nombre de secondes, nous pouvons utiliser cette expression de pluralisation de l'ICU:
{{secondes}} {secondes, pluriel, un
{second}, autre {secondes}}
Qui va sortir:
Il ne semble pas être documenté mais vous pouvez également utiliser «Asyncpipe» à l'intérieur de la syntaxe de pluralisation pour travailler avec des observables.
Dans cet exemple, "One" et "Autres" sont des catégories de pluralisation. Il existe un certain nombre de catégories à choisir, mais méfiez-vous! Tous les locaux ne prennent pas en charge toutes les catégories et angular ne vous disent pas si vous essayez d'utiliser une catégorie qui n'est pas prise en charge par la locale actuelle. Il est facile de finir par penser que vous avez fait quelque chose de mal, car la catégorie «Deux» ne fonctionne pas dans votre locale «EN-GB» et vous voyez plutôt le texte «Autre». Inexplicablement 'fr' (et de nombreuses autres langues ordinaires) ne prend en charge que "un" et "autre", même si "zéro" et "deux" sont des valeurs explicites.
Découvrez ce fichier voir ce qui est effectivement soutenu.
Nous pouvons contourner cette limitation en utilisant des chiffres au lieu de catégories. Il suffit de préfixer la valeur avec un '=':
là {watchers, pluriel, = 0 {n'est personne} = 1
{est une personne} = 2 {sont deux personnes}
autres {sont {{watchers}}}}}
Regarder maintenant.
Ceci est déjà mis en place dans l'application DEMO, nous devons simplement ajouter l'attribut «I18N» au paragraphe contenant:
& lt; p i18n = "Observateurs | Nombre de personnes
regarder la valeur @@ watchers "& gt;
Exécutez à nouveau l'outil d'extraction pour voir comment cela ressemble. Vous verrez que cela se produit légèrement différemment. Il créera deux unités de traduction; Un pour l'expression de l'ICU elle-même et celui qui interpolate cette expression dans la chaîne d'origine.
Si vous souhaitez afficher un texte différent en fonction de la valeur d'une variable, vous pouvez utiliser une expression ICU «Sélectionner», très similaire à la syntaxe «Pluriel» démontrée ci-dessus. Dans notre application de démonstration, nous surveillons le changement appliqué à la valeur et crée un flux observable appelé «Tendance $» qui génère «up», «bas» ou «stable» selon que le changement est positif, négatif ou zéro.
Nous raccordons ensuite notre expression ICU «Sélectionnez» pour émis une chaîne différente en fonction de la valeur du flux. Ici vous pouvez voir «Asyncpipe» en cours d'utilisation:
La valeur {TREND $ | async, sélectionnez, up
{Augmentation} Down {Diminué} Stable
{n'a pas changé}}
Il s'agit d'une syntaxe un peu plus propre que d'utiliser «NGIF» ou «ngswitch» pour manipuler le DOM, plus il joue également bien avec l'outil d'extraction. Ajoutez l'attribut 'i18n' à l'élément contenant:
& lt; div mas = "carte__info" i18n = "valeur
Tendance | Décrit la valeur de changement de valeur @@ Trend "& GT;
Régénérez le fichier de traduction et vous verrez que l'approche est similaire à la sortie du pluriel, avec deux unités de traduction créées. Les expressions ICU sont assez pratiques une fois que vous leur êtes habitués, plus vous pouvez les nichez pour créer des sorties plus complexes.
Un autre attribut 'i18n' à ajouter:
& lt; div class = "carte__info" i18n = "transactions
Compte | Nombre de transactions aujourd'hui @@
transactions "& gt;
Transactions: {{{transactions $ | async |
numéro }}
& lt; / div & gt;
Maintenant, nous avons marqué tout le texte qui nécessite la traduction, nous pouvons générer le fichier de traduction une dernière fois. Une fois que cela est créé, renommez-le à «Messages.ar-iq.xlf» et remplacez l'incarnation précédente. C'est le fichier que nous envoyions au professionnel de la traduction, mais aux fins de ce tutoriel, Google Translate sera debout!
Ouvrez le fichier XLF et dupliquer chaque "& lt; source & gt;" élément, le renommant '& lt; cible et gt;'. Malheureusement, cela peut être tout à fait désordonné afin que cela puisse aider à embellir le contenu.
Pour vérifier, nous les avons tous, enregistrez le fichier et démarrez l'application avec la locale arabe:
$ NG Servir --Configuration = AR-IQ
Si vous voyez des messages dans le terminal comme celui-ci, cela signifie que vous avez manqué une:
Erreur dans les erreurs d'analyse XLIFF: Message * ID *
manque une traduction ("
J'espère que vous n'aurez aucune erreur et vous pourrez voir l'application dans le navigateur. Nous n'avons pas encore ajouté d'arabe réel de sorte que cela ne sera pas très différent.
Commençons par quelque chose de facile - la «valeur actuelle». Google Translate me dit que cela devrait être (texte arabe ici) alors mettez à jour la valeur dans le '& lt; cible et gt;' élément:
& lt; source & gt; valeur actuelle & lt; / source & gt;
& lt; cible & gt; texte arabe ici & lt; / cible et gt;
Jusqu'ici tout va bien. Maintenant, faisons-en une avec interpolation. Voici "la valeur de fermeture d'hier était ..." (Espérons-le!):
& lt; cible et gt; texte arabe ici & lt; x
ID = "Interpolation" Equiv-text = "{{FermerValue
| Devise: & amp; APOS; GBP & AMP; APOS; }} "/> ;.< ;/target> ;
Utilisez un numéro lorsque vous traduisez afin que vous puissiez voir où devrait être l'interpolation. Notez que lorsque vous voyez le résultat traduit dans Google Translate, il apparaît à l'envers - c'est-à-dire le numéro au début - mais lorsque vous le copiez et le colle dans le fichier de traduction, il retournera à la commande d'origine. Cela se passe parce que l'arabe est une langue RTL afin que le script soit (presque) entièrement en miroir. Google Translate fait-il en ajoutant un attribut "dir =" rtl "à l'élément contenant. Nous allons apprendre à faire cela à l'étape suivante. Le reste des traductions est disponible dans la démo Repo, la branche «tutoriel».
Nous devons gérer la direction de script dans notre application car angular ne le fera pas automatiquement pour nous. Il n'apparaît pas non plus être un moyen de détecter si les paramètres régionaux actuels sont une langue LTR ou RTL, nous aurons donc besoin de coder cela. Ce serait génial si Angular offrait une directive intégrée pour cela.
Ouvrez 'app.commez.ts'. Importer 'injecter', 'locale_id' et 'hostbinding' de '' @ angular / core ''. Ensuite, configurez le «Hostbinding» comme suit. Cela ajoutera un attribut 'dir' à l'appelcomponent et définira la direction de la langue par défaut sur 'ltr':
@HostBinding ('attr.dir') dir = 'ltr';
Suivant Ajouter un constructeur et injecter le "locale_id". N'oubliez pas que cela est défini par notre configuration car nous utilisons AOT.
Constructeur (@Inject (Locale_id) Locale privée: String) {}
Et enfin ajouter l'extrait suivant à la méthode 'Ngoninit' existante. Ici, nous vérifions si le "locale_id", c'est-à-dire "AR-IQ", commence par "AR" et s'il change la direction sur "RTL".
Si (this.locale.startswith ('ar')) {
cela.dir = 'rtl';
}
Si vous envisagez de soutenir davantage de locaux, vous devrez probablement refroidir cela pour le rendre plus évolutif, cependant, car il n'y a que dix langues RTL utilisées aujourd'hui, cette approche ne devrait pas être trop difficile. Démarrer l'application arabe et vous devriez maintenant voir que l'interface utilisateur est en miroir - la panneau £ devrait être à droite.
La dernière étape consiste à générer et à vérifier nos constructions de production. Tout d'abord, nous devons faire une autre modification rapide à la configuration "angular.json".
Dans 'architecte.build.configurations' en double exemplaire de l'objet de production existant et renommez-le "" Production-AR-IQ "'. Ensuite, copiez et collez les propriétés de la configuration existante »« AR-IQ »» dans l'objet, vous disposez donc des options de production et des options «I18N».
Vous devez également mettre à jour 'architecte.serve.configurations' aussi. Cette fois-ciblez l'objet "" AR-IQ "existant et renommez-le '" Production-AR-IQ "" et modifier la valeur "BrowserAtRet" pour indiquer votre nouvelle configuration "Production-AR-IQ".
Maintenant, vous pouvez construire et servir vos paramètres locaux arabes de production avec cette commande:
$ NG Servir --Configuration = Production-AR-IQ
Ok, nous avons fini! Nous avons internationalisé avec succès notre application et la localisée pour les audiences «EN-GB» et «AR-IQ». Angular rend le processus remarquablement simple pour le développeur, en fait, le bit le plus difficile consiste à déterminer ce que les traductions devraient être - excuses à des orateurs arabes si quelque chose est faux!
Cet article a été publié à l'origine dans le numéro 281 de la création Web Design Magazine Web Designer. Achetez le numéro 281 ici ou Abonnez-vous à Web Designer ici .
Articles Liés:
[dix] [dix] [dix] [dix] Quand je suis d'abord passé d'un flux de travail traditionnel à un illustra..
[dix] [dix] [dix] [dix] Le contrôle de la version visait à l'origine les développeurs travaillant ..
[dix] [dix] [dix] [dix] Qu'il s'agisse d'un flux d'inscription ou d'une étape à pas multifonction, ..
[dix] [dix] [dix] [dix] Typescript est l'un des groupes de langues qui utilisent le J..
[dix] [dix] [dix] [dix] Quand j'ai reçu mon premier pont de tarot, j'étais enchanté par la belle i..
[dix] [dix] [dix] [dix] Lors de l'apprentissage comment dessiner Une �..
[dix] [dix] [dix] [dix] La peinture d'un portrait peut être une tâche difficile. Même si vous avez..
[dix] [dix] [dix] [dix] Contrôler votre flux de trésorerie est la clé du succès de freelance, et ..