以编程方式设置语言标签
Set language label programmatically
我在呈现组件后以编程方式设置具有语言规范的标签时遇到问题。我有以下内容:
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("data.dateFilterButton.label"),但此解决方案消除了更新语言的可能性,除非使用新语言重新呈现整个应用程序。
要以编程方式设置值,您应该使用 zk api 的 class 标签。
您可以单击此处查看 javadoc:
Labels
并使用方法getLabel。
示例:
datefilterLabel.setValue(Labels.getLabel("data.dateFilterButton.label");
如果这是正确的标签键。
label="${labels...}"
是一个静态 EL,只有在解析 zul 文件后才会被评估,与调用 setLabel(Labels.get(Labels.getLabel(...)))
.
具有相同的效果
The button language reference works fine
我不太明白你的意思。当我 运行 你的例子使用 Labels.getLabel(...)
它按预期工作,在当前语言环境中设置两个标签。在 运行 时间内更改语言环境时,例如来自 EN -> DE none 的标签自动更新,两个组件都需要重新渲染然后正确更新。
为了提供解决方案,您能否详细说明您期望发生的情况?或者您想要实现的目标:
this solution removes the possibility to update language unless the whole application is re-rendered with the new language
"Update"可以有多种含义,只是目前还不清楚。
罗伯特
我在呈现组件后以编程方式设置具有语言规范的标签时遇到问题。我有以下内容:
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("data.dateFilterButton.label"),但此解决方案消除了更新语言的可能性,除非使用新语言重新呈现整个应用程序。
要以编程方式设置值,您应该使用 zk api 的 class 标签。 您可以单击此处查看 javadoc: Labels
并使用方法getLabel。 示例:
datefilterLabel.setValue(Labels.getLabel("data.dateFilterButton.label");
如果这是正确的标签键。
label="${labels...}"
是一个静态 EL,只有在解析 zul 文件后才会被评估,与调用 setLabel(Labels.get(Labels.getLabel(...)))
.
The button language reference works fine
我不太明白你的意思。当我 运行 你的例子使用 Labels.getLabel(...)
它按预期工作,在当前语言环境中设置两个标签。在 运行 时间内更改语言环境时,例如来自 EN -> DE none 的标签自动更新,两个组件都需要重新渲染然后正确更新。
为了提供解决方案,您能否详细说明您期望发生的情况?或者您想要实现的目标:
this solution removes the possibility to update language unless the whole application is re-rendered with the new language
"Update"可以有多种含义,只是目前还不清楚。
罗伯特