Android为印度尼西亚生成错误的语言代码?

Dan*_*own 3 android internationalization

这发生在我们在印度尼西亚拥有的所有设备上。

国家/地区代码正确,显示语言和 ISO3 似乎也正确:

Locale.getDefault().getISO3Country()     // "IDN"
Locale.getDefault().getDisplayCountry()  // "Indonesia"
Locale.getDefault().getCountry()         // "ID"
Locale.getDefault().getISO3Language()    // "ind"
Locale.getDefault().getDisplayLanguage() // "Bahasa Indonesia"
Run Code Online (Sandbox Code Playgroud)

但是正常的语言代码是错误的,应该是“id”而不是“in”。然后android也生成了错误的language_COUNTRY标识符,应该是“id_ID”而不是“in_ID”

Locale.getDefault().getLanguage()        // "in"
Locale.getDefault().toString()           // "in_ID"
Run Code Online (Sandbox Code Playgroud)

这是一个已知问题吗?我们对于它可以做些什么呢?

氰化物建议只覆盖语言环境,但是那些真正需要使用“in”而不是“id”的设备呢,那对他们来说是错误的呢?

Dan*_*own 6

好吧,找出它发生的原因,请参阅Android 区域设置构造函数参考

ISO 639 不是一个稳定的标准;它定义的一些语言代码(特别是“iw”、“ji”和“in”)已经改变。此构造函数接受旧代码(“iw”、“ji”和“in”)和新代码(“he”、“yi”和“id”),但 Locale 上的所有其他 API 将仅返回旧代码。

因此,我们无能为力,在应用程序内部使用“in”表示字符串等,并在与后端服务器等外部实体交谈时将其转换为“id”(或将 in 视为 id)。