Dynamic String Internationalizationというタイトルのセクションから Dev Guide を読み直す必要があります。
このアプローチは、ロケールをサポートするためにコーディングする必要があることを意味します。Dictionaryクラスを使用してこれを行いました。ロケール サポートを提供する秘訣は、ロケールごとに辞書を用意することです。
ステップ 1 -
GWT module.gwt.xml のロケールの概念を Cookie で使用していることを確認します。gwt アプリケーションが読み込まれる前に、Cookie GWT_LOCALE が設定されていることを確認します。
<extend-property name="locale" values="en,ar,de" />
<set-property name="locale" value="en" />
<set-property-fallback name="locale" value="en" />
<set-configuration-property name="locale.cookie" value="GWT_LOCALE" />
<set-configuration-property name="locale.useragent" value="Y" />
ステップ 2 -
html スクリプト タグを使用して WidgetMessages.js を事前にロードするか、これをオンデマンドで遅延取得する場合は RequestBuilder を使用します。WidgetMessages.js の内容
var widget_messages_en = {
"today" : "Today",
"now" : "Now"
};
var widget_messages_ar= {
"today" : "۷ڤدجچ",
"now" : "چڤت"
}
var widget_messages_de= {
"today" : "Today",
"now" : "Now"
}
ステップ 3 - 辞書を処理してローカル ハッシュマップに読み込みます。
private static Map<String, Dictionary> I18N_DICTIONARIES = new HashMap<String, Dictionary>();
private static Dictionary createDictionary( String dictionaryName)
{
String moduleId = dictionaryName + "_messages_" + LocaleInfo.getCurrentLocale().getLocaleName();
Dictionary dictionary = Dictionary.getDictionary( moduleId );
I18N_DICTIONARIES.put( dictionaryName, dictionary );
return dictionary;
}
public static String getI18NString(String dictionaryName, String stringToInternationalize )
{
Dictionary dictionary = I18N_DICTIONARIES.get( dictionaryName);
if ( dictionary == null )
{
dictionary = createDictionary( dictionaryName);
}
String i18string = null;
if ( dictionary == null )
return stringToInternationalize;
try
{
i18string = dictionary.get( stringToInternationalize );
}
catch ( Exception e )
{
}
return i18string;
}
注- 文字列を i18nstring に処理し、それらをウィジェットで使用するための上記のアプローチのいくつかのバリエーションを試すことができます....