0

我正在使用 struts 2 和 sitemesh。只需设置一个名为“request_locale”参数的请求参数,我就可以毫无问题地更改登录页面中的语言环境。但在所有其他页面中,我使用 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}"/>

它总是显示浏览器 Accept-Language 并且它没有进行任何本地化。如何进行本地化以与 sitemesh 一起使用?

4

1 回答 1

0

我尝试从登录操作重定向到带有请求区域设置参数的名为 home 的操作,然后此操作重定向到 index.jsp。现在一切正常。我将默认操作设置为主页操作,因此当用户从地址栏进入根页面时,它正在激活主页操作,因此 i18n 拦截器和拦截器正在变得活跃。这是 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 中的 home 操作:

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

感谢参考问题: 如何在默认页面上使用拦截器?

于 2013-07-16T19:31:35.113 回答