Склонение слов, по моему мнению, — это то, что способно показать разницу между хорошей и Лучшей разработкой. Внимание к мелочам — наше все. Согласитесь, фраза «В корзине 1 товаров» смотрится намного хуже, чем «В корзине 1 товар».
Спорить не о чем. Приведу пример класса, которым сам пользуюсь во всех своих проектах, где не стоит вопрос использования мультиязычности.
class WordsDecline{
/**
* Метод, определеящий правильное склонение слова на рус. (укр.) языке
*
* @param integer $number число
* @param array $suffix массив склонений, например [минута, минуты, минут]
* @return string склоненное слово
*/
public static function getWord($number, $suffix){
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)];
return $suffix[$suffix_key];
}
}
В использовании класс очень прост. Например:
WordsDecline::getWord( count($cart), ['товар', 'товара', 'товаров'] ) ;
Первым параметром передам число для склонения, а вторым - массив с формами слова для числовых эквивалентов 1, 2, 5 - т.е. 1 товар, 2 товара, 5 товаров.