このリンクの JSF2 国際化の例を出発点として取り上げます。
http://www.mkyong.com/jsf2/jsf-2-internationalization-example/
この例では、選択した実際の言語でコンボの言語を表示したいと考えています。
誰かがこれを行う方法を教えてもらえますか?
ありがとう!
このリンクの JSF2 国際化の例を出発点として取り上げます。
http://www.mkyong.com/jsf2/jsf-2-internationalization-example/
この例では、選択した実際の言語でコンボの言語を表示したいと考えています。
誰かがこれを行う方法を教えてもらえますか?
ありがとう!
静的変数に適切なラベルを設定するだけですcountries
:
static {
countries = new LinkedHashMap<String,Object>();
countries.put("English", Locale.ENGLISH); //label, value
countries.put("Deutsch", Locale.GERMAN);
countries.put("Français", Locale.FRENCH);
// ... fill in with additional languages/locales as needed
}
元の言語での言語名のより大きなリストは、http ://www.omniglot.com/language/names.htm で入手できます。
更新: OP のコメントによると、彼は言語名をすべての言語に翻訳する必要があります。そのために、次のように、言語マップのマップ (かなりの数のマップ) を作成するだけのソリューションを考え出すことができます。
// set a default value for localeCode
private String localeCode = Locale.ENGLISH.toString();
// ...
static {
countries = new LinkedHashMap<Object, <String,Object>>();
englishCountries = new LinkedHashMap<String,Object>();
englishCountries.put("English", Locale.ENGLISH); //label, value
englishCountries.put("German", Locale.GERMAN);
englishCountries.put("French", Locale.FRENCH);
countries.put(Locale.ENGLISH, englishCountries);
germanCountries = new LinkedHashMap<String,Object>();
germanCountries.put("Englisch", Locale.ENGLISH);
germanCountries.put("Deutsch", Locale.GERMAN);
germanCountries.put("Französisch", Locale.FRENCH);
countries.put(Locale.GERMAN, germanCountries);
frenchCountries = new LinkedHashMap<String,Object>();
frenchCountries.put("Anglais", Locale.ENGLISH);
frenchCountries.put("Allemand", Locale.GERMAN);
frenchCountries.put("Français", Locale.FRENCH);
countries.put(Locale.FRENCH, frenchCountries);
// ... fill in with additional languages/locales as needed
}
public Map<Object, <String,Object>> getCountriesInMap() {
return countries;
}
// adapted value change listener from original:
public void countryLocaleCodeChanged(ValueChangeEvent e){
String newLocaleValue = e.getNewValue().toString();
//loop country map to compare the locale code
for (Object key : countries.keySet()) {
if (key.toString().equals(newLocaleValue)) {
FacesContext.getCurrentInstance().getViewRoot()
.setLocale((Locale) key);
}
}
}
次に、selectItems に使用する適切なマップを次のように選択します。
<h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
valueChangeListener="#{language.countryLocaleCodeChanged}">
<f:selectItems value="#{language.countriesInMap[language.localeCode]}" />
</h:selectOneMenu>
注:の既定値を設定することを忘れないでください。そうしないlanguage.localeCode
と、ドロップダウンにオプションが表示されません。
ただし、誤って外国語を選択したユーザーは、既知の言語に戻るのに苦労する可能性があるため、これは使いやすさの点でおそらく良い考えではないことに注意してください(そのため、リストには、それぞれの言語の言語名があります)。