我正在尝试在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中实现/维护国际化的正确方法吗?还是有更好的方法吗?
提前致谢。
答案 0 :(得分:4)
你不需要创建这个帮助类,因为java documentation已经为你在内存中缓存了包。这只会使您的代码更难维护。即每次添加新的“捆绑”时,您都必须更改代码。
只需将这样的代码添加到servlet和/或JSP中:
//request.getLocale() returns the web browsers locale
bundle = ResourceBundle.getBundle("MessagesBundle",request.getLocale())
确保您拥有包含所有文字的默认邮件包文件。然后,您可以随意添加额外的区域设置,以便进行翻译。
我还强烈建议您创建一个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);