0
以作爲起點,這個環節的國際化JSF2例如:JSF2國際例如
http://www.mkyong.com/jsf2/jsf-2-internationalization-example/
我想這個例子中選擇的實際語言顯示連擊的語言。
有人能告訴我這是怎麼做到的嗎?
謝謝!
以作爲起點,這個環節的國際化JSF2例如: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
UPDATE:根據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
設置默認值,或下拉列表將不會顯示任何選項
請注意,這可能是不是是一個很好的可用性的想法,因爲錯誤地選擇一種外語的用戶可能很難爲她回到一種已知的語言(這就是爲什麼它是一個良好的做法,使列表中有各自的語言的語言名稱)。
也許我不表達自己的權利。我希望selectOneMenu根據所選語言環境中的名稱來顯示語言的標籤。 例如,如果實際區域設置爲en_EN,則應將德語顯示爲「德語」,如果實際區域設置爲de_DE,則應將德語顯示爲「Deutch」。謝謝 – webmeiker
哦,好吧!嗯...你會需要更多的地圖。讓我想出一個新的解決方案... – elias
我已經更新了我的答案,您需要使用已翻譯的語言名稱進行更改。請注意我對這種方法可能引發的可用性問題的評論。 – elias