Плюрализация строк в Laravel для русского языка

6 апреля 2019

Часто встречается задача выбора окончания для строк во множественном числе. В Laravel есть готовое решение, которое описано в документации, но мне не удалось найти готового примера, который бы работал корректно с русским языком. Вот простое решение, которое покрывает большинство случаев:

{{ trans_choice('Публикация|Публикации|Публикаций', $user->articles->count()) }}

В редких ситуациях могут возникать нюансы, которые нужно решать с помощью уточнения числовых промежутков. Об этом подробнее читайте в документации.

Комментарии 3
  1. Николай 9 июня 2024

    Дополню:
    Чтобы функционал заработал, надо для начала создать файл локализации: 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 ()]) }}

  2. Лавр 2 июля 2024

    В таком случае будет — 21 статей, 102 статей

  3. Bogdan Gerasymenko 22 октября 2024

    В шаблонах используем:
    {{ 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 яблок. Причём числа указывать не нужно, оно само понимает.

Добавить комментарий