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

如果是芬兰语,Java是否错误地显示了ISO 639-2语言?,java,locale,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");

为什么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”
不是
区域设置(字符串)
构造函数的语言参数的有效值

根据,语言论点应该是(我的重点):

ISO 639 alpha-2或alpha-3语言代码或注册语言子标签最多包含8个字母(用于将来的增强)当一种语言同时具有alpha-2代码和alpha-3代码时,必须使用alpha-2代码。您可以在IANA语言子标签注册表中找到有效语言代码的完整列表(搜索“类型:语言”)。language字段不区分大小写,但Locale始终规范化为小写


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

奇怪的是,它在瑞典语中显示正确。再说一次,
Locale
有很多问题。对此我不确定。我自己测试过,结果显示:
fi:suomi,fin:fin,sv:fin,en:fin
,这对我来说很有意义。也许OP发布的代码片段与问题中显示的输出不完全一致?我得到的输出与OP相同。免责声明:我是芬兰人。嗯,那么我不确定内部发生了什么,但无论如何,Javadocs明确指出,如果alpha-2和alpha-3代码都存在,则应使用alpha-2代码。嗯,我假设我们在Java安装中有不同的语言环境信息。但你的答案仍然有效,特别是考虑到这一额外的差异。