PHP Conference Japan 2024

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
20 年前
GNU gettext 手册的第 10.2.5 节解释了 ngettext 函数

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

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

因此,PHP gettext 函数将欣然接受负数。这一个可能令人恼火的后续影响是 -1 被视为复数,有些人对此很满意,而另一些人则不那么满意。(作为一名爱挑剔的英语母语人士,我个人的观点是“温度为零下一度华氏”和“四个苹果减去五个苹果剩下一个苹果”,但其他人可能会觉得“四个苹果减去五个苹果剩下一个苹果”听起来更好。)

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

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