在芬兰语的情况下,Java 是否错误地显示了 ISO 639-2 语言?

Is Java showing ISO 639-2 languages incorrectly in case of Finnish?

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

这是因为 "fin" 不是 Locale(String) 构造函数的语言参数的有效值。

根据 documentation,语言参数应该是(强调我的):

ISO 639 alpha-2 or alpha-3 language code, or registered language subtags up to 8 alpha letters (for future enhancements). When a language has both an alpha-2 code and an alpha-3 code, the alpha-2 code must be used. You can find a full list of valid language codes in the IANA Language Subtag Registry (search for "Type: language"). The language field is case insensitive, but Locale always canonicalizes to lower case.

因为芬兰语有一个 alpha-2 代码 ("fi"),所以这是您应该使用的,而不是 "fin"。否则,您实际上是在为某种默认语言环境(英语?)创建语言环境对象。