Множественное число в локализации laravel blade @lang ()?

Laravel 5 предоставляет переводы с помощью помощника @lang

<!-- file: template.blade.php -->
@lang('some text')

В Laravel 5 также есть возможность множественного числа строк в зависимости от переменной.

// file: controller.php
echo trans_choice('messages.apples', 10);

Тогда файл перевода будет содержать следующую строку для перевода яблок:

// file: /resources/lang/en
'apples' => 'There is one apple|There are many apples',

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

<!-- file: template.blade.php -->
Course duration: {{ $course.days }} @lang('day|days', $course.days)

который кажется мне логическим синтаксисом, но это дает мне только ошибку о том, что входной аргумент 2 должен быть массивом. Я тоже пробовал это:

<!-- file: template.blade.php -->
Course duration: {{ $course.days }} @lang('day|days', [$course.days])

И это:

<!-- file: template.blade.php -->
Course duration: {{ $course.days }} @lang(['day|days', $course.days])

person Hendrik Jan    schedule 03.09.2018    source источник


Ответы (3)


Для этого есть @choice директива лезвия.

Course duration: {{ $course->days }} @choice('day|days', $course->days)
person Jerodev    schedule 03.09.2018
comment
Это включено по умолчанию? Я думал, что что-то подобное будет полезно, но в документации так и не нашел ... - person D. Petrov; 03.09.2018
comment
Это прекрасно работает. Я совместил это с ответом Д. Петрова. @choice('plurals.days', $course->days) - person Hendrik Jan; 03.09.2018
comment
Было бы интересно, если бы вы могли выбирать между двумя переводами;) - person b00sted 'snail'; 07.03.2019
comment
В Laravel 7 я использую ресурсы / lang / lang.json: @choice ('day', 2), и этот выбор означает получение строки после канала, чтобы на языке перевода отображались дни. - person gtamborero; 05.04.2020

Вам нужно будет зарегистрировать новую ключевую запись в одном из ваших файлов перевода, скажем, plurals.php. Тогда правильный подход будет:

//in plurals.php
//...
'day' => 'day|days',
//...

Затем вы можете получить запись, например

{{trans_choice('plurals.day', $course->days)}} //assuming the arrow syntax is how you retrieve a property in php :P
person D. Petrov    schedule 03.09.2018

Вы можете использовать его с такими переменными

//plurals.php
'day' => 'one day| :n days',

вы можете сделать это в файле лезвия:

{{ trans_choice('plurals.day', $course->days), ['n' => $course->days] }} 

ты даже можешь использовать это

{{ trans_choice('plurals.like', $post->likes), ['n' => $post->likes] }} 
'like' => '{0} Nobody likes this|[1,19] :n users like this|[20,*] Many users like this'
person imaginabit    schedule 21.07.2021