0

ローカリゼーションの奇妙な動作に直面しています。アプリには英語とスロバキア語の 2 つの言語があります。私のローカル Glassfish では、ロケールの切り替えが完全に機能します。しかし、Jelastic Glassfish にデプロイされた同じアプリケーションは常に英語です。ロケールの切り替えが機能しません。リモートアプリをデバッグし、facescontext (FacesContext.getCurrentInstance().getViewRoot().getLocale() および FacesContext.getCurrentInstance().getExternalContext().getRequestLocale()) は正しい sk ロケールを返しますが、ページはまだ英語です. 言語メニューではスロバキア語 (第 2 オプション) が選択されています!

両方の Glassfish はバージョン 3.1.2.2 であり、Mojarra 2.2.7 および Primefaces 5.0 があり、JDK7 で実行されます。ローカル GF は Win7 で実行され、リモートは Linux (CentOS?) で実行され、クラスター化されています (これが理由でしょうか?)

顔-conf.xml

<locale-config>
  <default-locale>en</default-locale>
  <supported-locale>sk</supported-locale>
</locale-config>
<resource-bundle>
  <base-name>Bundle</base-name>
  <var>bundle</var>
</resource-bundle>

login.xhtml

<f:view locale="#{loginBean.locale}">
  ...
  <p:outputLabel value="#{bundle.language}: "/>
  <p:selectOneMenu value="#{loginBean.language}" id="loginLocale">
    <f:selectItem itemValue="en" itemLabel="English" />
    <f:selectItem itemValue="sk" itemLabel="Slovensky" />
    <p:ajax update="@all"/>
  </p:selectOneMenu>
  ...
</f:view>

LoginBean.java

@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable{

  private Locale locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
  ...
  public Locale getLocale() {
    return locale;
  }

  public String getLanguage() {
    return locale.getLanguage();
  }

  public void setLanguage(String language) {
    locale = new Locale(language);
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
  }
}

助けてくれてありがとう

ミハル

4

1 に答える 1

1

解決策を見つけましたが、なぜそれが起こるのかわかりません。スロバキア語のバンドル ファイルの名前は Bundle_sk_SK.properties でしたが、名前を Bundle_sk.properties に変更したところ、動作するようになりました。

ミハル

于 2014-09-18T22:38:23.280 に答える