Front End

4 abr, 2014

Série AngularJS: Internacionalização com Angular-Translate – Parte 12

Publicidade

Olá, pessoal! No artigo de hoje vou mostrar como suportar internacionalização para quem está usando AngularJS.

O angularJS suporta internacionalização? Sim, mas com (muita) limitação. Por exemplo, ele consegue suportar internacionalização para datas, números, mas não suporta internacionalização para o conteúdo da sua aplicação.

Se você pesquisar na Internet pode encontrar alguns frameworks  que ajudam na internacionalização. Eu pesquisei bastante e testei alguns, e o melhor foi esse aqui: Angular-Translate http://pascalprecht.github.io/angular-translate/#/guide.

Github https://github.com/PascalPrecht/angular-translate/wiki/Getting-Started#configuring-translateprovider

Pelo seguinte:

  • Fácil de usar;
  • Boa documentação;
  • Comunidade bem ativa;
  • Releases constantes;
  • Bug fixing curto.

O ponto negativo que adiciono é que o autor colocou o nome dele na declaração do uso da API. Acho isso ruim, ‘pascalprecht.translate’. Se a API vira e o Google adota, e aí? Certamente eles vão tirar esse nome e deixar algo global. E a migração para o novo nome é fácil?

Outro ponto negativo é a forma de obter o arquivo .min.js. É preciso instalar o bower e rodar bower install angular-translate. Por que não disponibilizar o .min.js on-line no próprio github?

Para quem usa JSF, por exemplo, está acostumado a ter um arquivo .properties que possui uma key:value para tradução e o JSF se vira para saber o idioma do browser e faz o translate. Mas com AngularJS é um pouco diferente. Claro que não teremos um arquivo .properties, mas sim um arquivo .js que funciona da mesma forma key:value.

Na prática

Vou considerar que você já tem uma aplicação com Angular e agora quer apenas internacionalizar. Veja os passos:

Passo 1

O que achei ruim, apesar de ser rápido, é instalar o bower para obter o .min.js. Se você tiver o git bash, apenas digite “npm install -g bower”. Se tiver alguma dúvida, veja aqui: https://github.com/bower/bower

Passo 2

Após ter instalado o bower, vamos gerar o min.js do angular-translate no git bash: bower install angular-translate

Aguarde terminar a instalação e veja onde está o .min.js Será algo assim:

Xxx\bower_components\angular-translate

Passo 3

Copie o arquivo angular-translate.min.js para o seu projeto. No meu caso, eu tenho uma pasta lib somente para js, veja:

angularjsangulartranslatelib

Passo 4

Crie um arquivo que terá a internacionalização, ou seja, que terá o que você gostaria que fosse traduzido (eu chamei de inter.js). O conteúdo é bem simples, veja:

$app.config(['$translateProvider', function ($translateProvider) {
  $translateProvider.translations('en', {
    'label.question.movie': 'What is your favorite movie?',
    'label.title': 'Vote in Movie?',    
  }); 
  $translateProvider.translations('pt', {
    'label.question.movie': 'Qual filme você gosta mais?',
    'label.title': 'Vote no Filme'    
  }); 
  $translateProvider.preferredLanguage('en'); //temos que dizer qual é a default.
}]);

Passo 5

Após ter criado o arquivo que contém as mensagens de tradução, precisamos dizer ao Angular que vamos usar esse cara para isso. No arquivo js que você cria o module, vamos adicionar o translate (no meu caso é o arquivo application.js):

<b>var</b> $app = angular.module('app',['ngResource','pascalprecht.translate']);

Passo 6

No meu arquivo index.html preciso carregar o .js do angular-translate. Veja:

<body>
<script src="js/lib/angular.js"></script>
<script src="js/lib/angular-resource.js"></script>
<script src="js/lib/jquery.js"></script>
<script src="js/lib/angular-translate.min.js"></script>
Outros codigos omitidos aqui
</body>

Passo 7

Agora vamos chamar as keys que criamos no inter.js no nosso arquivo .html. Temos várias opções, veja:

Usando Diretivas

<H2 translate=“label.title”></H2>

Usando expression

{{movie.name}}

Passo 8

Salve as alterações, build o projeto e suba.

angularjsvotenomovieapp

Um ponto importante: a tradução não vai ocorrer com base no idioma definido no browser e sim o que você setou como preferido. Infelizmente ainda não tem essa feature. Daí, para que o usuário queira ver aplicação no idioma dele, você terá que colocar algo como a bandeira do país na aplicação e, ao clicar, o valor do preferred é alterado.  Na documentação tem um exemplo.

Vou ficando por aqui… Caso queiram ver aplicação movie-vote usando API basta ir ao meu github e fazer clone ou download e executar: https://github.com/camilolopes/workspaceAngularJs

Abraço!