Язык сайта по URL или субдомену

Локализация по URL

Сначала надо указать, в каком месте будет указываться текущий язык сайта.

# routes/web.php

Route::get('/{lang}/news', [NewsController::class, 'index']);

Через код выше можно обращаться к следующим страницам:

  • /ru/news
  • /en/news

Вместо {lang} можно подставить любой код языка. Также можно указать только поддерживаемые языки.

# routes/web.php

Route::get('/{lang}/news', [NewsController::class, 'index'])->where('lang', 'ru|en');

Строка «ru|en» означает, что вместо {lang} может быть значение «ru» или «en».

В контроллере текущий язык сайта устанавливается через метод App::setLocale().

# app/Http/Controllers/NewsController.php

use Illuminate\Support\Facades\App;
// …

public function index($lang)
{
    // установить текущий язык
    App::setLocale($lang);
}

Локализация по субдомену

Определять язык по субдомену можно через метод Route::domain().

# routes/web.php

Route::domain('{lang}.example.ru')->group(function(){
    Route::get('/', [NewsController::class, 'index']);
});

В контроллере текущий язык сайта устанавливается через метод App::setLocale().

# app/Http/Controllers/NewsController.php

use Illuminate\Support\Facades\App;
// …

public function index($lang)
{
    // установить текущий язык
    App::setLocale($lang);
}