2

誰かが次の方法の何が悪いのか知っていますか?

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>
4

2 に答える 2

1

このバリアントは機能します (国と言語を分離します):

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-03T14:55:21.307 に答える
0

このバリエーションを試しましたか?

getMessageBundleString("home", "es")
getMessageBundleString("home", "en")
messages_es.properties:
home=Inicio
messages_en.properties:
home=Home
于 2013-01-03T12:25:55.927 に答える