有人知道下一个方法有什么问题吗?
public static String getMessageBundleString(String key, String localeAcronym) throws MissingResourceException {
FacesContext facesContext = FacesContext.getCurrentInstance();
String messageBundleName = facesContext.getApplication().getMessageBundle();
ResourceBundle bundle = ResourceBundle.getBundle(messageBundleName, new Locale(localeAcronym));
//THE LOCALE OF THIS BUNDLE IS ALWAYS 'es_ES' !!!
return bundle.getString(key);
}在Primefaces/JSF环境中,我希望从正确的i18n属性文件中检索密钥。
但是它总是从messages_es_ES.properties文件中获取。
以下调用返回相同的值 (='Inicio'):
getMessageBundleString("home", "es_ES")
getMessageBundleString("home", "uk_UK")
messages_es_ES.properties:
home=Inicio
messages_uk_UK.properties:
home=Home谢谢
下面是我的一些faces-config.xml内容:
<application>
<locale-config>
<supported-locale>es_ES</supported-locale>
<supported-locale>uk_UK</supported-locale>
</locale-config>
<message-bundle>cfg.i18n.messages</message-bundle>
<resource-bundle>
<base-name>cfg.i18n.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>发布于 2013-01-03 14:55:21
这一备选案文起作用(将国家和语言分开):
public static String getMessageBundleString(String key, String language, String country) throws MissingResourceException {
FacesContext facesContext = FacesContext.getCurrentInstance();
String messageBundleName = facesContext.getApplication().getMessageBundle();
ResourceBundle bundle = ResourceBundle.getBundle(messageBundleName, new Locale(language, country));
//Valid ones: "es","ES"; "en","GB"!!!
return bundle.getString(key);
}发布于 2013-01-03 12:25:55
你试过这种变体了吗?
getMessageBundleString("home", "es")
getMessageBundleString("home", "en")
messages_es.properties:
home=Inicio
messages_en.properties:
home=Homehttps://stackoverflow.com/questions/14138694
复制相似问题