JSTL – Trabalhando com internacionalização
by Luiz Paulo | setembro 26, 2008 | 5 Comments »A internacionalização é um diferencial para qualquer projeto, independente da linguagem que você utilize. É importante que você saiba alguma técnica para essa funcionalidade.
Desenvolver sistemas web com JAVA se torna bem simples se bem feito, mais simples ainda quando utilizamos bibliotecas como o JSTL. Vamos ver como é simples criar um sistema web com internacionalização em JAVA.
Nesse tutorial veremos como trabalhar com internacionalização em sistemas web utilizando JSP e a biblioteca JSTL.
Vamos direto para a prática!
Utilizaremos o Eclipse como API para desenvolvimento JAVA, partindo de um projeto web já criado.
Primeiro passo
Antes de começar a escrever código, você precisa baixar a biblioteca JSTL. Utilizaremos os pacotes standard.jar e jstl.jar.
Copie as duas bibliotecas para o diretório /WebContent/WEB-INF/lib/ ou para o diretório de libs do JAKARTA, para que sejam enxergadas pelo seu projeto.
Segundo passo
Vamos criar os arquivos de tokens.
Devemos definir o pacote para os arquivos. No nosso caso vamos colocar em:
com.lppjunior.blog.controller.messages
Criaremos 2 arquivos de tokens dentro desse pacote:
messages_pt.properties My_first_test=Meu primeiro teste Hello_World=<h1>Olá Mundo</h1> messages_en.properties My_first_test=My first test Hello_World=<h1>Hello World</h1>
O arquivo de token é formado por TOKEN_NAME=VALUE sempre!
Não utilize espaço, acento ou qualquer caractere no TOKEN_NAME, e não utilize quebra de linha no VALUE, quando precisar desse tipo de recurso, utilize \n ou a tag br no caso de HTML.
Perceba no exemplo acima que coloquei tags HTML no Hello_World para ilustrar a possibilidade, mas o ideal é utilizarmos as tags no próprio código HTML.
Terceiro passo
Vamos criar um HTML bem simples já com as tags e as chamadas para as tokens.
Veja o exemplo:
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <fmt:setLocale value="pt" /> <fmt:setBundle basename="com.lppjunior.blog.controller.messages.messages" /> <html> <head> <title><fmt:message key="Internacionalization_test" /></title> </head> <body> <fmt:message key="My_first_test" /> <fmt:message key="Hello_World" /> <hr /> <fmt:message key="Test_undefined_token" /> </body> </html>
Definições:
- Primeiro importamos a tagLib "fmt" para utilização do recurso de internacionalização;
- Configuramos a linguagem que desejamos utilizar (nesse caso "pt" Português);
- Configuramos a localização dos arquivos de tokens (repare quem além do pacote, precisamos colocar o início do nome do arquivo "messages" - O JSTL concatena [bundle + "_" + locale] para achar o arquivo);
- Utilizamos a tag "fmt:message" para retornar o conteúdo das tokens.
Resultado final:
<html> <head> <title>Meu primeiro teste</title> </head> <body> <h1>Olá Mundo</h1> <hr /> ???Test_undefined_token??? </body> </html>
Repare que deu um erro na token "???Test_undefined_token??? ". Isso aconteceu, pois a token "Test_undefined_token" não foi definida em nosso arquivo "messages_pt.properties", para resolver o problema basta defini-la.
É importante dizer que essa é uma das formas mais simples de criar a internacionalização. Em um projeto real, você pode isolar e definir as configurações dinamicamente, para que sejam reaproveitadas por todo o projeto.
Existe uma outra forma para configurar o JSTL para internacionalização, utilizando o web.xml, mas não achei necessário citar nesse tutorial.
Posts Relacionados
Categorias: Desenvolvimento web, Java, Linguagens
Tags: , exemplo, internacionalização, java, jstl, tutorial








5 Comentários
Vey, muito interessante.
Internacionalização é um procedimento extremamente importante.
Erroneamente se pensava que o inglês funcionasse como língua mundial. Pode até funcionar como ferramenta de comunicação internacional – ideia da qual eu discordo, mas isso abre margem à discussão –, no entanto ninguém quer ser obrigado a usar uma língua estrangeira em seus procedimentos diários.
Então, se queremos que nossa aplicação seja usada além das fronteiras nacionais, a internacionalização é essencial, não um diferencial.
Por outro lado é muito incômodo ter de executar procedimentos de internacionalização em cada aplicação sem uma ferramenta apropriada. Daí a JSTL é uma mão na roda. =)
[]'s
Cacilhas, La Batalema
Gostei do post é muito util aprender formas de internacionalizalção em projetos web ou não.
Agora tenho duas dúvidas
Primeira ->
[source]
messages_.properties
My_first_test=My first test
Hello_World=Hello World
messages_.properties
My_first_test=Meu primeiro teste
Hello_World=Olá Mundo
[/source]
Acho que você trocou as bolas nos messages
Segunda->
[source]
Hello_World=Olá Mundo /*Esse HTML tinha realmente que estar aqui? Você esta traduzindo o HTML? Não seria apenas os dados .... */
[/source]
Caso eu esteja errado desculpe o incomodo, mas é que para mim não fez muito sentido essas duas coisas, e acho que estou comentando para que você informações relevantes.
Grande Abraço.
Dinei,
Seguem as respostas:
Primeiro -> Realmente troque as bolas en/pt, vlw pela observação
Vou acertar...
Segundo -> Coloquei HTML no conteúdo da token como exemplo. Perceba o comentário postado logo abaixo do BOX:
"...Perceba no exemplo acima que coloquei tags HTML no Hello_World para ilustrar a possibilidade, mas o ideal é utilizarmos as tags no próprio código HTML..."
Esse recurso é útil quando criamos textos completos (quando tem quebras, negrito, etc). Ignora que utilizei a tag "H1", foi só exemplo mesmo!
[]'s
Muito bom o post, mas estou com uma duvida.
Peguei um projeto que ja existe esse arquivo de token. Soh que eu altero o valor (VALUE) e continua com o valor antigo.
Tem que fazer alguma coisa depois da alteracao alem de salvar eh claro?
att,.
Hi, cool site, good writing