Android 对于零数量,忽略复数定义

Android 对于零数量,忽略复数定义,android,android-xml,android-resources,plural,Android,Android Xml,Android Resources,Plural,我用于为Android应用程序编译数量字符串。我完全遵循教程中的内容: res.getQuantityString( R.复数。注释的数量,注释,注释); 以下是复数的定义: 没有评论 一句话 %d评论 有趣的是,输出字符串与我定义的字符串不同: commentscont=0=>“0条评论” commentsCount=1=>“一条评论” commentsCount=2=>“2条评论” 我猜这是因为当语言需要对数字0(如阿拉伯语)进行特殊处理时,文档会声明。表示零数量。有没有办法强制我的

我用于为Android应用程序编译数量字符串。我完全遵循教程中的内容:

res.getQuantityString(
R.复数。注释的数量,注释,注释);
以下是复数的定义:


没有评论
一句话
%d评论
有趣的是,输出字符串与我定义的字符串不同:

commentscont=0=>“0条评论”
commentsCount=1=>“一条评论”
commentsCount=2=>“2条评论”
我猜这是因为当语言需要对数字0(如阿拉伯语)进行特殊处理时,文档会声明
表示
数量。有没有办法强制我的定义?

根据:

选择要使用的字符串完全基于 语法上的必要性。在英语中,零的字符串将被忽略 即使数量是0,因为0在语法上没有什么不同 从2开始,或除1以外的任何其他数字(“零本书”、“一本书”、“两本书”) 书籍”,等等)

如果仍要为零使用自定义字符串,则可以在数量为零时加载其他字符串:

if (commentsCount == 0)
    str = res.getString(R.string.number_of_comments_zero);
else
    str = res.getQuantityString(R.plurals.number_of_comments, commentsCount, commentsCount);

复数是Unicode形式。所有这些都具有复数价值。 在英语中,零的复数形式类似于2、3、4,因此您必须使用if-else此值才能使用其他字符串进行此操作。

在Kotlin中(由于):


糟糕的安卓系统让我们做这些肮脏的变通方法<代码>复数定义应在所有情况下使用,以便我们的代码更干净!那么,为什么安卓会为零、少、多等设置自动完成功能呢。。如果它们无论如何都不起作用?@htafoya它们确实起作用,它们只是没有被映射到英语中,因为没有语法上的必要性。数量和语言的组合决定了类别(零、一、二、少、多、其他),对于“en”,它只是
one
other
。威尔士语分为六类。翻译人员需要知道他们的语言在哪种情况下使用了哪些类别。@好的,我的问题是默认语言(没有mods的res文件夹)不是英语,android认为是这样,所以忽略了零文本?有没有办法设置默认的lang属性?无论如何,他们应该在英语中启用它,因为很多时候你使用的是句子而不是单个单词。我更喜欢将“无”或“空”替换为0。
val result = commentsCount.takeIf { it != 0 }?.let {
    resources.getQuantityString(R.plurals.number_of_comments, it, it)
} ?: resources.getString(R.string.number_of_comments_zero)