изменить язык страницы при нажатии на навигационную ссылку - PullRequest
0 голосов
/ 17 июня 2019

Я хочу разработать свой сайт на двух языках и изменить язык, нажав навигационную ссылку.

Контроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Input;
use App;
use Lang;


class LanguageController extends Controller
{
    public function setLocale($locale='en')
    {
        if (!in_array($locale, ['en', 'ja'])) {
            $locale = 'en';
        }

        Session::put('locale', $locale);
        redirect()->back();
    }
}

Маршруты

Route::get('locale/{locale?}', array('as'=>'set-locale', 
            'uses'=>'LanguageController@setLocale'));

Middleware

<?php

namespace App\Http\Middleware;
use Closure;
use Session;
use Config;
use App;

class Locale
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $locale=Session::get('locale', Config::get('app.locale'));
        App()->setLocale($locale);

        return $next($request);
    }
}

Просмотры

<li class="nav-item">
    <a class="nav-link" href="{{ url('/locale/en') }}">English</a>
</li>
<li class="nav-item">
    <a class="nav-link" href="{{ url('/locale/ja') }}">Japanese</a>
</li>

вот как я использую языковой ключ

{{trans('home.Services')}}

, где я создал два home.php в обоих ja и en в lang и установил там язык

когда я нажимаю навигационную ссылку, страница просто переходит на localhost/../locale/ja. Я не знаю, где я делаю ошибку. Я также установил промежуточное ПО ядра как \App\Http\Middleware\Locale::class,. заранее спасибо за помощь.

1 Ответ

1 голос
/ 17 июня 2019

Вкл. kernel.php > routeMiddleware добавить это.

protected $routeMiddleware = [
//... other lines of code.    
    'locale' => \App\Http\Middleware\Locale::class,
];

И изменить представление на,

<li class="nav-item">
    <a class="nav-link" href="{{ route('set-locale', 'en') }}">English</a>
</li>
<li class="nav-item">
    <a class="nav-link" href="{{ route('set-locale', 'ja') }}">Japanese</a>
</li>

Я не уверен, это проблема или нет, измените маршрут на, [просто добавьте '/'.]

Route::get('/locale/{locale?}', array('as'=>'set-locale', 
            'uses'=>'LanguageController@setLocale'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...