Aplicativos multilíngues em Angular

imagem


Neste artigo, consideraremos como você pode transferir rapidamente seu projeto Angular para uma operação multilíngue e quais utilitários existem para isso.


Pare de usar ngx-translate!


A maioria dos projetos que conheci foram escritos usando esta biblioteca e, não surpreendentemente, é muito simples e apareceu antes do lançamento oficial do Angular.


Use o i18n padrão!


Adicioná-lo ao seu projeto é ainda mais fácil do que parece.


E assim, aqui está uma breve instrução:


  • Adicione o atributo i18n ao elemento do modelo
  • Use o atributo i18n- para converter atributos do próprio elemento
  • Use expressões ICU
  • Registre o código do idioma desejado para Pipe

Traduzimos o aplicativo olá mundo em 5 minutos:


Neste exemplo, designaremos o atributo title e o próprio conteúdo para a tradução.


<div i18n i18n-title title="">  {{name}}! </div> 

Também podemos definir uma descrição para o nosso tradutor


 <div i18n="   ">  {{name}}! </div> 

E, é claro, para repetir textos, podemos especificar identificadores:


 <span i18n="@@HiId">!</span> 

Também podemos combinar identificadores com uma descrição:


 <span i18n="  |@@HiId">!</span> 

Expomos a expressão da UTI onde precisávamos:


 <span i18n>  { orders, plural, =0 {} =1 { } other {<b>{{orders}}</b>} } <span> 

Neste exemplo, ele funciona como um caso de switch comum. Mas existem vários casos de uso.


Quase tudo está pronto!


Execute o comando da CLI angular:


ng xi18n


Por padrão, ele coletará o arquivo messages.xlf no formato XLIFF. Isso é suficiente para trabalhar mais.


Copie este arquivo em messages.fr.xlf (digamos que queremos uma tradução para o francês).


Damos o arquivo para tradução, felizmente esse formato é muito comum e existem muitos utilitários para facilitar a edição do tradutor.


Bem, agora editamos as configurações do angular.json:


 "configurations": { ... "fr": { "outputPath": "dist/my-project-fr/", //    "i18nFile": "src/locale/messages.fr.xlf", //    "i18nFormat": "xlf", //   "i18nLocale": "fr", //   ... } } 

Isso é tudo!


> ng serve - configuration=fr
> ng build - configuration=fr




Agora considere como ele funciona de dentro para fora:
imagem


Pode ser visto no diagrama que a dinâmica simplesmente não é possível, é assim que o padrão i18n é organizado no momento. E qualquer mudança de idioma exigirá o download de um novo pacote.




De fato, para a maioria dos casos relacionados ao multilinguismo, um palestrante não é necessário. Na maioria das vezes, essa é uma localização completamente diferente. Apenas pergunte a si mesmo: seus usuários costumam mudar de idioma? Mas e se você precisar traduzir seu aplicativo para o árabe? Você pode ler recomendações detalhadas no site do W3C.




Não se pode deixar de inserir um link para uma tabela comparando várias opções de i18n para Angular .




Para os amantes da dinâmica, há boas notícias, juntamente com Ivy aparecerá Runtime Service.


i18n e hera
imagem


Então, o que vai dar?


  • Pode ser usado em qualquer lugar (React, Vue), por exemplo, através de Elementos Angulares
  • Árvore-shakeable
  • Suporte de carregamento lento
  • Suporte para vários locais
  • Funcionalidade completa sem compilação



Bem, como nunca há muitos utilitários, especialmente facilitando a vida, criei um pequeno utilitário para alternar rapidamente para o modo multilíngue seu aplicativo final:


 > npx ngx-translate-all --format ngx-translate | i18n --in ru --out en,fr --outPath src/assets/i18n 

Ele suporta 2 formatos, padrão i18n e ngx-translate-all.
Para o padrão i18n, o utilitário organizará os atributos necessários e adicionará a descrição desejada.


 --format i18n <div i18n="AppModule.AppComponent"> ! </div> 

Para ngx-translate, ele atribui as variáveis, coloca o pipe e as exporta para o arquivo json desejado.


 --format ngx-translate <div> {{AppModule.AppComponent[0] | translate}} <div> 



E também quero que você transfira seus projetos para o padrão i18n, pelo menos nos modelos. E em breve publicarei um utilitário especial que transferirá automaticamente seu projeto do ngx-translate para o i18n


 > npx ngx-translate-migrate ngx-translate -> i18n 

Para acompanhar o projeto, você pode se inscrever no meu canal do twitter, github ou telegrama dedicado ao Angular:


https://twitter.com/irustm
https://t.me/ngFanatic
https://github.com/irustm


Se você ainda tiver dúvidas, convido você para o podcast de vídeo ao vivo ngRuAir:



7 de abril de 2019 20:00 hora de Moscou
tópico: Desenvolvimento de aplicativos multilíngues em Angular.

Source: https://habr.com/ru/post/pt446402/


All Articles