2017-05-29 126 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

不知道,但更改区域也许可以打破像库的翻译功能的几件事情,所以不会尝试,如果没有大量的测试。但很高兴知道你可以做这样的事情,谢谢! –