[英]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())
只要确保您有一个包含所有文本的默认消息捆绑文件即可。 然后,您可以随翻译随便添加其他语言环境。
我也强烈建议您创建一个适用于所有请求的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.