国際化の可用性を設定しようとしている魔女にアプリケーションがあります。
これは私の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>
3 つのプロパティ ファイルがあります。
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_lt.properties ではなく application_en.properties から読み込まれるのはなぜですか?
2番目の問題:
commandLink アクションを実行すると、選択したロケールに応じてロケールが変わります。ただし、アクションの実行はワンクリックで、アプリケーションの他のリンクを 2 回クリックしても問題ありません。アプリケーションのリンクを 3 回クリックすると、テキスト値が application_en.properties から検索されます。どうやらロケールが変わるようです...
何か案は?