在UiBinder模板中使用i18n .properties定义的映射

时间:2012-07-04 21:07:09

标签: gwt

假设我的i18n .properties文件中定义了<String,String>地图,例如:

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

Map<String,String> userGroupMap()界面中引入相应MyConstants implements Constants方法的开发指南explains将导致MyConstants.userGroupMap().get("1")之类的调用返回本地化的"Administrators"。到目前为止一切都很好。

UiBinder怎么样?如何在UiBinder模板中使用其中一个映射值?是否有我缺少的语法,例如<ui:msg key="userGroupMap:1">Administrators</ui:msg>(实际上不起作用)?

1 个答案:

答案 0 :(得分:1)

你可以做到这一点的一种方法是非xml解决方案,但你可以使用@UiFactory来帮助创建你需要的特定字段或标签。但对我来说,这个特殊问题似乎与下面的解决方案有关,因为您似乎希望将您的小部件与屏幕或面板布局分离。

我为此苦苦挣扎,为了实现,我最终制作了UiBinder支持内核的核心小部件(例如标签和带有帮助按钮的文本字段),然后传入一个'fieldKey',用作各种地图中所有I18N键的预装器。

例如,对于PartNumber字段,我在以下映射中有一个键:labelTexts(),helpTexts(),tooltipTexts(),defaultFieldValues()。然后在该小部件的构造函数中,我将传入字符串键'partNumber',这将用于构建所需的所有键,因此我将调用labelTexts()。get('partNumberLabelText'),helpTexts() .get('partNumberHelpText')等。

我不想直接在UiBinder中这样做,因为我希望widget键映射回它的显示信息,所以我可以用尽可能少的输入信息创建一个widget,在很多情况下只需要键和然后小部件(如果它是在I18N设置中正确配置的)将只根据它填充地图中的所有内容。

从设计的角度来看,对于我而言,为屏幕设置单独使用UiBinders是没有意义的,它们是由定义屏幕布局和所有小部件关系的对象组合而成的(这意味着您可以在以下位置定义屏幕内容)运行)。