由于项目是使用的maven模块化的项目,各个模块都分别打包成jar最终被web可部署项目依赖,由于项目中用过了spring messagesource 资源国际化,而messagesource在spring中的配置仅此一份,为了使资源文件可以动态指定,所以对ResourceBundleMessageSource进行了扩展。代码如下:
public class GapResourceBundleMessageSource extends ResourceBundleMessageSource {
@Override
public void setBasenames(final String ... basenames) {
List<String> list = new LinkedList<String>();
if (ArrayUtils.isNotEmpty(basenames)) {
for (String baseName : basenames) {
if (StringUtils.isNotEmpty(baseName)) {
if (baseName.contains(",")) {
String[] bases = baseName.split(",");
for (String base : bases) {
list.add(base);
}
} else {
list.add(baseName);
}
}
}
}
String[] bases = new String[list.size()];
list.toArray(bases);
list.clear();
list = null;
super.setBasenames(bases);
}
}
我们在配置文件中这样配置:
<bean id="messageSource" class="cn.evun.gap.core.spring.GapResourceBundleMessageSource">
<property name="basenames">
<list><value>${i18n.message}</value></list>
</property>
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
其中,i18n.message的格式为i18n.message=i18n/aaa,i18n/bbb,i18n/ccc...。
这样,我们就可以通过修改i18n.messsage的值来达到动态指定资源文件而无需去修改原生配置文件了
本文介绍了一种通过扩展Spring的ResourceBundleMessageSource实现国际化资源文件动态指定的方法。通过对基名进行扩展处理,支持逗号分隔的多个资源文件路径,并允许在运行时更改配置文件中的路径列表。


被折叠的 条评论
为什么被折叠?



