0

在我的应用程序中,我大约有 20 页,每个页面都有每种语言的大约 4 个属性文件。现在所有属性都必须与 *. java 文件。有没有可以改的选项?我想创建新的目录属性并在此处添加所有属性文件。或者是否可以选择在一个文件中添加所有本地化消息?问题是在页面 a.hmtl 属性中“name”的值为“a”,而在另一个页面 b.html 中具有相同的键另一个值:“name”值“b”

我尝试添加

        this.getResourceSettings().addResourceFolder("/properties");

但没有成功

4

3 回答 3

3

查看wicket-library上的示例。有几种不同的方法来归档它。我相信您会找到适合您需求的。

简短版本:为了获得最大控制,您必须编写自己的IResourceStreamLocator以及自己的IResourceStream并设置检票口以在 Application.init() 中使用它们。

于 2013-06-06T13:06:34.713 回答
2

现在所有属性都必须与 *. 文件

一点也不,属性文件不一定要紧挨着 java 文件。按照Wicket Free Guide中所述的默认查找算法扫描属性文件:

  1. ComponentStringResourceLoader:实现了大部分默认算法。它从容器层次结构、类层次结构和给定组件中跨包搜索给定资源。
  2. PackageStringResourceLoader:搜索包包。
  3. ClassStringResourceLoader:搜索给定类的包。默认情况下,目标类是应用程序类。
  4. ValidatorStringResourceLoader:在验证器的包中搜索资源。验证器列表由验证失败的表单组件提供。
  5. InitializerStringResourceLoader:此资源允许国际化与框架的初始化机制进行交互,这将在第 15.4 段中说明。

在第 12.4 章中阅读更多内容。

如果您想保持简单,我建议您为每种语言只使用一个属性文件。这些属性文件可能位于您的应用程序类旁边,例如

WicketApplication.properties.xml
WicketApplication_en.properties.xml
WicketApplication_zh.properties.xml
WicketApplication_de.properties.xml

此方法使您无需查看多个本地化文件,并避免源自复杂消息覆盖规则的错误。

于 2013-06-06T18:49:35.127 回答
1

我没有找到更简单的解决方案。我编写了自己的类,在其中更改了属性的路径:

package org.toursys.web.finder;

import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.locator.ResourceStreamLocator;

public class CustomResourceStreamLocator extends ResourceStreamLocator {

    @Override
    protected IResourceStream locateByClassLoader(Class<?> clazz, final String path) {
        String newPath = path;
        if (newPath.endsWith(".properties")) {
            newPath = path.substring(0, path.lastIndexOf("/")) + "/properties" + path.substring(path.lastIndexOf("/"));
        }
        IResourceStream stream = super.locateByClassLoader(clazz, newPath);
        if (stream == null) {
            stream = super.locateByClassLoader(clazz, path);
        }
        return stream;
    }

}

然后我将此流定位器添加到我的应用程序

于 2013-06-18T08:59:13.803 回答