有人可以告诉我为什么芬兰语的地方不起作用,剩下的就是吗?
private static Map<String,Object> countries;
private static Locale finnishLocale = new Locale("fi", "FI");
static{
countries = new LinkedHashMap<String,Object>();
countries.put("English", Locale.ENGLISH); //label, value
countries.put("French", Locale.FRENCH);
countries.put("German", Locale.GERMAN);
countries.put("Finnish", finnishLocale); <---------- Not working!
}
public void setLocaleCode(String localeCode) {
this.localeCode = localeCode;
updateLocale(localeCode);
}
public void updateLocale(String newLocale){
String newLocaleValue = newLocale;
//loop country map to compare the locale code
for (Map.Entry<String, Object> entry : countries.entrySet()) {
if(entry.getValue().toString().equals(newLocaleValue)){
FacesContext.getCurrentInstance()
.getViewRoot().setLocale((Locale)entry.getValue());
}
}
}
我的意思是我用New-clause创建的语言环境不起作用。我无法更好地解释它,因为我认为像这样实现的Locale类似于Locale-object而不是Locale.GERMAN?我的软件除了更新区域设置ja Faces上下文之外没有做任何其他事情。没有例外。对不起,如果q是愚蠢的。其他一切都在起作用,我的意思是德语,英语等,程序会更新语言环境和Faces上下文。
如果你回答这个问题,我将非常感激,我很遗憾(再次) 萨米
答案 0 :(得分:4)
您的updateLocale()
方法似乎是罪魁祸首。您将Locale#toString()
与newLocale
进行了比较。 Locale
常量只有语言集,而不是国家。例如Locale.ENGLISH.toString()
会返回"en"
而new Locale("fi", "FI").toString()
会返回"fi_FI"
。这只能意味着您的newLocale
变量实际上包含"en"
,"fr"
,"de"
和"fi"
。前三个匹配常量,但后者与finnishLocale
不匹配,因为您要与toString()
而不是getLanguage()
进行比较。
要解决您的问题, 更改
private static Locale finnishLocale = new Locale("fi", "FI");
到
private static Locale finnishLocale = new Locale("fi");
或,更好的是,将Map<String, Object>
更改为Map<String, Locale>
然后更改
if(entry.getValue().toString().equals(newLocaleValue)){
到
if(entry.getValue().getLanguage().equals(newLocaleValue)){
总而言之,这个地图循环相当笨拙。如果newLocale
是服务器端控制的值,则只需执行viewRoot.setLocale(new Locale(newLocale))
。
答案 1 :(得分:2)
在其他地方你有错误,因为这有效:
public class Runner01 {
private static Map<String,Object> countries;
private static Locale finnishLocale = new Locale("fi", "FI");
static{
countries = new LinkedHashMap<String,Object>();
countries.put("English", Locale.ENGLISH); //label, value
countries.put("French", Locale.FRENCH);
countries.put("German", Locale.GERMAN);
countries.put("Finnish", finnishLocale);
}
public static void main(String[] args) {
for( Map.Entry<String, Object> entry : countries.entrySet() ) {
System.out.println(entry.getKey() + "=>" + entry.getValue().toString());
}
}
}