Qual a melhor maneira de se criar uma aplicação Web Internacionalizada?

15 respostas
bland

Pessoal,

Estive a conversar com um amigo e analisar qual a melhor aplicabilidade da internacionalização em uma aplicação Web. Chegamos a uma “conclusão”, porém, pra mim, não ficou, ainda, a melhor solução. A solução que chegamos foi criar essa internacionalização via banco de dados. Calma, não se desesperem.

Existiriam arquivos .properties para cada língua a ser apresentada no site. Porém, pairou uma dúvida quanto aos labels dos campos. Portanto, pensamos em colocar isso em banco de dados para que a partir da seleção da língua o sistema pudesse identificar quais os labels iria apresentar.

Por exemplo, se o usuário (cliente) selecionasse a língua inglesa, o sistema iria identificar qual o identificador da língua selecionada e iria buscar sempre esse identificador para ser mostrado o label correto para a língua selecionada. Vale ressaltar que isso impactaria no cadastro dos label para as línguas dispostas no sistema. Por exemplo, o campo endereço teria que ser cadastrado como Endereço, Address e assim suscetivamente.

Enfim, como mencionei, não gostei muito dessa solução e queria saber como vocês fariam para manter essa internacionalização o mais flexível possível.

Desde já eu agradeço a todos.

Forte abraço.

15 Respostas

W

Estive a conversar com um amigo e analisar qual a melhor aplicabilidade da internacionalização em uma aplicação Web. Chegamos a uma “conclusão”, porém, pra mim, não ficou, ainda, a melhor solução. A solução que chegamos foi criar essa internacionalização via banco de dados. Calma, não se desesperem.
Existe um carinha chamado i18n e ele é padronizado tente dar uma pesquisar sobre.
http://java.sun.com/docs/books/tutorial/i18n/
http://www.w3.org/International/
http://blog.caelum.com.br/2007/08/13/i18n-internacionalizacao-com-jstl/
http://www.w3.org/International/getting-started/language
Bem já ví empresas guardar de tudo que é informação num repositório chamado “Banco de dados” menos o que interessa que são os dados mais isso é outra história.
sds.

Marcio_Nogueira

Utilize JSF (Java Server Faces) para implementar este recurso. É muito mais eficiente e simples de implementar do que em outros frameworks (Struts).
Um abraço. :wink:

Mauricio_Linhares

Marcio_Nogueira:
Utilize JSF (Java Server Faces) para implementar este recurso. É muito mais eficiente e simples de implementar do que em outros frameworks (Struts).
Um abraço. :wink:

E você poderia explicar qual a diferença entre fazer isso em JSF e no Struts?

W

Marcio_Nogueira wrote:Utilize JSF (Java Server Faces) para implementar este recurso. É muito mais eficiente e simples de implementar do que em outros frameworks (Struts).
Um abraço.
Marcio, mostre a eficiência e simplicidade do “Java Server Faces” em relação ao Struts, Struts2, Mentaway, Wicket, JSTL etc… estou curioso.

Hayan

ola WilliamSilva

a maneira é simples, use ApplicationResources.properties ex (ApplicationResources_pt_BR.properties para portugues, ApplicationResources_es_US.properties para inglês), assim sua applicação esta internacionalizada automaticamente, e se tu quer que o cliente pode trocar a idioma use ex : java.util.Locale locale = new java.util.Locale("pt_BR");

W

Hayan wrote: a maneira é simples, use ApplicationResources.properties ex (ApplicationResources_pt_BR.properties para portugues, ApplicationResources_es_US.properties para inglês), assim sua applicação esta internacionalizada automaticamente, e se tu quer que o cliente pode trocar a idioma use ex
Acompanhando o raciocinio de “Qual a melhor maneira de se criar uma aplicação Web Internacionalizada?”
e, se vc. ler o post acima e acessar os links enviados verá algo melhor do que sua sugestão, só mais um detalhe a aplicação é web porquê devo usar o seu exemplo de

java.util.Locale locale = new java.util.Locale("pt_BR");

Se tenho isso como solução.:
http://www.javafree.org/javabb/viewtopic.jbb?t=1387
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL6.html
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/WebI18N.html#wp83291
http://static.raibledesigns.com/repository/presentations/ComparingJavaWebFrameworks-ApacheConUS2007.pdf
sds.

