|
ngettext
Plural version of gettext
(PHP 4 >= 4.2.0, PHP 5)
Example 778. ngettext() example<?php Code Examples / Notes » ngettextnikolai 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.
|