为什么Java在使用芬兰语时错误地显示ISO 639-2语言代码?使用ISO 639代码,它以芬兰语提供正确的语言名称。
public static void main(String[] args) {
Locale fi = new Locale("fi");
Locale fin = new Locale("fin");
Locale en = new Locale("en", "EN");
Locale sv = new Locale("sv");
System.out.println("fi: " +fi.getDisplayLanguage(fi));
System.out.println("fin: " +fin.getDisplayLanguage(fi));
System.out.println("sv: " +fin.getDisplayLanguage(sv));
System.out.println("en: " +fin.getDisplayLanguage(en));
}
fi: suomi
fin: Finnish***?? Why this is in English, not in Finnish?
sv: Finska
en: Finnish
答案 0 :(得分:4)
这是因为"fin"
不是Locale(String)
构造函数的语言参数的有效值。
根据documentation,语言论证应该是(强调我的):
ISO 639 alpha-2或alpha-3语言代码,或注册语言子标签最多8个字母字母(用于将来的增强功能)。 如果某种语言同时包含alpha-2代码和alpha-3代码,则必须使用alpha-2代码 。您可以在IANA语言子标签注册表中找到有效语言代码的完整列表(搜索“类型:语言”)。语言字段不区分大小写,但Locale始终标准化为小写。
因为芬兰语有一个alpha-2代码("fi"
),所以你应该使用它,而不是"fin"
。否则,您实际上是为某种默认的Locale(英语?)创建Locale对象。