Hayan
WilliamSilva o código
java.util.Locale locale = new java.util.Locale("pt_BR");
serve para uma aplicação web sim, por exemplo nos temos uma aplicação com Struts tu pode usar uma simples Action para mudar a idioma da sua applicação :
public ActionForward Language(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws DataAccessException, SQLException {

		String code = request.getParameter("langCode");
		java.util.Locale locale = new java.util.Locale(code);
		setLocale(request, locale);
		return mapping.findForward("success");
	}
com a Action tu pode mudar a idioma da sua applicação manualmente no Menu das idiomas :
<html:link action="/suaAction.shtml">Inglês
   					<html:param name="parameter" value="Language"></html:param>
   					<html:param name="langCode" value="es"></html:param>
   				</html:link>

nesse caso tu tem uma applicação Internacionalizada automaticamente e tem mais opção para o cliente mudar a idioma se quiser.

um abraço

saoj

Esses frameworks (JSF e Struts) permitem recarregamento automático das properties quando algo é alterado ou faz-se necessário um restart do servidor nesses casos ???

Como vc força um locale para a sessão do usuário, isto é, o usuário gravado no banco é english e deve ser forçado para english logo após ele se logar ???

Querendo dar uma olhada em como o Mentawai implementa internacionalização, dê uma olhada nesse link: http://www.mentaframework.org/i18n.jsp?loc=pt

aleck

saoj:

Esses frameworks (JSF e Struts) permitem recarregamento automático das properties quando algo é alterado ou faz-se necessário um restart do servidor nesses casos ???

Como vc força um locale para a sessão do usuário, isto é, o usuário gravado no banco é english e deve ser forçado para english logo após ele se logar ???

Querendo dar uma olhada em como o Mentawai implementa internacionalização, dê uma olhada nesse link: http://www.mentaframework.org/i18n.jsp?loc=pt

Até onde sei o restart é necessário no struts, pois ele carrega em memoria um arquivo properties. Com jsf não cheguei a usar.

A implementação do mentawai segue os mesmos padrões do struts, porém sem usar xml, outro ponto pra vc :slight_smile:

Hayan

Mentawai???, ele não tem a flexibilidade de Struts ou JSF, mesmo que ele ajuda muito na produtividade, e a internacionalização é moleza com Struts.

Luiz_Aguiar

Acho que a pergunta foi clara, sobre i18n, não sobre frameworks, vamos evitar flames por favor, se o amigo que postuo não especificou nada não somos nós que vamos escolher o framework pra ele, ok!?

saoj

Sem recalques, por favor. Pelo menos tenta disfarçar esse sentimento primitivo. Se vc acha que o Struts ou o JSF fazem alguma coisa que o Mentawai não faça, peço que coloque no fórum do Mentawai. (http://forum.mentaframework.org)

Concordo plenamente. Que o amigo avalie o suporte dos diversos frameworks aqui apresentados e decida por si mesmo. Só recomendo sinceramente que não escolha um framework que exija restart a cada alteração do properties, pois estamos no século XXI.

bland

Pessoal,

Obrigado a todos que postaram. Mas ainda pairam algumas dúvidas na minha mente. De antemão, agradeço a Luiz por tentar pôr ordem na casa. :smiley:
Eu estou pretendendo utilizar JSF 1.2 com Spring 2.5 e Hibernate 3.2 e queria uma solução parecida, para a minha realidade, com a do Youtube, ou seja, o cara entra no site, seleciona o país (idioma) e o site muda completamente todos os labels para o idioma selecionado. É isso que quero.

Pensando nas tecnologias que eu pretendo utilizar, estive a pensar em criar uma classe utilitária que fosse um singleton e estivesse presente no meu faces-config. Após a mudança do idioma, este singleton iria receber, em um determinado método, uma string para o novo arquivo .properties. Assim sendo, quando este fosse invocado (o singleton de ResourceBundle), ele já estaria apontando para o arquivo da língua selecionada e iria buscar as informações corretas para o idioma escolhido.

Eu estou “viajando” ou isso não é possível? Conto com a ajuda de vocês.

Obrigado.

aleck

bland:
Pessoal,

Obrigado a todos que postaram. Mas ainda pairam algumas dúvidas na minha mente. De antemão, agradeço a Luiz por tentar pôr ordem na casa. :smiley:
Eu estou pretendendo utilizar JSF 1.2 com Spring 2.5 e Hibernate 3.2 e queria uma solução parecida, para a minha realidade, com a do Youtube, ou seja, o cara entra no site, seleciona o país (idioma) e o site muda completamente todos os labels para o idioma selecionado. É isso que quero.

Pensando nas tecnologias que eu pretendo utilizar, estive a pensar em criar uma classe utilitária que fosse um singleton e estivesse presente no meu faces-config. Após a mudança do idioma, este singleton iria receber, em um determinado método, uma string para o novo arquivo .properties. Assim sendo, quando este fosse invocado (o singleton de ResourceBundle), ele já estaria apontando para o arquivo da língua selecionada e iria buscar as informações corretas para o idioma escolhido.

Eu estou “viajando” ou isso não é possível? Conto com a ajuda de vocês.

Obrigado.

A necessidade do restart nao e para mudanca de idioma e sim para alteracoes em tempo real dos arquivos.

O que vc quer o struts, jsf ja fazem.

bland

aleck,

Se eles já fazem isso, você teria um exemplo para me mostrar como eles fazem isso? Desculpem a todos, mas ainda pairam algumas dúvidas de como ele estaria fazendo a troca de idioma após a seleção do país.

Abraço.

Criado 27 de abril de 2008
Ultima resposta 29 de abr. de 2008
Respostas 15
Participantes 8