用于动态生成内容的GWT国际化

时间:2013-03-06 19:57:12

标签: gwt internationalization

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

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

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

2 个答案:

答案 0 :(得分:4)

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

该方法意味着您需要编写区域设置支持代码。我们使用Dictionary类完成了这项工作。提供语言环境支持的技巧是为每个语言环境提供一个字典。

第1步 - 确保使用带有cookie的GWT module.gwt.xml的语言环境概念。确保在加载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并在小部件上使用它们....

答案 1 :(得分:0)

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

相关问题