Jsf 2 JSF2国际化示例
以该链接的JSF2国际化示例为起点: 我希望这个示例以实际选择的语言显示组合的语言 有人能告诉我怎么做吗Jsf 2 JSF2国际化示例,jsf-2,Jsf 2,以该链接的JSF2国际化示例为起点: 我希望这个示例以实际选择的语言显示组合的语言 有人能告诉我怎么做吗 谢谢 只需在静态变量国家/地区设置适当的标签即可: static { countries = new LinkedHashMap<String,Object>(); countries.put("English", Locale.ENGLISH); //label, value countries.put("Deutsch", Locale.GERMAN
谢谢 只需在静态变量
国家/地区设置适当的标签即可:
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
}
静态{
国家=新LinkedHashMap();
countries.put(“English”,Locale.English);//标签,值
countries.put(“Deutsch”,Locale.derman);
countries.put(“Français”,Locale.FRENCH);
//…根据需要填写其他语言/地区
}
您可以在此处获得更大的原始语言语言名称列表:
更新:根据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);
}
}
}
<h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
valueChangeListener="#{language.countryLocaleCodeChanged}">
<f:selectItems value="#{language.countriesInMap[language.localeCode]}" />
</h:selectOneMenu>
//为localeCode设置默认值
私有字符串localeCode=Locale.ENGLISH.toString();
// ...
静止的{
国家=新LinkedHashMap();
englishCountries=新建LinkedHashMap();
englishCountries.put(“English”,Locale.English);//标签,值
英语countries.put(“德语”,Locale.德语);
英语国家。put(“法语”,Locale.French);
countries.put(Locale.ENGLISH,ENGLISH countries);
germanCountries=新建LinkedHashMap();
germanCountries.put(“ENGLISH”,Locale.ENGLISH);
德国国家。put(“Deutsch”,Locale.derman);
germanCountries.put(“Französisch”,Locale.FRENCH);
countries.put(Locale.GERMAN,germanCountries);
frenchCountries=新LinkedHashMap();
法语国家。put(“盎格鲁语”,Locale.ENGLISH);
法语国家。put(“Allemand”,Locale.derman);
法语国家。put(“Français”,Locale.FRENCH);
countries.put(Locale.FRENCH,frenchCountries);
//…根据需要填写其他语言/地区
}
公共地图getCountriesInMap(){
返回国;
}
//从原始值更改侦听器的自适应值:
public void countryLocaleCodeChanged(ValueChangeEvent e){
字符串newLocaleValue=e.getNewValue().toString();
//循环国家/地区地图以比较区域设置代码
for(对象键:countries.keySet()){
if(key.toString().equals(newLocaleValue)){
FacesContext.getCurrentInstance().getViewRoot()
.setLocale((区域设置)键);
}
}
}
然后您可以选择用于selectItems的正确地图,如下所示:
// 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);
}
}
}
<h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
valueChangeListener="#{language.countryLocaleCodeChanged}">
<f:selectItems value="#{language.countriesInMap[language.localeCode]}" />
</h:selectOneMenu>
注意:不要忘记为语言.localeCode设置默认值,否则下拉列表将不会显示任何选项
但请注意,这可能不是一个可用性的好主意,因为一个错误地选择外语的用户可能很难回到一种已知的语言(这就是为什么在列表中用自己的语言列出语言名称是一个很好的做法)。也许我表达得不对。我希望selectOneMenu根据语言在所选语言环境中的命名方式显示相应的语言标签。例如,如果实际区域设置为en_en,德语应显示为“德语”,如果实际区域设置为de_de,德语应显示为“德语”。谢谢,好的!隐马尔可夫模型。。。你还需要一些地图。让我想出一个新的解决方案…我已经更新了我的答案,你需要做的改变是使用翻译语言名称。请注意我对这种方法可能引起的可用性问题的评论。你的可用性说明让我大开眼界。我会忘记我最初想要的方法,让事情保持原样。谢谢