【问题标题】:Android 7.0 Nougat picks up default strings when device language is en_US当设备语言为 en_US 时,Android 7.0 Nougat 会选择默认字符串
【发布时间】:2016-12-01 09:11:57
【问题描述】:

根据Language and Locale 中的文档,从 Android 7.0(API 级别 24)开始对资源解决策略进行了改进,下表易于理解: Improved Resource-Resolution strategy

根据我的要求,我希望我的应用的默认语言为 en_US。因此,我没有为 en_US 提供单独的资源。我也有单独的 en_GB 资源。

现在,根据解析策略,如果我的设备的语言是 en_US,那么它应该查找资源的顺序是 en_US -> en -> en_GB -> default 这意味着 en 的所有语言环境,在我的情况下为 en_GB将被拾取,因为我没有单独的 'en' 资源,但孩子 'en_GB' 存在。

但是,当我选择我的设备语言为 en_US 时,它会正确选择默认语言(在我的情况下为 en_US)而不是 en_GB,这正是我在设备语言为 en_US 时所需要的。 When some other locale like en_IN or en_AU is selected, it picks up en_GB.

解决此问题的一种方法是我分别在 'en' 和 en_GB 中提供 en_US 字符串,这将导致我想要的行为。但是,当我选择 en_US 作为我的设备语言时,我无法理解为什么会选择默认字符串。

是否 en_US 是 android 的默认语言,并且无论何时选择 en_US 作为设备的语言,如果未单独提供 en_US,它会选择默认字符串?

【问题讨论】:

  • 它似乎仍在发生。我认为它特定于 en_CA。这似乎是一个平台错误。您是否有任何机会打开 Android 的错误?请在此处查看我们的讨论:Localization for Canada defaults to UK; should default to US
  • 我在这里创建了一个错误报告:issuetracker.google.com/issues/64429534。随意建议更改以改进它,或评论/加注星标以便可以查看。谢谢。

标签: android localization locale android-resources android-7.0-nougat


【解决方案1】:

我遇到了同样的问题。在 Google Incorrect resource resolution strategy above Android N, defaulting to en_GB and not default strings.xml 上打开错误报告后,他们在上述 Android N 的预期行为中提到了这一点。我在这里引用他们的回复:

从 N 开始,所有英语语言环境(美国和美国领土,如波多黎各和美属萨摩亚除外)都会退回到某些国际英语变体,如果这样的语言环境可用的话。

所以对于 en-CA,我们会先尝试这些语言环境,然后再使用 en-GB(如果没有更好的国际英语语言环境,它被认为是国际英语的代表):en-rCA(加拿大英语), b+en+001(国际英语),en(英语)。 如果您不想为 en-CA 提取 en-GB 字符串,则应将资源放在这三个目录之一中,因为它们会被认为更适合 en-CA。

因此,我们的en_UK 被认为是“国际英语的代表”。字符串将回退到 en 之前的“国际英语”或其代表。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2020-12-21
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多