web-dev-qa-db-ja.com

数量がゼロの場合、複数の定義は無視されます

plurals を使用して、Androidアプリケーションの数量文字列をコンパイルします。チュートリアルで見つけられるものに正確に従います:

_res.getQuantityString(
    R.plurals.number_of_comments, commentsCount, commentsCount);
_

複数形の定義は次のとおりです。

_<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="number_of_comments">
        <item quantity="zero">No comments</item>
        <item quantity="one">One comment</item>
        <item quantity="other">%d comments</item>
    </plurals>
</resources>
_

興味深いことに、出力文字列は私が定義したものとは奇妙です。

_commentsCount = 0 => "0 comments"  
commentsCount = 1 => "One comment"  
commentsCount = 2 => "2 comments"
_

これは、ドキュメントにzero数量のWhen the language requires special treatment of the number 0 (as in Arabic).が記載されているためだと思います。私の定義を強制する方法はありますか?

36
JJD

ドキュメント によると:

使用する文字列の選択は、文法上の必要性のみに基づいて行われます。英語では、数量が0であっても、0の文字列は無視されます。これは、0が2、または1以外の数値(「ゼロの本」、「1つの本」、「2つの本」、およびなど)。

それでもゼロにカスタム文字列を使用したい場合は、数量がゼロのときに別の文字列をロードできます。

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

複数形はUnicode形式です。複数形のすべて ここ 。英語では、2、3、4のようにゼロを表す複数形なので、他の文字列を使用するには、この値が必要です。

3
cuasodayleo

Kotlinで( Dalmas に感謝):

val result = commentsCount.takeIf { it != 0 }?.let {
    resources.getQuantityString(R.plurals.number_of_comments, it, it)
} ?: resources.getString(R.string.number_of_comments_zero)
2
CoolMind