Склонение слов, по моему мнению, — это то, что способно показать разницу между хорошей и Лучшей разработкой. Внимание к мелочам — наше все. Согласитесь, фраза «В корзине 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 товаров.