[英]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.