0

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

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

开发指南解释说,在接口中引入相应的Map<String,String> userGroupMap()方法MyConstants implements Constants会导致调用,例如MyConstants.userGroupMap().get("1")返回本地化的"Administrators". 到现在为止还挺好。

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

4

1 回答 1

1

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

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

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

我不想直接在 UiBinder 中执行此操作,因为我希望小部件键映射回它的显示信息,所以我可以使用尽可能少的输入信息创建一个小部件,在许多情况下只有键然后是小部件(如果它在 I18N 设置中正确配置)只会根据它填充地图中的所有内容。

From a design standpoint, for me it didn't make sense to have separate UiBinders for the screen sets, they were composited from objects that defined the screen layout and relation of all the widgets (meaning that you could define screen content at runtime).

于 2012-07-05T11:43:52.410 回答