如果是芬兰语,Java是否会错误地显示ISO 639-2语言?

时间:2016-01-13 14:59:53

标签: java locale

为什么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

1 个答案:

答案 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对象。