Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Localization 如何在wicket中自定义属性文件夹_Localization_Wicket - Fatal编程技术网

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

Localization 如何在wicket中自定义属性文件夹,localization,wicket,Localization,Wicket,在我的应用程序中,我有大约20页,每一页有大约4个属性文件,每种语言。现在,所有属性都必须位于与is*相同的目录中。java文件。是否有选择改变?我想创建新的目录属性,并在这里添加所有属性文件。或者是否有在一个文件中添加所有本地化邮件的选项?问题是在a.hmtl页属性中“name”的值为“a”,而在另一个页面中,b.html的键与另一个值相同:“name”的值为“b” 我想补充一点 this.getResourceSettings().addResourceFolder("/pr

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

我想补充一点

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

但是没有成功

请看一下屏幕上的示例。有几种不同的方法来归档。我相信你会找到一个适合你需要的


简短版本:为了获得最大的控制权,您必须将自己的控件与自己的控件一起编写,并将wicket设置为在Application.init()中使用它们。

请查看上的示例。有几种不同的方法来归档。我相信你会找到一个适合你需要的

简短版本:为了获得最大的控制权,您必须将自己的控件与自己的控件一起编写,并将wicket设置为在Application.init()中使用它们

现在,所有属性都必须位于与is*相同的目录中。java文件

一点也不需要,属性文件不必紧挨着java文件。按照默认查找算法扫描属性文件,如中所述:

  • ComponentStringResourceLoader:实现大多数默认算法。它搜索 从容器层次结构、类层次结构和 给定组件
  • PackageStringResourceLoader:搜索包包包
  • ClassStringResourceLoader:搜索给定类的捆绑包。默认情况下,目标 类是应用程序类
  • ValidatorStringResourceLoader:在验证器的包中搜索资源。名单 验证程序由验证失败的表单组件提供
  • InitializerStringResourceLoader:此资源允许国际化与 将在第15.4段中说明的框架初始化机制
  • 请阅读第12.4章中的更多内容

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

    WicketApplication.properties.xml
    WicketApplication_en.properties.xml
    WicketApplication_zh.properties.xml
    WicketApplication_de.properties.xml
    
    此方法使您无需查看多个本地化文件,并避免了由复杂的消息覆盖规则引起的错误

    现在,所有属性都必须位于与is*相同的目录中。java文件

    一点也不需要,属性文件不必紧挨着java文件。按照默认查找算法扫描属性文件,如中所述:

  • ComponentStringResourceLoader:实现大多数默认算法。它搜索 从容器层次结构、类层次结构和 给定组件
  • PackageStringResourceLoader:搜索包包包
  • ClassStringResourceLoader:搜索给定类的捆绑包。默认情况下,目标 类是应用程序类
  • ValidatorStringResourceLoader:在验证器的包中搜索资源。名单 验证程序由验证失败的表单组件提供
  • InitializerStringResourceLoader:此资源允许国际化与 将在第15.4段中说明的框架初始化机制
  • 请阅读第12.4章中的更多内容

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

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

    这种方法使您无需查看多个本地化文件,并避免了由复杂的消息覆盖规则引起的错误。

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

    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;
        }
    
    }
    
    package org.toursys.web.finder;
    导入org.apache.wicket.util.resource.IResourceStream;
    导入org.apache.wicket.util.resource.locator.ResourceStreamLocator;
    公共类CustomResourceStreamLocator扩展了ResourceStreamLocator{
    @凌驾
    受保护的IResourceStream locateByClassLoader(类clazz,最终字符串路径){
    字符串newPath=path;
    if(newPath.endsWith(“.properties”)){
    newPath=path.substring(0,path.lastIndexOf(“/”)+“/properties”+path.substring(path.lastIndexOf(“/”);
    }
    IResourceStream=super.locateByClassLoader(clazz,newPath);
    if(流==null){
    stream=super.locateByClassLoader(clazz,path);
    }
    回流;
    }
    }
    

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

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

    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;
        }
    
    }
    
    package org.toursys.web.finder;
    导入org.apache.wicket.util.resource.IResourceStream;
    导入org.apache.wicket.util.resource.locator.ResourceStreamLocator;
    公共类CustomResourceStreamLocator扩展了ResourceStreamLocator{
    @凌驾
    受保护的IResourceStream locateByClassLoader(类clazz,最终字符串路径){
    字符串newPath=path;
    if(newPath.endsWith(“.properties”)){
    newPath=path.substring(0,path.lastIndexOf(“/”)+“/properties”+path.substring(path.lastIndexOf(“/”);
    }
    IResourceStream=super.locateByClassLoader(clazz,newPath);
    if(流==null){
    stream=super.locateByClassLoader(clazz,path);
    }
    回流;
    }
    }
    

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

    你的意思是没有.xml,对吗?但翻译应该取决于页面。在页面a.html中,名为“login”的键应与页面b.html中的键不同。是否有实现此功能的选项?Xml-p