Custom, transparent and extension-free solution.
Not sure about its speed.
/**
* Custom plural
*/
function splur($n,$t1,$t2,$t3) {
settype($n,'string');
$e1=substr($n,-2);
if($e1>10 && $e1<20) { return $n.' '.$t3; } // "Teen" forms
$e2=substr($n,-1);
switch($e2) {
case '1': return $n.' '.$t1; break;
case '2':
case '3':
case '4': return $n.' '.$t2; break;
default: return $n.' '.$t3; break;
}
}
Usage in Ukrainian / Russian:
splur(5,'сторінка','сторінки','сторінок') // 5 сторінок
splur(4,'сторінка','сторінки','сторінок') // 4 сторінки
splur(1,'сторінка','сторінки','сторінок') // 1 сторінка
splur(12,'сторінка','сторінки','сторінок') // 12 сторінок
splur(5,'страница','страницы','страниц') // 5 страниц
splur(4,'страница','страницы','страниц') // 4 страницы
splur(1,'страница','страницы','страниц') // 1 страница
splur(12,'страница','страницы','страниц') // 12 страниц