Utilização
Para internacionalização (tradução e localização) é recomendado a adição de um AngularJS Filter registrado com o nome de i18n. Este filter deverá ser uma função que irá receber uma literal ou uma chave para tradução. Após a definição do mecanismo de internacionalização sua utilização se resume a:
Bloco de código |
---|
language | xml |
---|
title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
{{ 'label-to-translate' | i18n }}
<label>{{ 'label-to-translate' | i18n }}</label>
<p>{{ 'label-to-translate' | i18n }}</p> |
...
Bloco de código |
---|
language | xml | title |
---|
Exemplo | firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
{{ 'Olá !!' }}
<label>Olá !!</label>
<p>Olá !!</p> |
...
Bloco de código |
---|
language | js |
---|
title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
app.run(['$rootScope', '$filter', function ($rootScope, $filter) {
// Adiciona o filtro de i18n, caso exista, ao $rootScope para facilitar o acesso
// ao mesmo programaticamente.
if ($filter('i18n')) {
$rootScope.i18n = $filter('i18n');
}
}]); |
...
Bloco de código |
---|
language | js |
---|
title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
sampleService.$inject = ['$rootScope'];
function sampleService($rootScope) {
this.label = $rootScope.i18n('label-to-translate');
} |
Definição
Cada produto é livre para definir a forma como irá gerenciar suas traduções. No entanto, o TOTVS | HTML Framework confia que o AngularJS Filter seja registrado com o alias de i18n e que receba como parâmetro a palavra ou código a ser traduzido.
...
Usando o cadastro de clientes como exemplo teríamos o arquivo de tradução na seguinte estrutura:
- /datasuldts/crm/i18n/translations.js
...
Bloco de código |
---|
language | js | title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
[{
"sample" : {
"pt":"Sample",
"en":"Sample",
"es":"Sample"
},
"label-to-translate" : {
"pt":"Palavra ou sentença a ser internacionalizada !",
"en":"Word or sentence to be internationalized !",
"es":"Palabra o frase que se internacionalizaron !"
}
}] |
...
Informações |
---|
Caso o filtro encontre a literal, mas não encontre a tradução requisitada, não será disparado nenhum erro, apenas será retornado o próprio nome da literal. |
Literais com parâmetros
É possível passar parâmetros juntos com as literais para a internacionalização, para usar esse recurso inclua marcadores dentro da literal usando "{" e "}" junto com seu índice.
...
Bloco de código |
---|
language | xml | title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
{{ 'salutation' | i18n: ['José', 'Bom dia'] }}
<label>{{ 'salutation' | i18n: ['José', 'Bom dia'] }}</label>
<p>{{ 'salutation' | i18n: ['José', 'Bom dia'] }}</p> |
Especificando um Contexto para tradução
Durante o desenvolvimento de alguns módulos foi levantada a necessidade de especificar o módulo que contenha a tradução correta ou contextualizada para a sentença a ser traduzida. Desta forma foi adicionado um parâmetro ao filtro de i18n que permite que seja informado de qual contexto a sentença deve buscar sua tradução. Exemplo:
Bloco de código |
---|
language | xml | title | Exemplo |
---|
firstline | 1 |
---|
linenumberstitle | trueExemplo |
---|
collapselinenumbers | true |
---|
|
{{ 'label-to-translate' | i18n: []: 'linha/meu-modulo' }}
<label>{{ 'label-to-translate' | i18n: []: 'linha/meu-modulo' }}</label>
<p>{{ 'label-to-translate' | i18n: []: 'linha/meu-modulo' }}</p> |
Ao especificar o terceiro parâmetro como 'meu-modulo' o filtro de i18n vai desconsiderar o contexto atual e para essa sentença em especial vai buscar no arquivo de tradução do 'meu-modulo'.