2013-07-15 54 views
0

我正在使用struts 2和sitemesh。只需设置一个以'request_locale'参数命名的请求参数,就可以在登录页面中更改语言环境而不会出现问题。但在所有其他页面中,我使用sitemesh来装饰页眉和页脚。我试图为其他页面设置相同的参数,但没有运气。这些都是一些我在我的登录操作尝试其他代码:struts 2和sitemesh本地化

request.getSession(false).setAttribute("WW_TRANS_I18N_LOCALE", newLocale); 
ActionContext.getContext().setLocale(newLocale); 
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, newLocale); 

当我写出这些设置我看到一切正常。 但是,当我写出来

<c:out value="${pageContext.request.locale.language}"/> 

它总是显示浏览器的接受语言和它没有做任何本地化。 我如何使本地化与sitemesh一起工作?

+0

所以,一切是你的工作只是不知道如何在JSP中显示当前的语言环境? –

+0

登录后我没有重定向到index.jsp页面。但是页面以浏览器的默认语言呈现。如果是因为重定向到页面,我现在正在搜索。我会尝试重定向到行动。 – acpuma

回答

0

我试着从登录动作重定向到一个名为home的动作,并使用请求语言环境参数,然后这个动作重定向到index.jsp。现在一切都好。 而我设置默认操作为主动作,因此当用户从地址栏输入根页面时,它正在启动主动操作,因此i18n拦截器和intercoptors正在活跃。 这是struts.xml中login.action:

<action name="login" class="wateron.login.LoginAction" > 
     <result type="redirectAction"> 
      <param name="actionName">home?request_locale=${request_locale}</param> 
      <param name="namespace">/</param> 
     </result> 
</action> 

而且这是在struts.xml中主场行动:

<package name="default" extends="struts-default" namespace=""> 
    <default-action-ref name="home" /> 
    <action name="home"> 
     <result>/index.jsp</result>  
    </action> 
</package> 

感谢参考问题: How to use interceptor on the default page?