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.