在我的应用程序中我有大约20页,每页有大约4个属性文件用于每种语言。现在所有属性都必须与*相同。 java文件。是否可以选择更改?我想创建新的目录属性,这里添加所有属性文件。或者是否可以选择在一个文件中添加所有本地化的消息?问题是在页面中a.hmtl属性“name”具有值“a”而在另一个页面中b.html具有相同的键另一个值:“name”value“b”
我尝试添加
this.getResourceSettings().addResourceFolder("/properties");
但没有成功
答案 0 :(得分:3)
查看wicket-library上的示例。有几种不同的方法可以实现这一目标。我相信你会找到一个适合你需求的产品。
简短版本:为了获得最大程度的控制,您必须自己编写IResourceStreamLocator以及自己的IResourceStream并设置wicket以在Application.init()中使用它们。
答案 1 :(得分:2)
现在所有属性都必须与*相同。 java文件
完全没有,属性文件不一定需要在java文件的旁边。按照默认查找算法扫描属性文件,如Wicket Free Guide:
中所述
- ComponentStringResourceLoader:实现大部分默认算法。它搜索 来自容器层次结构,类层次结构和来自的容器中的给定资源 给定的组件。
- PackageStringResourceLoader:搜索包捆绑包。
- ClassStringResourceLoader:搜索给定类的包。默认情况下是目标 class是应用程序类。
- ValidatorStringResourceLoader:将资源搜索到验证器的包中。的列表 验证失败的表单组件提供验证程序。
- InitializerStringResourceLoader:此资源允许国际化与之交互 框架的初始化机制将在第15.4段中说明。
醇>
在第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;
}
}
然后我将此流定位器添加到我的应用