Olá Pessoal,
Eu estou tentando "internacionalizar" a minha aplicação web e, eu nem sei mais o que eu estou tentando fazer é possível e, estou precisando de umas orientações!
Pois bem, eis o que se segue... A minha aplicação web está "arquiteturada" da seguinte manteira, definição de Layout com Struts Tiles e, framework de renderização das páginas JSFs, Tomahawk. Arquivos de properties:
- br.com.....message.core
-- Messages.properties
---- default language
---- pt_BR - Portuguese (Brazil)
---- es_ES - Spanish (Spain)
---- en_US - English (United States)
Configuração do faces-config.xml:
<application>
<view-handler>org.apache.myfaces.tomahawk.application.jsp.JspTilesViewHandlerImpl</view-handler>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>pt_BR</supported-locale>
<supported-locale>en_US</supported-locale>
<supported-locale>es_ES</supported-locale>
</locale-config>
<message-bundle>br.com.....message.core.Messages</message-bundle>
</application>
E o JPS "header" do meu site, onde carrego os JavaScript, CSSs e etc e tals, tenho a chamada pro arquivo de Properties:
<f:loadBundle basename="dev.java.net.viniciusmayer.com.message.core.Messages" var="msgs"/>
Bom... Agora, lá vai os "link" que disponibizarei para o cara "escolher" a língua:
<h:form>
<t:commandLink action="#{???}">
<h:outputText value="#{msgs.linguaPortuguese}" title="#{msgs.linguaPortugueseTitle}"/>
</t:commandLink>
<t:commandLink action="#{???}">
<h:outputText value="#{msgs.linguaSpanish}" title="#{msgs.linguaSpanishTitle}"/>
</t:commandLink>
<t:commandLink action="#{???}">
<h:outputText value="#{msgs.linguaEnglish}" title="#{msgs.linguaEnglishTitle}"/>
</t:commandLink>
</h:form>
E é aqui que começam as minhas dúvidas... Primeiro, eu vou ter um BackingBean onde na action de um commandLink executo um método espécifico pra cada língua que troca o Locale?!?! Exemplo:
JSP:<t:commandLink action="#{bean.spanish}">
<h:outputText value="#{msgs.linguaSpanish}" title="#{msgs.linguaSpanishTitle}"/>
</t:commandLink>
public String spanish(){
vr.setLocale(new Locale("es", "ES"));
return "reload";
}
<managed-bean>
<managed-bean-name>bean</managed-bean-name>
<managed-bean-class>br.com......web.jsf.LinguaBackingBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Ah!!! O objeto "vr" vem de...
FacesContext context= null;
ServletContext servletContext= null;
UIViewRoot vr= null;
/** Creates a new instance of LinguaBackingBean */
public LinguaBackingBean() {
context= FacesContext.getCurrentInstance();
servletContext= (ServletContext) context.getExternalContext().getContext();
vr= context.getViewRoot();
}
<!--navigation-rule>
<from-view-id>/www/lingua.jsp</from-view-id>
<navigation-case>
<from-outcome>reload</from-outcome>
<to-view-id>/www/</to-view-id>
</navigation-case>
</navigation-rule-->
Bueno... Alguém me dá uma "luz" que eu não consegui fazer isso aí funcionar e... Eu não sei se eu estou no caminho certo!
No mais, fico desde já grato pelo tempo dedicado!
Att,
E. Vinicius D. Mayer
