我想模仿Grails解决i18n消息的方式。
在WEB-INF / i18n /中,我具有以下目录:
管理员 /messages_EN.properties
管理员 /messages_FR.properties
网站 /messages_ZH.properties
网站 /messages_FR.properties
在此示例中,请忽略语言结尾(EN和FR)
在我的xml配置中,我目前有:
<!-- Register the welcome.properties -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="utf-8" />
<property name="basename" value="/WEB-INF/i18n/" />
</bean>
我在这里寻找的是一种告诉Spring在i18n下查找.properties文件的方法,但没有明确告诉它每个子目录是什么。这是 没有 一个
列表 的 基本名称 ,它指向 / WEB-INF / i18n中/管理/ 和 / WEB-INF / i18n中/网站/
我希望WEB-INF / i18n /目录是动态的,并且可以创建捆绑包(目录),而无需重新修改xml配置文件。
我不是想用admin和website子目录来解决这个特定的例子
这可能吗?
谢谢!
解决方法如下:
package com.mypackage.core.src;
import java.io.File;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
public class UnderDirectoryReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource {
@Autowired
ServletContext servletContext;
public void setWorkingDirectory(String directoryPath) {
File rootDir = new File( servletContext.getRealPath(directoryPath) );
ArrayList<String> baseNames = new ArrayList<String>();
iterateScanDirectoryAndAddBaseNames(baseNames, rootDir);
setBasenames(baseNames.toArray(new String[baseNames.size()]));
}
private void iterateScanDirectoryAndAddBaseNames(ArrayList<String> baseNames, File directory) {
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
iterateScanDirectoryAndAddBaseNames(baseNames, file);
} else {
if (file.getName().endsWith(".properties")) {
String filePath = file.getAbsolutePath().replaceAll("\\\\", "/").replaceAll(".properties$", "");
filePath = filePath.substring(filePath.indexOf("/WEB-INF/"), filePath.length());
baseNames.add(filePath);
System.out.println("Added file to baseNames: " + filePath);
}
}
}
}
}
XML配置:
<bean id="messageSource" class="com.mypackage.core.src.UnderDirectoryReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="utf-8" />
<property name="workingDirectory" value="/WEB-INF/webspring/i18n" />
<property name="cacheSeconds" value="3" />
<property name="fallbackToSystemLocale" value="false" />
</bean>
请享用!
exVim 的配色由三部分组成: 你自己的Vim配色, exVim 插件的语法高亮和插件的配色. 你可以按照以下步骤来定制你的配色: 安装你的配色 exVim 提供了三种方法安装你的自定义配色 方法1. 在 ex-colorscheme 中安装(推荐) 首选的方法是在 ex-colorschemes 中安装自己的配色, 这种方法仅仅需要你把自己的配色文件放到 vimfiles/bundle/ex-
目录: 在配置项目yml文件中: 问题: null 客户端YML: 有没有人知道我怎样才能在这两种情况下只带一个配置文件?
丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!
Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。 在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,这全是因为有了 codec 设置。 所以,这里需要纠正之前的一个概念。Logstash 不只是一个input | filter | outpu
在 “Hello World” 示例中,我们已经见到并介绍了 logstash 的运行流程和配置的基础语法。从这章开始,我们就要逐一介绍 logstash 流程中比较常用的一些插件,并在介绍中针对其主要适用的场景,推荐的配置,作一些说明。 限于篇幅,接下来内容中,配置示例不一定能贴完整。请记住一个原则:Logstash 配置一定要有一个 input 和一个 output。在演示过程中,如果没有写明
根据文档--不管应用程序名称如何,如果模式与*/development(即localhost:8888/user/development或localhost:8888/demo/development)匹配,配置服务器应该匹配配置文件模式并获取适当的属性。例如:http://localhost:8888/demo/development我应该从ssh://git@xxxgithub.com/dev