1. 准备三个资源文件i3-label.properties、i3-label_en_US.properties、i3-label_zh_CN.properties,将资源文件放在WEB-INF目录下。
i3-label.properties:
i3-label.properties:
title=Greeting
msg=Hello, {0}\!
i3-label_en_US.properties:
title=Greeting
msg=Hello, {0}\!
i3-label_zh_CN.properties:
title=问候
msg=你好,{0}!
2. 在zul页面中添加taglib指令:
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>
3. 有三种方式可以使用国际化资源:
EL表达式内置对象labels:<label value="${labels.title}" />
标签库c:l('key'):
<label value="${c:l('title')}" />
Java代码中用org.zkoss.util.resource.Labels对象实例获取:
String title = Labels.getLabel("title");
String msg = Labels.getLabel("msg", new String[]{"Huey"});
4. 修改 Locale:
Locale locale = new Locale("zh", "CN");
session.setAttribute(org.zkoss.web.Attributes.PREFERRED_LOCALE, locale);
5. 示例:
<?page title="Hello I18N" contentType="text/html;charset=UTF-8"?>
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>
<zk>
<zscript><![CDATA[
String[] name = new String[] {"Huey"};
]]></zscript>
<window title="Hello I18N" border="normal">
<vbox>
<hbox>
<radiogroup id="rg">
<attribute name="onCheck"><![CDATA[
String localeValue = self.getSelectedItem().getValue();
Locale preferLocale = localeValue.length() > 2 ?
new Locale(localeValue.substring(0,2),localeValue.substring(3)) : new Locale(localeValue);
// 修改Locale
session.setAttribute(org.zkoss.web.Attributes.PREFERRED_LOCALE, preferLocale);
session.setAttribute("Demo_Locale", self.getSelectedIndex());
execution.sendRedirect("");
]]></attribute>
<radio label="English" value="en_US" />
<radio label="Chinese" value="zh_CN" checked="true" />
</radiogroup>
</hbox>
<!-- Use labels -->
<label value="${labels.title}" />
<!-- Use c:l('key') -->
<label value="${c:l('title')}" />
<!-- Use c:l2('key') to format the message -->
<label value="${c:l2('msg', name)}" />
</vbox>
<zscript><![CDATA[
if (session.getAttribute("Demo_Locale") != null)
rg.setSelectedIndex(Integer.parseInt(session.getAttribute("Demo_Locale").toString()));
]]></zscript>
</window>
</zk>