br.com.caelum.vraptor:vraptor-i18n

Sonatype helps open source projects to set up maven repositories on http://oss.sonatype.org.


License
Other

Documentation

vraptor-i18n

Uma biblioteca simples, compatível com o jstl fmt:message para i18n nas views.

instalação e requerimentos

É possível fazer o download do vraptor-i18n.jar do repositório do Maven, ou configurado em qualquer ferramenta compatível:

<dependency>
    <groupId>br.com.caelum.vraptor</groupId>
    <artifactId>vraptor-i18n</artifactId>
    <version>4.0.1</version> <!-- or latest version -->
    <scope>compile</scope>
</dependency>

O vraptor-i18n requer servlet api 3.0

Acessando mensagens com jsp

Acesse as mensagens internacionalizadas com:

<h1>${t['meu_sistema']}</h1>

E em seu arquivo messages.properties:

meu_sistema = Bem vindo ao meu sistema

O resultado será:

<h1>Bem vindo ao meu sistema</h1>

Mensagens não encontradas

Caso a mensagem não tenha sido traduzida, o resultado será:

<h1><span class="i18n_missing_key">meu_sistema</span></h1>

Dessa maneira você pode fazer seus testes de integração procurarem por "i18n_missing_keys" em todas as telas que passam e quebrar o teste caso alguma passou para trás sem tradução.

Parametros

Você pode passar parâmetros para as mensagens da seguinte maneira:

<h1>${t['deve_ser_preenchido'].args('nome','Usuário')}</h1>

Com o arquivo de mensagens:

deve_ser_preenchido = O campo {0} deve ser preenchido para todo {1} novo.

E o resultado será:

O campo nome deve ser preenchido para todo Usuário novo.

Migrando

As duas regex a seguir ajudam a transformar seus jsps e tagfiles em uma batida só:

<fmt:message key="([^"]+)"/> ==> ${t['$1']}
<fmt:message key="([^"]+)"></fmt:message> ==> ${t['$1']}

Contribua com uma regex para o caso que usa parâmetros

Pluralization/Count

A internacionalização permite que você suporte mensagens com plural ou count de elementos. Dadas as mensagens:

messages_found.zero = No messages found
messages_found.one = One message found
messages_found.other = {0} messages found

Você pode invocar:

${t['messages_found'].count(messages.size())}

Caso o valor passado para count seja 0, ele usa a mensagem zero. Caso 1, ele chama one, caso diferente desses valores, ele chama other. Nos três casos o parâmetro {0} é o número de elementos.

Formatando datas

É possível formatar datas da seguinte forma:

${l[minhaData]}

Ou ainda passar formatos suportados pelo DateFormat:

${l[minhaData].format('full')}
${l[minhaData].format('short')}

Ou pelo SimpleDateFormat:

${l[minhaData].pattern('dd/MM/yyyy hh:mm:ss')}

Se quiser parametrizar a formatação da data no arquivo messages.properties, também é possível. Neste caso é só fazer o seguinte:

Configurar a chave desejada no arquivo messages.properties. A chave deve sempre começar com "formats.time":

formats.time.pirate = yyyy.MM.dd G 'at' HH:mm:ss z

Utilizar a formatação na view:

${l[minhaData].custom('pirate')}

Caso não seja passado nenhum formato personalizado, é usado o formato padrão DateFormat.DEFAULT

Números

Da mesma maneira que datas, você pode formatar números com:

${l[meuNumero]}

Similarmente você pode usar padrões do DecimalFormat:

${l[meuNumero].pattern("#,##0.00")}

E dar nomes a seus padrões:

${l[meuNumero].custom("percentage")}

Colocando então no messages.properties:

formats.number.percentage = ##0.00%

Tipos de data e números suportados

O l suporta além Date, Calendar e as datas do JodaTime. Nada de ficar dando getters loucos de um lado pro outro. Suportamos qualquer tipo de número que implementa Number (incluindo números primitivos, seus wrappers e BigInteger/BigDecimal).

Páginas de erro

Se sua página de erro está dentro de qualquer subdiretório de /WEB-INF/, ela automaticamente passará por um filtro que registra tanto t quanto l.

Alterando o locale padrão

Para que o plugin mude o idioma configurado para a sessão do usuário, basta adicionar no request o parâmetro _locale. Por exemplo, http://seudominio.com/seupath?_locale=pt_BR configurará o locale para Português do Brasil. O parâmetro pode ser enviado via POST também.

URL com locale

Além das URIs padrão do VRaptor o plugin aceita URIs com o locale no início, por exemplo:

/controller/action
/en-us/controller/action

Tradução de rotas

As rotas podem ser traduzidas adicionando um arquivo de propriedades para o locale com o nome routes_{locale}.properties. Para traduzir adicione as rotas com suas traduções no arquivo no formato chave/valor.

Exemplo de tradução para português brasileiro do locale padrão em inglês:

Conteúdo do arquivo routes_pt_BR.properties:

/controller/action/{param} = /controlador/acao/{param}

Rotas que respondem a este controller/action:

/controller/action/{param}
/en-us/controller/action/{param}
/pt-br/controlador/acao/{param}

Nota: Ter URLs diferentes para o mesmo conteúdo pode trazer efeitos negativos para SEO, então traduza apenas URLs que também possuam o conteúdo traduzido.

Release

mvn release:prepare
mvn release:perform
open http://oss.sonatype.org

Ajuda

Envie perguntas no forum de perguntas e respostas do http://www.guj.com.br