Linksniuojam vienaskaitą ir daugiskaitą

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.