2013-05-22 89 views
0

我在使用struts2和瓷磚的web應用程序中使用國際化。它適用於在messages_en.properties和messages.properties中定義的消息。我面臨的問題與我的網頁標題有關。我已經設置了兩個tile定義文件,一個用於法語tiles-defs.xml,另一個用於英文tiles-defs_en.xml。在我所有的行動中,我已經把i18n攔截器。但是當我要求改變語言時,我的標題不會改變。有人開始解決問題嗎?瓷磚國際化

非常感謝

這是我的鏈接到我的區域行動:

<s:url var="urlfr" action="locale"> 
      <s:param name="request_locale">fr</s:param> 
     </s:url> 
     <s:a href="%{urlfr}"> 
      <img title="francais" alt="" 
       src="/baseline/pages/images/flag-fr.gif"> 
     </s:a> 
    &nbsp; 
    <s:url var="urlen" action="locale"> 
      <s:param name="request_locale">en</s:param> 
     </s:url> 
     <s:a href="%{urlen}"> 
      <img title="englais" alt="" src="/baseline/pages/images/flag-gb.gif"> 
     </s:a> 

我的語言環境行動只返回成功,這是我的struts.xml中,我宣佈我的行動

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
<constant name="struts.custom.i18n.resources" value="messages" /> 
<constant name="struts.devMode" value="true" /> 
<constant name="struts.enable.SlashesInActionNames" value="true" /> 


<package name="user" namespace="/user" extends="struts-default"> 
    <result-types> 
     <result-type name="tiles" 
      class="org.apache.struts2.views.tiles.TilesResult" /> 
    </result-types> 
    <interceptors> 
     <interceptor name="post" class="domain.PostOnlyInterceptor" /> 
     <interceptor-stack name="postStack"> 
      <interceptor-ref name="i18n" /> 
      <interceptor-ref name="post" /> 
      <interceptor-ref name="defaultStack" /> 
     </interceptor-stack> 
    </interceptors> 

    <action name="listPaysAction" class="regionAction" method="listePaysParRegion"> 
     <interceptor-ref name="params" /> 
     <interceptor-ref name="prepare" /> 
     <interceptor-ref name="defaultStack" /> 
     <result name="success" type="tiles">accueil</result> 
    </action> 

</package> 

</struts> 
+0

顯示代碼。這真的不應該是瓷磚問題,它只是組裝視圖。如果視圖沒有正確執行i18n,它應該是一個struts2/jsp問題。也看不到法國/英國瓷磚的需要。可以看到支持具有不同佈局流程的語言的瓷磚的可能原因,但這些都是從左到右...... – Quaternion

回答

2

我找到了適合我的答案。

要設置位置,這樣的瓷磚將使用tiles_fr.xml,這樣做:

Locale locale = LocaleUtility.langToLocale("fr"); 
session.setAttribute(DefaultLocaleResolver.LOCALE_KEY, locale); 

也就是說如果你有機會到您的HttpSession中。

我試圖設置瓷磚和struts語言環境在過濾器中使用「fr」。所以,我有機會到我的HttpSession:

HttpSession session=request.getSession(); 
Locale locale = LocaleUtility.langToLocale("fr"); // fr is hard coded for now. 

Config.set(session, Config.FMT_LOCALE, locale); 
session.setAttribute(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale); 
session.setAttribute(DefaultLocaleResolver.LOCALE_KEY, locale); 

顯然,

Config.set(session, Config.FMT_LOCALE, locale); 

並沒有真正做任何事情。我見過其他人說它有效 - 但它不適用於瓷磚。但我把它留在那裏。以防萬一我也需要在jstl中使用它。

但是,通過執行上述操作,您的global_fr.properties以及tiles_fr.xml將會啓動。

+0

它工作,但我使用'locale locale = new Locale('language');'而不是'Locale locale = LocaleUtility.langToLocale(「fr」);' – user1310305

+0

是的。無論你使用'Locale()'還是'langToLocale()',只要你在session中設置的是Locale對象,它都可以工作。 – ns123