替代uibinder I18n

时间:2012-07-26 12:37:30

标签: gwt localization internationalization uibinder

按照here所述,有Uibinder做i18n的方式 然后有关于GWT i18n的this建议。

我正在考虑替代方案,因为我遇到了第一个解决方案的一些问题。 我想知道这两种方法的优点和缺点,所以我知道该选择什么 请指教。

1 个答案:

答案 0 :(得分:4)

第一个解决方案非常详细,要求您将本地化文件放在特定文件夹中,并将其描述为a kind of a nightmare,但它确实支持带有(运行时)变量的文本。第二种解决方案不支持消息中的变量,但更容易使用。

第二个解决方案支持2个用例。这就是他们寻找两种解决方案的方式:

纯文字:

解决方案1:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
    ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
    ui:generateLocales="default">
  <div><ui:msg key="helloWorld" description="Greeting">Hello, world.</ui:msg></div>
</ui:UiBinder>

解决方案2:

<ui:with field='i18n' type='x.y.client.i18n.MyMessages' />
....
<div><ui:text from="{i18n.helloWorld}" /></div>

在解决方案1中,标记内的文本将是默认文本,描述位于description属性中。在第二个解决方案中,您可以在扩展MyMessages

的接口类Messages中添加它

静态方法参数:

解决方案1:

<th title="Gross receipts">
  <ui:attribute ui:name='title' ui:description='Tooltip text for gross column'/>
  ...
</th>

解决方案2:

<th title="{i18n.grossReceiptsTitle}">...</th>

对于解决方案2,无法使用传递参数等更高级的消息,但在initWidget调用之后,您始终可以回退以在构造函数中添加它们。