Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Gettext Functions : ngettext

ngettext

Plural version of gettext (PHP 4 >= 4.2.0, PHP 5)
string ngettext ( string msgid1, string msgid2, int n )

The plural version of gettext(). Some languages have more than one form for plural messages dependent on the count.

Parameters

msgid1
msgid2
n

Return Values

Returns correct plural form of message identified by msgid1 and msgid2 for count n.

Examples

Example 778. ngettext() example

<?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

?>


Code Examples / Notes » ngettext

nikolai dot zujev

This is an implementation for a word ending in russian lang. Also as I know polish and similar langs use same rules:
<?php
/**
* Returns:
*   0, if $n == 1, 21, 31, 41, ...
*   1, if $n == 2..4, 22..24, 32..34, ...
*   2, if $n == 5..20, 25..30, 35..40, ...
*/
function plural( $n )
{
   if ( $n % 10 == 1 && $n % 100 != 11 )
   {
       return 0;
   }
   if ( $n % 10 >= 2 && $n % 10 <= 4 && ( $n % 100 < 10 || $n % 100 >= 20 ) )
   {
       return 1;
   }
   return 2;
}
// usage
for ( $i = 0; $i < 100; $i++ )
{
   $x = plural( $i );
   printf(
       "%d тетрад%s<br/>\n", $i,
        ( 0 == $x ? 'ÑŒ' : ( 1 == $x ? 'и' : 'ей' ) )
   );
}
?>
Output:
0 тетрадей
1 тетрадь
2 тетради
3 тетради
4 тетради
5 тетрадей
6 тетрадей
7 тетрадей
8 тетрадей
9 тетрадей
10 тетрадей
...
Also here is short version:
<?php
$n = 17;
print ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
?>
output: 2


mike-php

Section 10.2.5 in the GNU gettext manual explains the ngettext function:
http://www.gnu.org/software/gettext/manual/
(Sorry, but the Add Note function prevents me from including a long URL which points right to that section of the manual.)


kontakt

It's useful to know how the .po-file has to look like when using ngettext:
msgid "item"
msgid_plural "items"
msgstr[0] "Produkt"
msgstr[1] "Produkte"
In php:
echo ngettext('item', 'items', $number);


tokul

According to GNU gettext manual third argument is unsigned long integer. It must be positive number. If n is negative, it might be evaluated incorrectly in some languages.

Change Language


Follow Navioo On Twitter
bind_textdomain_codeset
bindtextdomain
dcgettext
dcngettext
dgettext
dngettext
gettext
ngettext
textdomain
eXTReMe Tracker