Arquivo

Textos com Etiquetas ‘jsf’

EasyFaces – Pacote de componentes JSF brasileiro

19, novembro, 2009

É com imenso prazer que venho noticiar hoje o lançamento do EasyFaces, um pacote de componentes JSF. Esse projeto nasceu no meu TCC em parceria com Rafael da Cunha e resolvemos publica-lo para uso de quem o acha-lo interessante :)

Você pode conferir todo o conteúdo do EasyFaces no site www.easyfaces.com.br, lá você vai encontrar desde o download a demonstração “instantânea” de cada componente.

Visite e confira!

Ah… quase ia esquecendo, dia 23/11 estaremos apresentando nosso TCC, torçam por nós.

Vânio Meurer (vaninhO)

Vanio Meurer EasyFaces, Java EE ,

Internacionalização (i18n) com JavaServer Faces (JSF)

16, fevereiro, 2009

Olá, esse é meu primeiro post/tutorial, espero que seja útil a alguém. :)

Para utilizar esse tutorial você precisa apenas conhecer um pouco do JavaServer Faces (JSF).
O JSF possui um sistema de mensagens para internacionalização, o message-bundle.

O que é o message-bundle?
O message-bundle é nada mais que um mapeamento a um arquivo .properties onde você colocará todas as mensagens da aplicação que serão traduzidas.
O Arquivo .properties:
O arquivo properties é um arquivo comum de propriedades, cada linha é um registro novo e cada registro possui uma chave e uma mensagem.

Exemplo de um arquivo .properties:

tituloIndex Vânio Meurer – Pagina Principal
cadastroSucesso Cadastro efetuado com sucesso.

Onde a primeira palavra (em vermelho) seria a chave e o texto seguinte (azul) é a mensagem que será mostrada.
Vale lembrar que a chave não pode conter espaço.

Nesse arquivo properties você vai precisar inserir todas as mensagens internacionalizáveis da aplicação.

Nome dos arquivos properties:
Os arquivos properties precisam ter seu nome usando o seguinte critério:
nomedoarquivo_lingua_pais.properties
Exemplos:
message_pt_BR.properties
message_en_US.properties

Os arquivos properties terão as mesmas chaves em ambos, porem a mensagem deverá estar na linguagem de cada arquivo. O exemplo do properties que foi apresentado seria o arquivo message_pt_BR.properties. O arquivo message_en_US.properties teria o seguinte conteúdo:

tituloIndex Vânio Meurer – Principal Page
cadastroSucesso Registration was successful

Agora que já conhecemos um arquivo .properties, vamos aprender a mapeá-lo no faces-config.xml.

Mapeando o message-bundle na aplicação:

1
2
3
4
5
6
7
<application>
	<locale-config>
		<default-locale>pt_BR</default-locale>
		<supported-locale>en_US</supported-locale>
	</locale-config>
	<message-bundle>br.com.vaninho.aplicacao.web.bundle.message</message-bundle>
</application>

O nó locale-config vai conter atributos setando quais as linguagens que o sistema vai abranger.
-O default-locale seta qual a linguagem padrão da aplicação.
-O supported-locale seta uma linguagem que o sistema suportará (conterá tradução).
O atributo message-bundle vai apontar para o nosso arquivo .properties.
Atenção! A extensão do arquivo (.properties) não é incluída no mapeamento.
Note que o arquivo .properties obedece a mesma regra de empacotamento de classes comuns, e ele vai precisar estar no mesmo local das suas classes, o WEB-INF/classes, obedecendo a estrutura de pacotes.

Arvore de diretórios até os arquivos properties

Arvore de diretórios até os arquivos properties

Feito isso nos já configuramos tudo que era necessário para a aplicação usar a internacionalização, agora vamos fazer a aplicação realmente utilizar o properties.

No seu arquivo .jsp ou .xhtml (caso usar facelets), você vai precisar setar o bundle em uma variável. É simples, basta usar o seguinte código:

1
<f:loadBundle basename="br.com.vaninho.aplicacao.web.bundle.message" var="internacionalizacao" />

Agora para pegar o texto na linguagem correta, é só utilizar a seguinte EL: #{variavel.chave}.
No nosso exemplo ficaria assim:

1
2
3
4
5
...
<title>#{internacionalizacao.tituloIndex}</title>
...
<h:outputText value="#{internacionalizacao.cadastroSucesso}"/>
...

Caso você deseja recuperar a mensagem direto dos seus arquivos java, você vai utilizar o seguinte código para recuperar a mensagem na linguagem desejada:

1
2
3
4
5
6
// Pega o locale atual
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
// Pega o bundle de acordo com o locale
ResourceBundle bundle = ResourceBundle.getBundle(FacesContext.getCurrentInstance().getApplication().getMessageBundle(), locale);
// Pega a mensagem de acordo com a chave
String mensagem = bundle.getString("chave");

Pronto, seu sistema já esta internacionalizado. Você pode testar usando o Firefox e alterando a linguagem manualmente.

Logo criarei um tutorial de como fazer um botão para alteração de idioma.

Até,
Vânio Meurer (vaninh0).

Vanio Meurer Java EE , , , ,