这种情况发生在我们在印度尼西亚的所有设备上。
国家/地区代码是正确的,显示语言和ISO3似乎也是正确的:
Locale.getDefault().getISO3Country() // "IDN"
Locale.getDefault().getDisplayCountry() // "Indonesia"
Locale.getDefault().getCountry() // "ID"
Locale.getDefault().getISO3Language() // "ind"
Locale.getDefault().getDisplayLanguage() // "Bahasa Indonesia"
但是正常的语言代码是错误的,应该是“id”而不是“in”。然后android也生成了错误的language_COUNTRY标识符,应该是“id_ID”而不是“in_ID”:
Locale.getDefault().getLanguage() // "in"
Locale.getDefault().toString() // "in_ID"
这是一个已知问题吗?我们能做些什么呢?
氰化物建议只是覆盖语言环境,但是那些真正需要使用“in”而不是“id”的设备呢?那么对他们来说这将是错误的?
答案 0 :(得分:2)
嗯,找出原因,请参阅Android Locale Constructor Reference:
ISO 639不是一个稳定的标准;它定义的一些语言代码(特别是" iw"," ji"和"")已经改变。这个构造函数接受旧代码(" iw"," ji"和"")和新代码("他", " yi"和" id"),但Locale上的所有其他API都只返回OLD代码。
所以我们不能做太多,使用""在应用程序内部的字符串等,并将其转换为" id" (或作为id处理)与外部实体(如后端服务器)交谈时。
答案 1 :(得分: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());
}
}
然而,这不是真的可取;
答案 2 :(得分:0)
我有相同的经历,并且在Android Developer Site
中找到了参考如果要将旧语言代码(“ he”,“ yi”和“ id”)更改为新语言(“ iw”,“ ji”和“ in”),只需在下面使用此API < / p>
//kotlin
Locale.getDefault().toLanguageTag()