0

<String,String>i18n .properties ファイルで定義されたマップがあるとします。

userGroupMap = 0, 1, 2, 3
0=Factory 
1=Administrators
2=Superusers
3=Operators

開発ガイドでは、インターフェースに対応するメソッドを導入すると、ローカライズされたを返すなどの呼び出しが発生することが説明されています。ここまでは順調ですね。Map<String,String> userGroupMap()MyConstants implements ConstantsMyConstants.userGroupMap().get("1")"Administrators"

UiBinderはどうですか?UiBinder テンプレートでマップされた値の 1 つを使用するにはどうすればよいですか? 不足している構文はあります<ui:msg key="userGroupMap:1">Administrators</ui:msg>か (実際には機能しません)。

4

1 に答える 1

1

これを行う 1 つの方法は非 xml ソリューションですが、@UiFactory を使用して、I18N が必要な特定のフィールドまたはラベルの作成を支援できます。しかし、私には、この特定の問題は、画面またはパネル レイアウトからウィジェットを分離しようとしているように見えるため、以下の解決策を求めているように思えます。

私はこれに苦労しました、そして私の実装のために、私はそれらの内部(例えば、ラベルとヘルプボタン付きのテキストフィールド)のためのUiBinderバッキングでコアウィジェットを作り、それからさまざまなマップのすべての I18N キーのプリペンダー。

たとえば、PartNumber フィールドの場合、次のマップにキーがありました: labelTexts()、helpTexts()、tooltipTexts()、defaultFieldValues()。次に、そのウィジェットのコンストラクターで、文字列キー 'partNumber' を渡します。これを使用して、必要なすべてのキーを構築するので、labelTexts().get('partNumberLabelText'), helpTexts() を呼び出します。 .get('partNumberHelpText') など

ウィジェット キーをその表示情報にマップしなおしたかったので、これを UiBinder で直接実行したくありませんでした。多くの場合、キーとウィジェットだけで、できるだけ少ない入力情報でウィジェットを作成できました。 (I18Nセットアップで正しく構成されている場合)それに基づいてマップからすべてを入力するだけです.

設計の観点からは、画面セットに個別の UiBinder を用意することは意味がありませんでした。それらは、画面レイアウトとすべてのウィジェットの関係を定義したオブジェクトから合成されました (実行時に画面コンテンツを定義できることを意味します)。

于 2012-07-05T11:43:52.410 に答える