以编程方式设置语言标签

时间:2015-05-28 07:52:43

标签: zk

在渲染组件后,我无法以编程方式设置带有语言规范的标签。我有以下内容:

public class DateFilterWidget extends Div implements IdSpace {
private static final long serialVersionUID = 1L;

@Wire
Datebox startDate, endDate;

@Wire
Button filterButton;

@Wire
Label datefilterLabel;

String field;

public DateFilterWidget(String name, String filterField) {
    Executions.createComponents("widgets/datefilter.zul", this, null);
    Selectors.wireComponents(this, this, false);
    Selectors.wireEventListeners(this, this);
    datefilterLabel.setValue("${labels.data.dateFilterButton.label}");

    this.field = filterField;
}
}

和datefilter.zul

<hbox sclass="filterWidgetBox" align="center">
        <label id="datefilterLabel" />
        <datebox id="startDate" format="yyyy-MM-dd" 
            weekOfYear="true" width="105px"/>
        <label value="-" />
        <datebox id="endDate" format="yyyy-MM-dd" 
            weekOfYear="true" width="105px"/>
        <button id="filterButtonc"
            label="${labels.data.dateFilterButton.label}" />
</hbox>

我在上面的情况下,按钮和标签都使用了相同的标签。按钮语言参考工作正常,但以编程方式获取值的标签不起作用。

我知道我可以使用Labels.getLabel(&#34; data.dateFilterButton.label&#34;),但是这个解决方案消除了更新语言的可能性,除非使用新语言重新呈现整个应用程序。

2 个答案:

答案 0 :(得分:1)

label="${labels...}"是静态EL,只有在解析zul文件后才会被评估,并且与调用setLabel(Labels.get(Labels.getLabel(...)))具有相同的效果。

  

按钮语言参考正常

我真的不明白你的意思。当我使用Labels.getLabel(...)运行您的示例时,它按预期工作,在当前语言环境中设置两个标签。在运行时更改语言环境,例如来自EN - &gt; DE没有标签自动更新,两个组件都需要重新渲染,然后才能正确更新。

要提供解决方案,您能详细说明您的预期吗?或者你想要实现的目标:

  

此解决方案消除了更新语言的可能性,除非使用新语言重新呈现整个应用程序

&#34;更新&#34;可以有几个含义,但还不清楚。

罗伯特

答案 1 :(得分:-1)

要以编程方式设置值,您应该使用zk api的类标签。 你可以点击这里看到javadoc: Labels

并使用方法getLabel。 例如:

datefilterLabel.setValue(Labels.getLabel("data.dateFilterButton.label");

如果这是正确的标签密钥。