Выбор языка для Laravel 11 с сохранением для каждого сеанса

Как установить язык, выбранный пользователем, в Laravel 11 на постоянной основе, то есть, пока посетитель или пользователь остается на странице и после выбора языка остается на этом языке, даже если они меняют страницу?

Я вставил ваш ответ как ответ, так как неуместно помещать ответ в вопрос.

Lajos Arpad 07.07.2024 12:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

https://github.com/ShurGith/Localizacion

Консоль

  • Установите языковой пакет.
composer require laravel-lang/common --dev
php artisan lang:add es
php artisan lang:add en
php artisan lang:update

App/Http/Controllers/LanguageController.php (новый файл)

  • Создайте новый контроллер с этим кодом.
<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;

class LanguageController extends Controller
{
    public function switch($lang)
    {
            Session::put([
                'applocale' => $lang,
                'locale' => $lang,
            ]);
            return Redirect::back();
    }
}

App\Http\Middleware\Language.php (новый файл)

  • Создайте новое промежуточное программное обеспечение с помощью этого кода.
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\Response;

class Language
{
    public function handle(Request $request, Closure $next): Response
    {
        $langSesion = Session::get('applocale');
        array_key_exists($langSesion, config('languages')) ? App::setLocale($langSesion) : App::setLocale(Config('app.fallback_locale'));

        return $next($request);
    }
}

начальная загрузка\app.php

  • Если вы не редактировали его раньше, файл «app.php» в папке начальной загрузки будет выглядеть следующим образом:
<?php

use App\Http\Middleware\Language;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->web(append: [Language::class]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

config\languages.php (новый файл)

  • Создайте новый файл с именем «languages.php» в папке конфигурации. (*в этом примере только два языка)
return $idiomas = [
    'en' => "English",
    'es' => "Español",
];

ресурсы\views_partials\lang.blade.php (новый файл)

  • Меню «Файл», проверяющее, что язык, переданный GET, входит в число поддерживаемых языков, в противном случае будет возвращен заранее определенный язык по умолчанию.
@props([
    'idioma' => array_key_exists(session('locale'),config('languages')) ? session('locale') : Config('app.locale'),
])
<ul>
@foreach (config('languages') as $key => $value)
    @if ($key != $idioma)
    <li>
        <a class = "inline-flex rounded bg-indigo-500 px-6 py-2 text-lg text-white"
        href = "{{ route('lang', $key) }}">{{ $value }}</a>
    </li>
    @endif
@endforeach
</ul>


Другие вопросы по теме