3

对于我的大多数应用程序,我可以使用https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n中推荐的国际化技术(主要是 UIBinder 方法)。

我目前正在使用一个接收对象并动态显示其属性/字段的小部件,因此无法使用 UIBinder 和上述国际化技术。

我是否只需要更改我的设计并为我希望显示的每种类型的对象创建多个小部件,还是我尚未找到已建立的国际化技术?

4

2 回答 2

4

您需要从标题为Dynamic String Internationalization的部分重新阅读开发指南。

该方法意味着您需要为语言环境支持编写代码。我们已经使用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;
    }

注意- 您可以尝试上述方法的几种变体来将字符串处理为 i18nstrings 并将它们用于小部件....

于 2013-03-07T08:58:46.447 回答
0

你检查过字典类吗?它应该满足您的需求,除非您的标签需要对区域设置敏感 http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/i18n/client/Dictionary.html

于 2013-03-07T01:33:13.160 回答