【问题标题】:Android new Locale("en_US") and Locale.US are different?Android new Locale("en_US") 和 Locale.US 有什么不同?
【发布时间】:2013-12-05 09:51:08
【问题描述】:

我在针对常量值测试首选项中设置的语言环境时遇到了这个问题:

(new Locale("en_US")).equals(Locale.US) == false

查看详细信息时发现,new Locale("en_us") 返回一个语言代码为“en_us”的对象和一个零长度字符串的国家/地区代码,而Locale.US 返回一个语言代码为“en”的对象,并且国家代码“美国”。 Locale("en","US") 返回与 Locale.US 相同的结果,因此很容易避免此问题,但这是 Locale 构造函数的预期行为吗?

【问题讨论】:

  • 那是错误的构造函数。单个参数定义语言,en_US 与预期的 US 相比。如您所述,使用 Locale(String language, String country)。

标签: android


【解决方案1】:

语言环境构造函数按预期工作。您可以像这样比较语言环境对象:

(new Locale("en_US")).toString().equalsIgnoreCase((Locale.US).toString())

它会给你期望值

【讨论】:

  • getDefault() 返回一个动态值,我会避免这种情况,因为它肯定会在具有不同语言环境的设备上引发异常
  • @M.Bennett:谢谢,改进了我的回答
  • 谢谢。这可能也解释了为什么 new Locale("en_US") 会创建一个“有时”有效的语言环境,例如使用以这种方式测试特定语言环境的函数。
猜你喜欢
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2011-11-22
  • 2023-02-13
相关资源
最近更新 更多