5.4 KiB
title, source, path
| title | source | path |
|---|---|---|
| Internacionalização (i18n) | https://tdn.totvs.com/pages/viewpage.action?pageId=185738869 | \Plataforma Documentação técnica\Recurso de Páginas e Widgets (WCM)\Estrutura de páginas\Internacionalização (i18n).md |
Índice
- 1 Objetivo
- 2 Conceito e configuração
- 3 Utilização no desenvolvimento
- 4 Mapeamento de caracteres (text file enconding)
- 5 Escape de caracteres (escape character)
Objetivo
O objetivo deste guia é apresentar os procedimentos necessários para adaptar a plataforma Fluig para ser traduzida para outros idiomas.
Conceito e configuração
O conceito de internacionalização ou i18n (que, por vezes, também é chamado de "Localização") consiste no desenvolvimento e/ou adaptação de um produto para o idioma de um ou mais países. O acrônimo "i18n" origina-se do inglês "internationalization", onde 18 é o número de letras entre o primeiro "i" e o último "n".
Na plataforma Fluig, o i18n é suportado na forma de arquivos de propriedades distintos para cada idioma. Sempre que for criado um projeto a partir do Fluig Studio, a estrutura de i18n será apresentada conforme o exemplo a seguir:
Não se engane!
O nome do componente (widget, layout etc.) em questão coincide com o prefixo dos arquivos i18n. Este é o comportamento padrão do Studio, mas não é isso que fará com que as funções de i18n funcionem corretamente em seu componente. Dentro do [arquivo application.info](Arquivo application.info.md) deve existir uma propriedade chamada locale.file.base.name. O importante é que o valor desta propriedade - esse sim - seja o mesmo que o prefixo dos arquivos i18n.
Utilização no desenvolvimento
Nos arquivos i18n o cadastro deve ser feito da seguinte forma:
codigo.da.label=Valor da Label
Arquivos de fontes freemarker (.ftl) e javascript (.js)
Quando é necessário referenciar o valor da tradução desejada, deve-se utilizar o código "${i18n.getTranslation('codigo.da.label')}".
Em arquivos .js a partir da versão 1.8.3 é possível utilizar o código "[=i18n.getTranslation('codigo.da.label')]" para evitar conflitos com template string.
Arquivo .ftl:
<div class="form-group">
<label for="inputCode_${instanceId}">${i18n.getTranslation('codigo.da.label')}</label>
<input type="text" class="form-control" id="inputCode_${instanceId}" />
</div>
Arquivo .js:
var descricao = '[=i18n.getTranslation("codigo.da.label")]';
ou
var descricao = '${i18n.getTranslation("codigo.da.label")}';
Como traduzir propriedades do application.info?
Algumas propriedades do application.info são utilizadas em telas do sistema, sendo uma delas a tela de seleção de widgets na edição de páginas. É obrigatório, portanto, que ao menos as propriedades [application.title](Arquivo application.info.md), [application.description](Arquivo application.info.md) e [application.category](Arquivo application.info.md) sejam traduzidas.
Para que isso seja possível, basta criar essas propriedades com os mesmos códigos que aparecem no application.info nos arquivos i18n. Veja o exemplo a seguir:
codigo.da.label=Valor da Label
application.title=Título
application.description=Descrição do Componente
application.category=Categoria Escolhida
Mapeamento de caracteres (text file enconding)
É importante ter certeza de que todos os arquivos de seu projeto estejam configurados como UTF-8. Normalmente a configuração de mapeamento de caracteres pode ser encontrada em dois lugares.
Nas propriedades do projeto do eclipse:
Ou nas propriedades do próprio fonte:
Escape de caracteres (escape character)
Mesmo utilizando os arquivos com mapeamento de caractere UTF-8, é aconselhável utilizar caracteres de espace sempre que houver a necessidade de escrever caracteres especiais (ç, á, é etc.). Portanto, a propriedade:
window.edit.name=Nome de Exibição
torna-se:
window.edit.name=Nome de Exibi\u00E7\u00E3o
Assim, independentemente do sistema operacional no qual a plataforma Fluig é utilizado, os caracteres especiais sempre são mostrados corretamente. Para que esse processo seja feito de forma produtiva, pode-se utilizar uma das muitas ferramentas online de character escaping.