Internationalization 通过LabelLocator实现zk国际化

Internationalization 通过LabelLocator实现zk国际化,internationalization,zk,Internationalization,Zk,我正试图在我的项目中实现zk国际化。我已经查阅了所有文档并找到了以下信息: public class FooServletLocator implements org.zkoss.util.resource.LabelLocator { private ServletContext _svlctx; private String _name; public FooServletLocator(ServletContext svlctx, String name) {

我正试图在我的项目中实现zk国际化。我已经查阅了所有文档并找到了以下信息:

public class FooServletLocator implements org.zkoss.util.resource.LabelLocator {
    private ServletContext _svlctx;
    private String _name;
    public FooServletLocator(ServletContext svlctx, String name) {
        _svlctx = svlctx;
        _name = name;
    }
    public URL locate(Locale locale) {
        return _svlctx.getResource("/WEB-INF/labels/" + name + "_" + locale + ".properties");
    }
}
然后我应该通过代码调用此定位器:

Labels.register(LabelLocator2)
问题是我应该把这个代码行放在哪里,在我的viewmodel(我使用mvvm)或者其他地方调用定位器?我不明白:(

谢谢您的帮助!!!

关于ZK国际化的内容非常简单。您似乎还没有读过以下几段:

然后,我们可以在应用程序启动时使用WebAppInit注册标签定位器,如下所示

公共类MyAppInit实现org.zkoss.zk.ui.util.WebAppInit{
public void init(WebApp wapp)引发异常{
标签。寄存器(新的FoodLocator((“moduleX”);
标签。寄存器(新的食品定位器((“moduleY”);
Labels.register(新的FooServletLocator((ServletContext)wapp.getNativeContext(),“module-1”);
register(新的FooServletLocator((ServletContext)wapp.getNativeContext(),“module-2”);
}
}
其中,我们假设moduleX和moduleY是用于加载属性的数据库表,module-1.properties和module-2.properties是您提供的两个消息模块。然后,在WEB-INF/zk.xml中对其进行配置,如中所述


好的,谢谢。但我能通过combobox在页面上的不同定位器之间动态切换吗?我的意思是如何不为不同的语言编写html代码的相同部分,而只编写一个表达式,它将根据所选的语言命名。@SergeBud,当然。要访问i18n标签,请使用
标签
对象de>zul
文件或Java中的
Labels.getLabel(…)
。如果区域设置已更改,您可以调用
Labels.reset()
动态重新加载标签。请阅读同一文档中的更多详细信息。