2016-01-13 46 views
3

爲什麼Java在芬蘭語的情況下錯誤地顯示ISO 639-2語言代碼?通過ISO 639代碼,它提供了芬蘭語的正確語言名稱。在芬蘭語中,Java是否錯誤地顯示ISO 639-2語言?

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 

回答

4

這是因爲"fin"不是爲Locale(String)構造的語言論證的有效值。

根據該documentation,語言參數應該是(重點煤礦):

ISO 639α-2或α-3的語言代碼,或註冊語言子標記多達8個的α-字母(未來增強)。 當語言同時具有alpha-2代碼和alpha-3代碼時,必須使用alpha-2代碼。您可以在IANA語言子標籤註冊表中找到有效語言代碼的完整列表(搜索「類型:語言」)。語言字段不區分大小寫,但Locale總是規範化爲小寫。

因爲芬蘭有一個alpha-2碼("fi"),這是你應該用什麼,而不是"fin"。否則,您正在爲某種默認語言環境(英語?)有效地創建Locale對象。

+0

奇怪的是,它雖然在瑞典正確顯示。然後,'Locale'有很多問題。 – Kayaman

+0

不確定。我自己測試了一下,它顯示:'fi:suomi, fin:fin, sv:fin, en:fin',這對我很有意義。也許OP發佈的代碼片段並不完全對應於問題中顯示的輸出結果? – Grodriguez

+0

我得到與OP相同的輸出。免責聲明:我是芬蘭人。 – Kayaman