2017-05-29 127 views
0

這是發生在所有我們在印尼的所有設備。Android爲印度尼西亞生成錯誤的語言代碼?

的國家代碼是正確的,也顯示語言和ISO3似乎正確:

Locale.getDefault().getISO3Country()  // "IDN" 
Locale.getDefault().getDisplayCountry() // "Indonesia" 
Locale.getDefault().getCountry()   // "ID" 
Locale.getDefault().getISO3Language() // "ind" 
Locale.getDefault().getDisplayLanguage() // "Bahasa Indonesia" 

但正常的語言編碼是錯誤的,應該是「ID」,而不是「在」。然後,機器人也產生錯誤的LANGUAGE_COUNTRY標識,應該是「id_ID」,而不是「in_ID」

Locale.getDefault().getLanguage()  // "in" 
Locale.getDefault().toString()   // "in_ID" 

這是一個已知的問題?我們對於它可以做些什麼呢?

氰化物建議只是覆蓋區域,但對於誰真正需要「在」使用的設備,而不是「ID」,那就錯了一個爲他們呢?

回答

2

嗯,找到了原因它發生,看到Android Locale Constructor Reference

ISO 639不是一個穩定的標準;它定義的一些語言代碼(特別是「iw」,「ji」和「in」)已經改變。該構造函數接受兩個舊代碼(「IW」,「吉」,和「」)和新代碼(「他」,「義」和「ID」),但在語言環境的所有其他API將只返回舊代碼。

所以沒有太多說話像後端外部實體時,我們能做到「在」使用應用程序的字符串等內,將其轉換爲「身份證」(或治療如ID)服務器。

+0

這取決於後端服務器使用什麼:-)如果是Java,他們也會期待「in」。 Java仍然使用遺留代碼,這也是Android使用它們的原因:與官方JDK的兼容性。 –

+0

後端在node.js中,但好點!儘管我認爲我讀構造函數接受了新代碼,但只有在詢問時纔會返回舊代碼的兼容性。會說現在是支持locale lib的時候了。 :p –

1

您的設備上檢查語言設置。如果沒問題,那麼你的系統是狡猾的,所以你可以嘗試升級它。事實上,配置可以被推崇地改變

public void updateLocale(Resources rsrc) { 
     Configuration conf = rsrc.getConfiguration(); 
     Locale locale = conf.locale; 
     if (locale.getCountry().equals("ID") && locale.getLanguage().equals("in")) { 
      conf.locale = new Locale("id", "ID"); 
      rsrc.updateConfiguration(conf, rsrc.getDisplayMetrics()); 
    } 
    } 

然而,它並不是真的可取;

+0

嗯,它不僅是我的系統,我們有數以千計的「在」語言代碼,沒有用正確的「ID」語言代碼錯誤報告設備的,所以似乎在android系統本身就是一個問題。如果你在Android Studio中創建一個翻譯文件,它也會使用錯誤的「in」來創建資源文件夾「values-in」而不是「values-id」。 –

+0

不知道,但更改區域也許可以打破像庫的翻譯功能的幾件事情,所以不會嘗試,如果沒有大量的測試。但很高興知道你可以做這樣的事情,謝謝! –