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等

猜你喜欢

转载自houshangxiao.iteye.com/blog/1599418