Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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
languagexml
titleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
{{ 'label-to-translate' | i18n }}

<label>{{ 'label-to-translate' | i18n }}</label>
<p>{{ 'label-to-translate' | i18n }}</p>

...

Bloco de código
title
languagexml
Exemplofirstline1
linenumberstitletrueExemplo
collapselinenumberstrue
{{ 'Olá !!' }}

<label>Olá !!</label>
<p>Olá !!</p>

...

Bloco de código
languagejs
titleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
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
languagejs
titleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
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
languagejstitleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
[{
    "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
languagexmltitleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
{{ '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
languagexmltitleExemplo
firstline1
linenumberstitletrueExemplo
collapselinenumberstrue
{{ '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'.