我有一般设计问题。
如何在GWT中本地化类的字段名称?
想象一下,我有带虚构注释的bean,例如
class Person
{
@LocalizedName(value = "{Person.name}")
String name;
@LocalizedName(value = "{Person.address}")
String address;
}
我将拥有英语和德语的资源包,其中将指定这两个值。
在运行时的某个时刻,我会有Class<Person>
的实例和一些包含字段名称的String
(例如name
)。
我想以某种方式自动获取名称的本地化版本。
我知道I can创建我的Messages界面并调用其getString()
,但这需要为本地化的每个类字段指定复杂的方法名称,例如MyMessages.person_address()
如果我在重构过程中重命名该属性,那么这不仅是不冷却的,而且往往会破坏。
今天我就是这样做的,而且非常难看。
想法?也许我可以使用Generators?别的什么?你是怎么做到的?
答案 0 :(得分:0)
如果你想在GWT中使用i18n,你应该使用它们的内置机制。 Google的应用程序通常使用GWT构建为320个排列,因此这种方法显然适用于大量的i18n,并且不应该那么难实现。
您的选择是:
就个人而言,我更喜欢UiBinder案。每当你需要在一个小部件中使用一个字符串(即标题,标签等)时,你只需要像这样包装字符串:
<ui:msg description="my great title">You're Title!</ui:msg>
现在编译时,GWT会将所有字符串聚集在一起并通过MD5哈希识别它们。多次使用相同的单词/短语,它只会在您的i18n属性文件中出现一次,GWT会根据它找到的所有唯一字符串为您动态编译。现在只需翻译该文件并将其命名为 name_DE ,GWT将在德语排列中将所有英语单词换成德语。
注意:只有类可以使用消息接口。您必须使用它们来动态更新应用程序中的字符串。
有关详情,请参阅GWT i18n guide。
VielGlück。