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

时间:2017-05-29 15:26:11

标签: android internationalization

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

国家/地区代码是正确的,显示语言和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”的设备呢?那么对他们来说这将是错误的?

3 个答案:

答案 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()