如何在wicket中自定义属性文件夹

时间:2013-06-06 12:20:10

标签: localization wicket

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

我尝试添加

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

但没有成功

3 个答案:

答案 0 :(得分:3)

查看wicket-library上的示例。有几种不同的方法可以实现这一目标。我相信你会找到一个适合你需求的产品。

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

答案 1 :(得分:2)

  

现在所有属性都必须与*相同。 java文件

完全没有,属性文件不一定需要在java文件的旁边。按照默认查找算法扫描属性文件,如Wicket Free Guide

中所述
  
      
  1. ComponentStringResourceLoader:实现大部分默认算法。它搜索   来自容器层次结构,类层次结构和来自的容器中的给定资源   给定的组件。
  2.   
  3. PackageStringResourceLoader:搜索包捆绑包。
  4.   
  5. ClassStringResourceLoader:搜索给定类的包。默认情况下是目标   class是应用程序类。
  6.   
  7. ValidatorStringResourceLoader:将资源搜索到验证器的包中。的列表   验证失败的表单组件提供验证程序。
  8.   
  9. InitializerStringResourceLoader:此资源允许国际化与之交互   框架的初始化机制将在第15.4段中说明。
  10.   

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

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

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

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

答案 2 :(得分: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;
    }

}

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