Tomcat国际化维护

时间:2010-10-07 01:14:31

标签: java tomcat internationalization

我正在尝试在Tomcat中实现国际化。将有不同的资源文本文件。我的想法是在tomcat加载时将所有资源加载到内存中。 下面是将多个资源加载到内存中的示例代码。

public class ResourceBundleLoader {


    private static ResourceBundle enResourceBundle;
    private static ResourceBundle frResourceBundle;

    public static void loadBundle(){
        Locale enLocale = new Locale("en", "US");
        enResourceBundle = ResourceBundle.getBundle("MessagesBundle",enLocale);
        enLocale = new Locale("fr", "FR");
        frResourceBundle = ResourceBundle.getBundle("MessagesBundle",enLocale);
    }

    public static ResourceBundle getEnResourceBundle(){
        return enResourceBundle;
    }

    public static ResourceBundle getFrResourceBundle(){
        return frResourceBundle;
    }
}

通过启动servlet调用loadBundle方法。并相应地调用getEnResourceBundle()和getFrResourceBundle()。这是在tomcat中实现/维护国际化的正确方法吗?还是有更好的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

你不需要创建这个帮助类,因为java documentation已经为你在内存中缓存了包。这只会使您的代码更难维护。即每次添加新的“捆绑”时,您都必须更改代码。

只需将这样的代码添加到servlet和/或JSP中:

//request.getLocale() returns the web browsers locale
bundle = ResourceBundle.getBundle("MessagesBundle",request.getLocale())

确保您拥有包含所有文字的默认邮件包文件。然后,您可以随意添加额外的区域设置,以便进行翻译。

UTF-8支持

我还强烈建议您创建一个servlet过滤器,该过滤器适用于所有请求,这些请求确保为输出的html打开UTF-8,并解析发布回应用程序的表单响应: / p>

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

答案 1 :(得分:0)

在我知道i18n太慢之前我不会优化。

但如果我沿着你的路走下去,而不是使用标量ResourceBundles,我会把ResouceBundles放到Map中。现在你的代码可以使用知道语言环境的任何包 - 无论如何你必须选择适当的ResourceBundle。

您的代码不会有任何if locale is this, use English。相反,它将是myResourceBundle = bundleMap.get(myLocale);