Problema com acentuação no i18n com vRaptor 3

13 respostas
danieldestro

Estou com problemas para apresentar caracteres acentuados na minha aplicação com vRaptor 3.2.0.

No web.xml eu configurei:

<context-param> <param-name>br.com.caelum.vraptor.encoding</param-name> <param-value>UTF-8</param-value> </context-param>

Meus JSPs contém:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head>

Mas quando uso JSTL para exibir uma mensagem do meu arquivo de properties, saí todo zoado na tela:

<fmt:message key="app.title" />

Resultado: Prógols

Embora, se tiver caracter acentuado no jsp, ele sai correto na tela, mas vindo do properties pelo JSTL (i18n), sai todo zuado. Tentei converter o arquivo para UTF-8, mas continua com problema.

E também coloquei o um parâmetro adicional na JVM para subir Tomcat e nada: -Dfile.encoding=UTF-8

Sugestões?

13 Respostas

danieldestro

A única forma que achei de solucionar este problema é colocar o texto no properties codificado para Unicode ou caracteres especiais do HTML.

Exemplo:

app.title=Prógols app.name=Par\u00E1

Mas eu não queria resolver assim, gostaria de ter o meu properties com o texto “puro”.

Lucas_Cavalcanti

tenta colocar o arquivo messages.properties em ISO-8859-1 e colocar os acentos

danieldestro

Ontem mesmo mudei a propriedade dele pelo Eclipse e não rolou, mesmo alterando todas as configs do vRaptor e content-type para ISO-8859-1 e para UTF-8.

Eu desisti e coloquei meu arquivo cheio de “&aacute” e afins.

Mas eu ainda quero deixar meu arquivo puro, sem HTML codes ou unicodes.

Lucas_Cavalcanti

tentou deixar só o arquivo messages.properties em iso e todo o resto em utf-8?

danieldestro

Imagine todas as possibilidade entre ISO e UTF… eu fiz…

Cara… se conseguir colocar o vRaptor-blank com um um message.properties (limpo e com acentuação) pra funcionar, me manda, por favor!

Pre-reqs:

  • JSP em UTF-8 e aceitar acentuação (ex: “descrição” - sem usar HTML codes).
  • Config do vRaptor no web.xml com UTF-8

TKS!

Lucas_Cavalcanti

tenta colocar essas 3 configs no seu web.xml:

<context-param>
		<param-name>br.com.caelum.vraptor.encoding</param-name>
		<param-value>UTF-8</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>messages</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
		<param-value>pt_BR</param-value>
	</context-param>

só isso deveria ser o suficiente pra funcionar com o messages properties

G

Não adianta trocar o encoding da requisição se o arquivo continua em ISO-8859-1. Você precisa converter o arquivo para UTF-8 ou grava-lo novamente salvando como UTF-8.

Lucas_Cavalcanti

então, garcia, aparentemente o messages.properties precisa estar em ISO-8859-1, pq o java lê ele com esse encoding.

o que parece estar acontecendo é que o messages.properties está em UTF-8 e o java lê em ISO, por isso fica tudo zuado…

G

Lucas, bem lembrado, eu não reparei que era um .properties.

danieldestro, você está usando Eclipse? Se sim, clique com o botão direito, clique em properties e veja qual o é o encoding do arquivo. Creio que o conteúdo dele esteja como ISO-8859-1 mas a propriedade está como UTF-8. Se sim, troque a propriedade para ISO-8859-1.

danieldestro

great news!

Hoje criei um novo properties, mudei seu encoding para ISO-8859-1 e coloquei as mensages.

Deixei as configurações do web.xml (vraptor) e do encoding dos JSPs como UTF-8 e FUNCIONOU!

Valeu, abraços!

alias

Galera, vou ressuscitar esse tópico apesar do tempo…acho que ele é util pra explicar o meu contexto.

Estou passando pelo mesmo problema relatado pelo @danieldestro, ocorre que o meu arquivo message.properties está com encoding UTF-8, e já está sendo lido por algumas outras partes da aplicação fora o VRaptor. Dessa forma, a príncipio não desejo alterar o arquivo.

Dando uma olhada no codigo fonte do VRaptor, vejo que o resource bundle é criado com o método ResourceBundle.get() (https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/core/JstlLocalization.java), que tem esse comportamento que o Lucas comentou (lê com encoding ISO-8859-1).

Penso em criar um componente que sobrescreva essa leitura passando o meu encoding (bastaria ler o arquivo com a classe PropertyResourceBundle, passando um InputStream que foi lido passando o encoding desejado). De qualquer forma, não seria razoável o VRaptor permitir customizar isso, dando suporte para o usuário definir qual o encoding do arquivo?

Obrigado!

Lucas_Cavalcanti

essa especificação do arquivo .properties ser ISO-8859-1 é do próprio java, não sei se o VRaptor deveria se meter nisso.

você pode customizar sobrescrevendo o componente Localization (impl padrão é a JstlLocalization) e retornando o bundle lido com UTF-8

alias

Pois é Lucas, por isso comentei dessa classe aqui (http://docs.oracle.com/javase/6/docs/api/java/util/PropertyResourceBundle.html), o próprio Javadoc comenta a respeito disso e indica essa classe como a adequada para usar nessa situação. Eu acho que seria interessante sim, através de algum parametro doido ai da aplicação, permitir usar outros encodings pra esse arquivo…

Mas por enquanto sua sugestão já resolve, hehe. Valeu pela ajuda!

Criado 18 de dezembro de 2010
Ultima resposta 25 de jan. de 2013
Respostas 13
Participantes 4