Проблема мульти зычности на 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 шт):

Автор решения: mydls1

Для мультиязычного вывода слов в зависимости от количества лет в 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 будет содержать правильную форму слова в зависимости от языка и количества лет.

→ Ссылка