0

struts2 と tile を使用して、Web アプリケーションで国際化を使用しています。これは、messages_en.properties および messages.properties で定義されたメッセージに対して機能します。私が直面している問題は、Web ページのタイトルに関するものです。2 つのタイル定義ファイルをセットアップしました。1 つはフランス語の tiles-defs.xml 用で、もう 1 つは英語の 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>
4

1 に答える 1

2

私はうまくいく答えを見つけました。

タイルが tiles_fr.xml を使用するようにロケールを設定するには、次のようにします。

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

つまり、HttpSession にアクセスできる場合です。

フィルターで「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 が取得されます。

于 2013-07-02T23:31:16.057 に答える