4

按照文档中Language and Locale已经出现了改善从Android 7.0(API级别24),这是很容易下表,了解资源解决策略: Improved Resource-Resolution strategy的Android 7.0牛轧糖拿起默认的字符串时,设备语言是en_US

根据我的要求,我希望我的应用的默认语言为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时所需要的。当选择一些其他语言环境(如en_IN或en_AU)时,会选取en_GB。

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

是不是en_US是Android的默认语言,并且每当选择en_US作为设备的语言时,如果en_US不是单独提供,它将拾取默认字符串?

+0

它似乎仍在发生。我认为这是特定于en_CA。这似乎是一个平台错误。你有没有机会打开Android的错误?请参阅我们的讨论:[加拿大本地化默认为英国;应该默认为美国](https://stackoverflow.com/q/45511769/1306419) –

+0

我在这里创建了一个错误报告:issuetracker.google.com/issues/64429534。随意提出改进建议,或对其进行评论/明星,以便可以查看。谢谢。 –

回答

0

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

的N起,所有英语语言环境(除美国和美国领土像波多黎各和美国萨摩亚)回落到一些国际英语变种,如果这样的语言环境是可用的。如果没有更好的国际英语语言环境,那么在回退en-GB(如果没有更好的国际英语语言环境,则认为它是国际英语的代表)之前,我们会首先尝试这些语言环境:en-rCA(加拿大英语) ,b + en + 001(国际英语),en(英语)。 如果您不希望为en-CA提取en-GB字符串,则应该将资源置于这三个目录之一中,因为它们会被视为与en-CA更好匹配。

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

相关问题