Плюрализация строк в Laravel для русского языка
Часто встречается задача выбора окончания для строк во множественном числе. В Laravel есть готовое решение, которое описано в документации, но мне не удалось найти готового примера, который бы работал корректно с русским языком. Вот простое решение, которое покрывает большинство случаев:
{{ trans_choice('Публикация|Публикации|Публикаций', $user->articles->count()) }}
В редких ситуациях могут возникать нюансы, которые нужно решать с помощью уточнения числовых промежутков. Об этом подробнее читайте в документации.
Поделиться
Поделиться
Отправить
Твитнуть
Вотсапнуть
Дополню:
Чтобы функционал заработал, надо для начала создать файл локализации: resources/lang/ru/messages.php
В нем вернуть массив:
return [
'articles' => '{0} нет статей|{1} :count статья|[2,4] :count статьи|[5,*] :count статей',
];
И в шаблонизаторе уже используем trans_choice:
{{ trans_choice ('messages.articles',$user->articles->count (), ['count' => $user->articles->count ()]) }}
В таком случае будет — 21 статей, 102 статей
В шаблонах используем:
{{ trans_choice (__(':count article|:count articles|:count articles'), $articles, ['count' => $articles]) }}
А в файле перевода JSON будет строка вида:
«:count article|:count articles|:count articles»: «:count статья|:count статьи|:count статей»
То есть логика такая: один | несколько | много (или в оригинале one | few | many). По такому же принципу и склоняем слова: 1 яблоко, 2 яблока, 300 яблок. Причём числа указывать не нужно, оно само понимает.