vincen 发表于 2017-1-18 06:23:05

tomcat国际化

tomcat在运行的过程中,不同的国家输出的信息(log信息)是不同的语言,通过以下方法做到的:
根据本地化对象来实现,它封装了适用于本地环境的资源。
tomcat将一些资源配置信息写入properties文件中,这样便于读取与编辑,如果将所有类的错误信息都写在一个properties文件,优惠导致文件太大,不便于读写。为避免这种情况,tomcat将properties文件按照不同的包进行划分,每个包下都有自己的properties文件。org.apache.catalina.connector包下的properties文件包含了该包下所有的类中可能抛出的错误与配置信息。每个properties文件都由一个org.apache.catalina.util.StringManager实例来处理。在tomcat运行时,会建立很多StringManager类的实例,每个实例对应一个properties文件。
在每个类需要查找某个配置的提示信息时,会先获取对应的StringManager实例。
eg:
StandardServer.java类来说(只贴出部分代码):

public static final String Package = "org.apache.catalina.core";
//上面的这个属性来自Constants.java类里
private static Hashtable managers = new Hashtable();
/**
* The string manager for this package.
*/
private static final StringManager sm =
StringManager.getManager(Constants.Package);
public synchronized static StringManager getManager(String
packageName) {
StringManager mgr = (StringManager)managers.get(packageName);
if (mgr == null) {
mgr = new StringManager(packageName);
managers.put(packageName, mgr);
}
return mgr;
}
private StringManager(String packageName) {
String bundleName = packageName + ".LocalStrings";
try {
bundle = ResourceBundle.getBundle(bundleName);
return;
} catch( MissingResourceException ex ) {

而在StandardServer.java类中是这样使用的,

public void start() throws LifecycleException {
// Validate and update our current component state
if (started) {
log.debug(sm.getString("standardServer.start.started"));
//根据这里的key值在资源文件中查找对应的value值,LocalStrings.properties资源文件中可以找到standardServer.start.started=This server has already been started配置项
return;
}
如果本地环境为日文系统,那么通过org.apache.catalina.startup.LocalStrings键值取得的资源是org.apache.catalina.startup.LocalStrings_ja.properties中的文件信息。
最后通过bundle.getString(key);方法,即可得到本地资源信息。


ResourceBundle.getBundle("config.page");使用方法得学习一下

项目中对日志内容等进行国际化管理。并且,日志内容用两个文件处理。

日志内容资源文件是Log.properties.
那么建立两个资源束分别处理这这个本地资源。
bundle = ResourceBundle.getBundle("Log.");
使用时,只需要添加不同的本地信息即可。例如:Log_ja.properties,Log_en.properties等
页: [1]
查看完整版本: tomcat国际化