Matyt ne kartą esame matę kažką panašaus į „Jūs turite 21 naujų pranešimų“. Daugiskaitos linksnių problemą lengvai išsprendžia toks pagalbininkas:
class Helper { /** * Plural forms (Lithuanian locale) * Usage: * <code> * echo "$n " . Helper::plural( 'obuolys|obuoliai|obuolių', $n ); * echo Helper::plural( '{vnt} obuolys|{vnt} obuoliai|{vnt} obuolių', $n, array( '{vnt}' => $n ) ); * </code> * * @param string $string * @param int $n * @param array $placeholders * @return string */ public static function plural ( $string, $n, $placeholders = array() ) { $string = explode( '|', $string ); $key = ( ( $n % 10 == 1 ) && ( $n % 100 != 11 ) ) ? 0 : ( ( ( $n % 10 >= 2 ) && ( ( $n % 100 < 10 ) || ( $n % 100 >= 20 ) ) ) ? 1 : 2 ); return strtr( $string[$key], $placeholders ) ; } }
Bandom:
<pre> <?php $test = [0,1,2,11,21,99,100,101,102,111]; foreach ( $test as $n ) { echo Helper::plural( '{vnt} obuolys|{vnt} obuoliai|{vnt} obuolių', $n, array( '{vnt}' => $n ) )."\n"; } ?> </pre>
Rezultatas
0 obuolių 1 obuolys 2 obuoliai 11 obuolių 21 obuolys 99 obuoliai 100 obuolių 101 obuolys 102 obuoliai 111 obuolių
Taisykles kitoms lokalėms galima nesunkiai susigūglinti.