PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

textdomain> <gettext
Last updated: Fri, 01 Aug 2008

view this page in

ngettext

(PHP 4 >= 4.2.0, PHP 5)

ngettextPlural version of gettext

Descrierea

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.

Parametri

msgid1

msgid2

n

Valorile întroarse

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

Exemple

Example #1 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

?>



textdomain> <gettext
Last updated: Fri, 01 Aug 2008
 
add a note add a note User Contributed Notes
ngettext
stnt at ukr dot net
13-Jan-2008 09:51
Another ready to use function for russian plural implementation:

<?php
function plural_str ($i, $str1, $str2, $str3){
    function
plural ($a){
        if (
$a%10==1 && $a%100!=11){ return 0; }
        elseif(
$a%10>=2 && $a%10<=4 && ($a%100<10 || $a%100>=20)) { return 1; }
        else {
        return 
2;
        }
    }
   
$plural= plural ($i);
    switch (
$plural) {
        case
0:
           
$out_str = $str1;
            break;
        case
1:
           
$out_str = $str2;
            break;
        default:
$out_str = $str3;
    }
    return
$out_str;
}

//// Usage:
$n = 3;
echo
$n .' '. plural_str($n, 'тетрадь', 'тетради', 'тетрадей');
//// Output: '3 тетради'
?>
kontakt at somplatzki dot de
25-May-2007 11:47
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 at users dot sourceforge dot net
10-Dec-2006 12:56
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.
nikolai dot zujev at gmail dot com
21-Mar-2006 10:36
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 at emerge2 dot com
03-Nov-2004 09:53
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.)

textdomain> <gettext
Last updated: Fri, 01 Aug 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites