根据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 - >默认,这意味着en的所有语言环境,在我的情况下en_GB将被选中,因为我没有' en'资源分开,但孩子' en_GB'在场。
但是,当我选择我的设备语言为en_US时,它会正确选择默认语言(在我的情况下为en_US)而不是en_GB,这正是设备语言为en_US时所需要的。当选择其他语言环境如en_IN或en_AU时,它会选择en_GB。
解决此问题的一种方法是我在' en'中提供en_US字符串。和en_GB分开,这将导致我想要的行为。但是,当我选择en_US作为我的设备语言时,我无法理解为什么会选择默认字符串。
是否en_US是android的默认语言,只要en_US被选为设备的语言,如果没有单独提供en_US,它会选择默认字符串吗?
答案 0 :(得分: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
之前回归到“国际英语”或其代表。