1

GWT i18n を使用して Web アプリを作成しています。

私は定義するインターフェースを持っています

public interface MyConstants extends Constants {
    String value();
}

および 3 つのプロパティ ファイル:

MyConstants_en.properties
MyConstants_es.properties
MyConstants_de.properties

このコードをコンパイルすると、エラーが発生しました。

[INFO]             Processing interface com.mycompany.myproject.client.i18n.MyConstants
[INFO]                Generating method body for value()
[INFO]                   [ERROR] No resource found for key 'value'

これを解決するには2つの方法があります。

  • 次の行を GWT モジュール定義の「.gwt.xml」ファイルに追加します。

       <set-property name="locale" value="en" />
    

ただし、これを行うと、クエリ パラメーター「&locale=de」を使用してロケールを指定できなくなりました。マイページは常に英語のままです。

  • MyConstants_en.properties と同じ内容を含む追加のプロパティ ファイル MyConstants.properties を追加します。これは完全に機能します。ただし、まったく同じ内容の MyConstants.properties と MyConstants_en.properties の両方を保持したくありません。

    私ができる方法はありますか:

    1. URL クエリ パラメータを使用して現在のロケールを制御する
    2. 追加プロパティファイルを指定しない場合
    3. ビルドに成功します。

どうもありがとう。

4

2 に答える 2

1

GWT は、非常に基本的なローカリゼーション設定を持つ「デフォルト」ロケールと呼ばれるもので構成された状態で出荷されます。デフォルトのロケールは MyConstants.properties ファイルを探しています。「デフォルト」ロケールを MyConstants_en.properties にしたい場合は、gwt.xml モジュール ファイルに次の調整を加えます。

<!-- inherit these modules to activate GWT internationalization -->
<inherits name='com.google.gwt.i18n.I18N' />
<inherits name="com.google.gwt.i18n.CldrLocales"/>

<!-- add the various locales you wish to support -->
<extend-property name="locale" values="en"/>
<extend-property name="locale" values="es"/>
<extend-property name="locale" values="de"/>

<!-- instructs the application use this locale when there is no locale specified (i.e. replaces the default) -->
<set-property-fallback name="locale" value="en" />

「set-property-fallback」を「en」に設定すると、アプリケーションは MyConstants_en.properties ファイルを使用します。

それが役立つことを願っています...

于 2013-08-08T05:07:44.400 に答える
0

私は何が起こったのかを理解しました。

GWT はコンパイル時に何かを行って、定数が常にデフォルト値を持つようにしていると思います。これの標準的な方法は、私の場合、デフォルトのプロパティ ファイルを定義することです。

MyConstants.properties

の同じ値が含まれていてもMyConstants_en.properties

このファイルが表示されない場合は、@Defaultxxxxxx アノテーションを使用してデフォルト値を GWT に伝える必要があります。

私の例では、次のものを提供する必要があります。

@LocalizableResource.DefaultLocale("en")
public interface MyConstants extends Constants {
    @DefaultStringValue("Hello")
    String value();
}

また、Constant インターフェイス宣言で @LocalizableResource.DefaultLocale("en") を使用して、デフォルトのロケールも指定します。

これにより、デフォルトのプロパティ ファイルを使用せずにコードをクリーンにコンパイルできます。

于 2013-08-08T13:46:34.407 に答える