Проблема мульти зычности на Laravel
У меня есть контроллер на сайте https://careergo.eu/ на Laravel вот пример страницы где вывод https://careergo.eu/de/candidate/ui-designer-at-invision-1
$year = Carbon::parse($row->user->birthday)->diffInYears();
$let = ['год', 'года', 'лет'];
$rest = [$year % 10, $year % 100];
if($rest[1] > 10 && $rest[1] < 20) {
$dataYear = $let[2];
} elseif ($rest[0] > 1 && $rest[0] < 5) {
$dataYear = $let[1];
} else if ($rest[0] == 1) {
$dataYear = $let[0];
} else {
$dataYear = $let[2];
}
Который определяет какую форму слова вставить в зависимости от кол-ва лет.
Подскажите пожалуйста как сделать вывод слова : год, года, лет - мультиязычным.
p.s. так же тут есть следующая проблема:
'ru' => ['год', 'года', 'лет'],
'en' => ['year', 'years', 'years'],
'de' => ['Jahr', 'Jahre', 'Jahre'],
Думал сделать в самом контроллере, но пока отложил этот вариант в сторону:
$year = Carbon::parse($row->user->birthday)->diffInYears();
$let = [
'en' => ['year', 'years', 'years'],
'ru' => ['год', 'года', 'лет'],
'de' => ['Jahr', 'Jahre', 'Jahre'],
];
$rest = [$year % 10, $year % 100];
if ($rest[1] > 10 && $rest[1] < 20) {
$dataYear = $let['ru'][2]; // "лет"
} elseif ($rest[0] > 1 && $rest[0] < 5) {
$dataYear = $let['ru'][1]; // "года"
} elseif ($rest[0] == 1) {
$dataYear = $let['ru'][0]; // "год"
} else {
$dataYear = $let['ru'][2]; // "лет"
}
Буду рад вашим подсказкам, спасибо за внимание =)
Ответы (1 шт):
Для мультиязычного вывода слов в зависимости от количества лет в Laravel можно использовать локализацию (lang
файлы) и настраивать плавающие окончания слов. Давайте реализуем это:
Создайте файл локализации для разных языков, например, в resources/lang/ru/age.php и resources/lang/en/age.php.
В resources/lang/ru/age.php добавьте:
return [
'year' => ['год', 'года', 'лет'],
];
В resources/lang/en/age.php добавьте:
return [
'year' => ['year', 'years', 'years'],
];
В resources/lang/de/age.php добавьте:
return [
'year' => ['Jahr', 'Jahre', 'Jahre'],
];
В контроллере получите нужное окончание в зависимости от выбранного языка:
use Carbon\Carbon;
use Illuminate\Support\Facades\App;
$year = Carbon::parse($row->user->birthday)->diffInYears();
$locale = App::getLocale(); // определяем текущий язык
$let = trans("age.year", [], $locale); // подгружаем переводы
$rest = [$year % 10, $year % 100];
if ($rest[1] > 10 && $rest[1] < 20) {
$dataYear = $let[2];
} elseif ($rest[0] > 1 && $rest[0] < 5) {
$dataYear = $let[1];
} elseif ($rest[0] == 1) {
$dataYear = $let[0];
} else {
$dataYear = $let[2];
}
Вывод результата: теперь $dataYear будет содержать правильную форму слова в зависимости от языка и количества лет.