我们目前正在我们的应用程序中添加对第二语言的支持,并且我们将消息包加载到Session Scoped bean中,如此
bundle = ResourceBundle.getBundle(languageSetting.getLanguage().getPropertiesFileName(), new OurCustomBundleControl());
这允许我们像这样检索消息:
public String get(final String key) {
return bundle.getString(key);
}
languageSetting
变量是我们用来切换语言的类,它是通过页面上的控件完成的。
我们这样做有两个原因,首先我们需要通过覆盖Control类来使用非UTF-8字符(如建议here),我们也使用CDI来管理范围。 / p>
我们的假设是消息包类只能是会话作用域,因为不同的用户需要选择不同的语言,但是我们担心性能方面可能更适合使用应用程序作用域。
是否可以拥有带有Application范围的自定义资源包?是推荐吗?
我认为有可能以某种方式在faces-config
中指定消息包这是常用方法,但我们仍然需要覆盖Control
类。然后我们可以通过使用UIViewRoot#setLocale()
切换语言环境来切换语言。
另一种选择可能是拥有两个消息包,然后在get
方法中有一个条件语句?