更改系统语言时,Android 复数无法正常工作

b2m*_*mob 5 string android

我的应用程序只有波兰语字符串,它是应用程序的默认语言。在这里,您可以看到 res/vaules 下的示例复数:

<plurals name="number_of_vouchers">
    <item quantity="one">%d kupon</item>
    <item quantity="few">%d kupony</item>
    <item quantity="many">%d kuponów</item>
    <item quantity="other">%d kuponów</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)

这里有测试活动类:

class DevTest : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_dev_test)

    val stb = StringBuilder()
    for (j in 1..30) {
        stb.append(resources.getQuantityString(R.plurals.number_of_vouchers, j, j) + "\n")
    }
    testTV.text = stb.toString()
}
}
Run Code Online (Sandbox Code Playgroud)

这是示例测试在系统设置上的样子,将波兰语语言设置为默认值(按预期工作): 在此处输入图片说明

这是示例测试在英语设置为默认值的系统设置上的样子(即使应用程序只有波兰语也不起作用): 在此处输入图片说明

您可以看到,对于英语系统语言,它省略了

<item quantity="few">%d kupony</item>
Run Code Online (Sandbox Code Playgroud)

即使应用程序只有一种语言,而且不是英语。

Mil*_*ada 2

根据 Android 官方文档这里

Few :当语言需要对“小”数字进行特殊处理时(例如捷克语中的 2、3 和 4;或者波兰语中以 2、3 或 4 结尾但不是 12、13 或 14 的数字)。

所以,在Polish. 如果数字以 2,3,4 结尾(但不是 12,13,14),则采用复数形式few

--- 编辑 --

对于您的应用程序,波兰语是唯一的语言。(在 下res/values)。现在当你的系统语言是波兰语时。这些复数将被视为波兰语。所以它按照我的 ans 显示。现在当你将系统语言更改为英语时。相同的复数将被视为英语。因此 22、23、24 没有变化。这是因为res/values在未定义特定资源类型时,其行为按照系统默认语言进行。

另请查看官方文档Android 如何找到最匹配的资源