繁体   English   中英

Tomcat国际化维护

[英]Tomcat internationalization maintenance

我正在尝试在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()。 在雄猫中实现/保持国际化的正确方法吗? 还是有更好的方法?

提前致谢。

您不需要制作此帮助程序类,因为根据Java文档 ,捆绑包已经为您缓存在内存中。 这只会使您的代码维护更加复杂。 即,每次添加新的“捆绑包”时,您都必须更改代码。

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

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

只要确保您有一个包含所有文本的默认消息捆绑文件即可。 然后,您可以随翻译随便添加其他语言环境。

UTF-8支持

我也强烈建议您创建一个适用于所有请求的Servlet过滤器,以确保为输出的html和发回应用​​程序的表单响应的解析都打开了UTF-8:

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

在知道i18n速度太慢之前,我不会进行优化。

但是,如果我沿着您的道路前进,而不是使用标量ResourceBundles,我会将ResouceBundles放入地图中。 现在,您的代码可以使用任何知道语言环境的捆绑软件-无论如何您都必须选择适当的ResourceBundle。

如果您的代码没有if locale is this, use English 相反,它将是myResourceBundle = bundleMap.get(myLocale);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM