2012-03-21 50 views
0

我有一般的设计问题。你将如何本地化GWT中的类的字段名称?

你将如何本地化GWT中的类的字段名称?

想象我有豆与虚注释如

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

如果你想在GWT中做国际化,你应该使用他们内置的机制。谷歌的应用程序通常使用GWT构建为320个排列,因此这种方法对于大量的国际化十分明显,并且不应该很难实现。

的选项有:

  • 在接口文件:(
  • 与外部串属性文件信息接口硬编码字符串信息接口:|
  • UiBinder的与标签,辅以本地化的字符串文件:)

我个人认为UiBinder的情况。当你需要在一个小部件(即标题,标签等),使用一个字符串,你只是包装的字符串,像这样:

<ui:msg description="my great title">You're Title!</ui:msg> 

现在,当您编译,GWT将收集所有串在一起,并识别它们通过MD5哈希。多次使用相同的单词/短语,它只会出现在您的i18n属性文件中,GWT会从它找到的所有唯一字符串为您动态编译。现在只需翻译该文件并将其命名为name_DE并且GWT会将所有英文单词替换为德文的德文组合。

注:只有信息界面可以从类。您必须使用它们来动态更新应用程序中的字符串。

查看GWT i18n guide了解更多。

VielGlück。

+0

谢谢你的评论!我了解UiBinder模板的国际化。我用它。但问题是关于bean/classes的本地化。这是不同的情况。 – expert 2012-03-21 01:58:57

+0

我没有读过你的问题,看到我修改后的答案。至于在beans/classes中这样做,这不是可悲的GWT设计。 – 2012-03-21 02:03:24

相关问题