簡體   English   中英

國際化JSF 2.0

[英]Internationalization JSF 2.0

我有一個女巫的應用程序我試圖設置國際化可用性。

這是我的faces-config.xml:

<application>
    <locale-config>
        <default-locale>lt</default-locale>
        <supported-locale>en</supported-locale>
        <supported-locale>de</supported-locale>
    </locale-config>
    <resource-bundle>
        <base-name>application</base-name>
        <var>msg</var>
    </resource-bundle>
</application>

我有三個屬性文件:

application_lt.properties
application_en.properties
application_de.properties

bean類:

@ManagedBean(name = Beans.LOCALE_BEAN)
@SessionScoped
public class LocaleBean extends BaseBean implements Serializable {

    private String lang;

    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }
}

動作類:

@ManagedBean(name = "localeAction")
@SessionScoped
public class LocaleAction extends BaseAction implements Serializable {

    public void changeLocale() {
        LocaleBean localeBean = getBean(Beans.LOCALE_BEAN);
        String language = localeBean.getLang();
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
    }

}

要更改語言環境,我使用的是commandLink:

<h:commandLink action="#{localeAction.changeLocale}">
    <f:setPropertyActionListener target="#{localeBean.lang}" value="en"/>
    English
</h:commandLink>

<h:commandLink action="#{localeAction.changeLocale}">
    <f:setPropertyActionListener target="#{localeBean.lang}" value="lt"/>
    Lithuanian
</h:commandLink>

第一個問題:

我已經定義了我的默認語言環境是“lt”:lt。 為什么我啟動應用程序文本時從application_en.properties加載而不是從application_lt.properties加載?

第二個問題:

當我執行commandLink操作時,語言環境會根據我選擇的語言環境而改變。 但是執行該操作只需單擊一下,第二次單擊應用程序的任何其他鏈接也是正常的,當我第三次單擊任何應用程序鏈接時,文本值將從application_en.properties中找到。 看來locale以某種方式改變了......

有任何想法嗎?

這顯然是因為你的瀏覽器識別其自己的語言環境en被作為首選區域Accept-Language請求頭。 然后JSF將自動使用它,因為它是受支持的語言之一。 您需要在瀏覽器的設置中更改首選語言。


顯然你改變了觀點。 您的操作方法僅更改當前視圖的區域設置。 您需要確保在主模板的<f:view>或至少所有視圖中設置LocaleBean的語言環境。

<f:view locale="#{localeBean.lang}">

也可以看看:

第一個問題當涉及到語言環境時,JSF正在讀取客戶端瀏覽器HTTP Accept-Language標頭並使用最喜歡的語言環境。 如果應用程序不支持它(faces-config設置),那么它使用來自HTTP頭等的第二個最喜歡的語言環境。如果應用程序不支持客戶端首選語言環境,那么faces-config.xml中的默認語言環境用來。 因此,可能會忽略faces-config.xml中的默認語言環境。

因此,您的客戶端瀏覽器似乎可以在HTTP Accept-Language標頭中發送英語區域設置。

第二個問題。 發生這種情況是因為每個請求都設置了默認語言環境,而不是每個用戶會話。 看看這個問題 ,看看如何克服這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM