3

私のアプリの大部分では、https: //developers.google.com/web-toolkit/doc/latest/DevGuideI18n (主に UIBinder アプローチ) に記載されている推奨される国際化手法を使用できます。

私は現在、オブジェクトを取り込んでその属性/フィールドを動的に表示する単一のウィジェットを使用しているため、UIBinder と前述の国際化手法を使用できません。

デザインを変更して、表示したいオブジェクトのタイプごとに複数のウィジェットを作成するだけでよいのでしょうか?それとも、確立された国際化技術がまだ見つかっていないのでしょうか??

4

2 に答える 2

4

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 に処理し、それらをウィジェットで使用するための上記のアプローチのいくつかのバリエーションを試すことができます....

于 2013-03-07T08:58:46.447 に答える
0

Dictionaryクラスを確認しましたか?ラベルでロケールを区別する必要がない限り、ニーズを満たす必要があります http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/i18n/client/Dictionary.html

于 2013-03-07T01:33:13.160 に答える