GWT UiBinder I18n

时间:2015-05-18 08:38:37

标签: java gwt

正如标题所说,我需要帮助GWT的i18n与UiBinder一起使用。我想使用静态i18n将我的应用程序国际化。我用于学习的书只介绍了一种通过让编译器为常量/消息生成密钥和默认文件来国际化ui.xml文件的方法,但必须有一种更简单的方法。这就是为什么我尝试使用ui:with这样的标签来使用我的国际化常量(在upFace中):

<ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with>    
<g:ToggleButton ui:field="observeButton">
        <g:upFace>{lang.observe}</g:upFace>
        <g:downFace>Observing</g:downFace>
</g:ToggleButton>

这不起作用,按钮显示文本{lang.observe},这看似合乎逻辑,但现在我的问题是:有没有办法使用这样的常量?如果没有,有人可以解释我应该如何在UiBinder文件中使用常量(没有编译器生成文件和密钥)?

2 个答案:

答案 0 :(得分:2)

随时随地接受HTML(例如T retrieve(int hashCode)内),您可以使用upFace<ui:msg><ui:text>(在任何地方都可以使用纯文本,您可以使用{ {1}}和<ui:safehtml>)。

所以在你的情况下:

<ui:msg>

关于<ui:text><ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with> <g:ToggleButton ui:field="observeButton"> <g:upFace><ui:text from="{lang.observe}"/></g:upFace> <g:downFace>Observing</g:downFace> </g:ToggleButton> ,请参阅http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Text_Resourceshttp://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Html_Resources

答案 1 :(得分:0)

你可以使用这样的常量:

.ui.xml:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
<ui:with field="constants" type="my.client.resources.AppResources.AppConstants"/>

<g:FlowPanel>
  <g:Label text="{constants.label}"/>
</g:FlowPanel>

和AppResources界面:

public interface ApplicationResources extends ClientBundle {

public static final ApplicationConstants CONSTANTS = GWT.create(ApplicationConstants.class);

  public interface ApplicationConstants extends com.google.gwt.i18n.client.Constants {

    @DefaultStringValue("my label")
    String label();
  }
}

但对于i18n,你应该遵循GWT手册所说的,即那里 除了准备所有属性文件(每种语言一个)并生成所有必需的排列之外,没有其他(干净)方式。这主要是代表 到GWT所有与语言检测相关的东西,以及提供的解决方案 GWT在运行时表现很好。唯一的缺点是编译时间 更高一点(因为您将为您指定的每种语言的每个浏览器设置排列)。