Internacionalizacao em JSF

6 respostas
M

Galera, andei dando uma olhada nos posts aqui sobre internacionalizacao e nao encontrei nada q pudese me ajudar, entao ai vai meu problema:

Eu criei normalmente os properties. Consigo usalos mudando o locale da minha pagina. Porem meu problema eh um seguinte. Eu to usando facelts, e gostaria de mudar o locale nao apenas pegando o lacale do usuario, mais sim tbm de forma q o usuario possa escolher qual usar. Muitos indicaram colocar o locale="" na proprierdade f:view, porem no facelets nao usamos o f:view, qual seria outra solucao??? Eu tentei botar uma chamada de metodo q mudaria o locale quando o usuario entrase, o problema eh q ele muda, quando entra, mais ai pra ver a alteracao, ele tem q da um outro refresh na tela. Alguem poderia me mostrar a melhor forma de fazer isso? Agradeço desde já.

6 Respostas

Javabuntu

vc pode colocar as opções de locale pro usuário, e de acordo com a opção escolhida vc trata isso no backing bean, vc recupera o valor escolhido e seta o novo locale… tudo no backing bean

M

Vc quer dizer num bean de escopo sessao eu seto o lacale q ele escolher certo? Mais pra cada pagina q ele acessar, esse locale vai ter q ser reconfirmado, pelo menos pelo q eu vi aqui. Mais em q momento eu seto o lacale e como? Pq eu fiz assim:

Criei um metodo getLocale no meu bean q retorna um String vazia, ai ponho essa chamada em um outputText no meio da pagina, ai toda vez q entra na pagina ele seta o lacale no viewRoot. A questao eh q o cara entra, ai seta o lacale, mais so se ele atualizar a pagina, eh q vai surtir efeito. Me explica bem ae como eu poderia fazer pra o lacale ficar padrao em toda navegacao do usuario no site. Vlw amigo

L
Ola, eu faço assim para mudar o locale na minha aplicão,deixando o usuario escolher:
package com.Lgweb.Tcc.Model;
import java.util.Locale;
import java.util.Map;

import javax.faces.context.FacesContext;

public class Locales {
	public Locales(){}
	public String MudaLocale(){
		FacesContext context=FacesContext.getCurrentInstance();
		String languageCode=getLanguageCode(context);
		context.getViewRoot().setLocale(new Locale(languageCode));		
		return null;		
	}
	
	private String getLanguageCode(FacesContext context){
		Map<String,String>params=context.getExternalContext()
		.getRequestParameterMap();			
		return params.get("languageCode");
		
		
		
	}

}
na pagina fica assim:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<html>
<head>
<title></title>
<link rel="StyleSheet" type="text/css" href="css/tabelas.css">
</head>
<body>
				<f:loadBundle basename="com.NASeguranca.Model.messages" var="msg"/>
	<h:form>
		<rich:panel style=" width : 1037px;">			
			<rich:toolBar itemSeparator="disc">
				<rich:toolBarGroup itemSeparator="line">
					<h:commandLink immediate="true" action="#{local.MudaLocale}">
			  <f:param value="pt" name="languageCode"/>
			  <h:graphicImage value="/images/BR.png" width="20"></h:graphicImage>	
			</h:commandLink>
			
			  <h:commandLink immediate="true" action="#{local.MudaLocale}">
			  <f:param value="en" name="languageCode"/>
			<h:graphicImage value="/images/english.gif"></h:graphicImage>
			</h:commandLink>
			
			  <h:commandLink immediate="true" action="#{local.MudaLocale}">
			  <f:param value="es" name="languageCode"/>
			<h:graphicImage value="/images/SP.png" width="20" height="21"></h:graphicImage>
			</h:commandLink>
				</rich:toolBarGroup>				
				<rich:toolBarGroup itemSeparator="line" location="right">					
					
					</rich:toolBarGroup>
			</rich:toolBar>
		</rich:panel>
	</h:form>
</body>
</html>

so tem um problema, qdo o usuario vai para outra pagina o locale e setado automaticamente para o locale da moquina do usuario,
sendo necessario ele mudar novamente caso necessario.
espero ter ajudado
abraços.

M

Esse eh o problema amigo, nao mantem o locale, tem q setar a cada pagina q ele entra e sempre reatualizar, realmente assim fica inviavel. Mais agradeço a ajuda :slight_smile:

L

Se eu entendi o que vc quer é que ele mantenha o locale escolhido pelo usuario em tempo de execucao vc realmente precisa disso?.
Porque por exemplo, um usuario do brasil por padrao vera a versao em portugues, mas um americano ao acessar vera em ingles tds paginas que acessar.

belatra

Boa Tarde a todos!

Para resolver esse problema:

faça a escolha do idioma padrao no faces-config.xml e adicione os possiveis idiomas q vc quer q o teu sistema tenha(faca o properties para cada idioma)

ex:
<application>
<message-bundle>br.com.lge.clubelg.messages</message-bundle>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>en_US</supported-locale>
</locale-config>
</application>

dentro da sua aplição faça como o nosso amigo: lgWeb disse, deixando o usuario escolher, cria um metodo apra que o usuário troque o idioma.

em todas as suas paginas vc precisa setar o locale no <f:view>

exemplo:
<f:view locale="#{ApplicationBean.locale}">

Lembre-se, sete apenas nas paginas principais caso tenha algum include, nao precisa, mesmo pq no include sera <f:subView>

Espero ter Ajudado a todos!

Abracos:

Daniel Beltrami
Analista de Sistemas Java Pleno
MSN: [email removido]

Criado 15 de março de 2008
Ultima resposta 14 de jul. de 2008
Respostas 6
Participantes 4