Android字符串回退显示不同地区的不同行为

w6lpcovy  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(122)

我的应用程序本地化完成应用程序支持
en、en-AU、en-CA、en-TH、en-US
应用程序有一个字符串存在于 default,en-AU,en-TH strings.xml 文件中。现在,当区域设置为US的用户运行应用程序时,字符串是从默认字符串文件中选取的(这是预期的,因为字符串不存在于 en-US 中),但当区域设置为CA的用户运行应用程序时,字符串是从 en-AU(Android 10,11,12)和 en-TH(Android 13)中选取的。
期望是字符串应该从默认值中挑选,如果不存在于特定的区域设置strings.xml。如果我在所有字符串文件中有字符串,一切都很好,它会根据所选的区域设置从相应的字符串文件中挑选。我在这里缺少一些东西。已经尝试了新项目。
在MainActivity中设置区域设置

val conf: Configuration = res.configuration
        conf.locale = Locale("en","US") //CA for canada
        res.updateConfiguration(conf, res.displayMetrics)
ikfrs5lh

ikfrs5lh1#

在我看来,你应该在你的项目中同时包含values(默认)和values-en目录,即使这意味着一些字符串重复。

defaultvalues目录应该被视为Android操作系统在确定应用字符串语言时的最后手段。这是因为操作系统无法确定此目录中的字符串是用英语还是其他语言编写的。

在我看来,将en-AUen-TH目录优先于defaultvalues目录是一个合乎逻辑的选择。虽然这些语言可能不完全匹配用户的首选语言,但它们仍然应该足够让用户理解。
values-en目录添加到Android应用后,当缺少特定语言(en-AU、en-CA、en-TH、en-US)时,它将成为默认回退。
您可以阅读更多关于语言和区域设置解析here

swvgeqrz

swvgeqrz2#

请试试这个

conf.locale = Locale("en")

如果需要默认字符串,请删除“US”。

相关问题