ngettext

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

ngettextgettext 的复数形式

描述

ngettext(string $singular, string $plural, int $count): string

gettext() 的复数形式。一些语言根据计数拥有不止一种复数消息形式。

参数

singular

单数消息 ID。

plural

复数消息 ID。

count

用于确定相应语法数量翻译的数字(例如,项目计数)。

返回值

返回由 singularplural 标识的消息的正确复数形式,针对计数 count

示例

示例 #1 ngettext() 示例

<?php

setlocale
(LC_ALL, 'cs_CZ');
printf(ngettext("%d window", "%d windows", 1), 1); // 1 okno
printf(ngettext("%d window", "%d windows", 2), 2); // 2 okna
printf(ngettext("%d window", "%d windows", 5), 5); // 5 oken

?>

添加注释

用户贡献注释 6 个注释

peter at ints dot net
15 年前
俄语语言示例
file.po
...
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
...
msgid "File"
msgid_plural "Files"
msgstr[0] "Файл"
msgstr[1] "Файла"
msgstr[2] "Файлов"
...

file.php
...
echo ngettext("File", "Files", $number);
...
tokul at users dot sourceforge dot net
17 年前
根据 GNU gettext 手册,第三个参数是无符号长整型。它必须是正数。如果 n 为负数,它在某些语言中可能会被错误地评估。
Mike Robinson
11 年前
虽然 "hek at theeks dot net" 的答案是有效的,我不建议使用推荐的 abs() 技巧。即使它是最常见的,并不是所有语言都将 (n != 1) 视为复数。其他语言要复杂得多,例如,以下是您如何确定马其顿语中的复数形式。

n==1 || n%10==1 ? 0 : 1

在阿拉伯语中,实际上有 5 种不同的复数形式。

n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5

如果您只使用使用 (n != 1) 格式的特定语言,并且 -1 是单数,那么请务必使用 abs(),但请小心,不要忘记您在 3 年后向项目添加新语言时已经完成了此操作。
kontakt at somplatzki dot de
17 年前
了解使用 ngettext 时 .po 文件的格式很有用。

msgid "item"
msgid_plural "items"
msgstr[0] "Produkt"
msgstr[1] "Produkte"

在 php 中

echo ngettext('item', 'items', $number);
mike-php at emerge2 dot com
19 年前
GNU gettext 手册中的第 10.2.5 节解释了 ngettext 函数。

http://www.gnu.org/software/gettext/manual/

(抱歉,但“添加注释”功能阻止我包含一个指向手册该部分的完整 URL。)
hek at theeks dot net
14 年前
注意 GNU gettext API 和其 PHP 绑定之间的一个区别,即接受 $count 参数的 GNU gettext 函数都期望(事实上,由于是编译后的 C 代码,因此需要)$count 是无符号的,而 PHP 绑定则不需要。

因此,PHP gettext 函数将很乐意接受负数。这带来的一个潜在的令人恼火的结果是,-1 被视为复数,这对于某些人来说很合适,但对于另一些人来说并不合适。(作为一个挑剔的英语母语人士,我个人认为“温度是零下一度华氏度”和“四个苹果减去五个苹果等于零下一度苹果”都很好,但其他人可能觉得“四个苹果减去五个苹果等于零下一度苹果”听起来更好。)

结果:您可能希望在将数字传递给 gettext 之前使用 abs($count)。

奖励积分:如果您的应用程序包含用户偏好,您可能会为用户提供“将 -1 视为单数”选项,然后根据每个用户的偏好选择 $count 或 abs($count) 传递给 gettext。
To Top