2013-05-22 3 views
0

웹 응용 프로그램에서 struts2 및 타일을 사용하여 국제화를 사용하고 있습니다. messages_en.properties 및 messages.properties에 정의 된 메시지에 대해 작동합니다. 내가 직면 한 문제는 내 웹 페이지 제목과 관련이 있습니다. 두 개의 타일 정의 파일을 설정했습니다. 하나는 french 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> 

내 로케일 행동은 성공을 반환하고 이것은 내가 내 행동을

<?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> 
를 선언 내 struts.xml입니다
+0

코드를 표시하십시오. 이것은 타일 문제가 아니어야하며, 단지 뷰를 조합합니다. 뷰가 올바르게 i18n을 수행하지 않으면 struts2/jsp 문제 여야합니다. 또한 프랑스어/영어 타일이 필요하지 않습니다. 서로 다른 레이아웃 흐름을 가진 언어를 지원하는 타일에 대한 가능한 이유를 볼 수는 있지만 왼쪽에서 오른쪽으로 모두 ... – Quaternion

답변

2

나는 저에게 답을 찾았습니다. 타일이 tiles_fr.xml을 사용할 수 있도록

은 로케일을 설정하려면 다음을 수행하십시오 당신이 당신의 HttpSession에 액세스 할 수있는 경우이다

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

합니다.

필터에서 "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에서도 필요합니다.

하지만 위와 같이하면 tiles_fr.xml 픽업뿐만 아니라 global_fr.properties도 만들 수 있습니다.

+0

작동했지만 Locale locale 대신'Locale locale = new Locale ('language'); = LocaleUtility.langToLocale ("fr"); ' – user1310305

+0

예. '새로운 Locale()'또는'langToLocale()'을 사용하든 상관없이, 세션에서 설정 한 것이 Locale 객체라면 어느 것이 든 작동 할 것입니다. – ns123