瓷砖国际化

时间:2013-05-22 13:47:58

标签: struts2 tiles

我在使用struts2和tiles的web应用程序中使用国际化。它适用于在messages_en.properties和messages.properties中定义的消息。我面临的问题涉及我的网页标题。我已经设置了两个tile定义文件,一个用于french tiles-defs.xml,另一个用于english 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>

1 个答案:

答案 0 :(得分:2)

我找到了适合我的答案。

要设置区域设置以便切片使用tiles_fr.xml,请执行以下操作:

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

即如果您有权访问您的HttpSession。

我试图将tile和struts语言环境设置为在Filter中使用“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接收。