Многоязычная поддержка Laravel 5

Я новичок в Laravel, и я пытаюсь поддержать мое приложение с mutilanguage.
Я скачал по умолчанию Login System для laravel 5 и интегрированного учебника по языку поддержки нескольких языков снизу

https://laracasts.com/discuss/channels/tips/example-on-how-to-use-multiple-locales-in-your-laravel-5-website

но это дает мне login page URL localhost/en/login с мультиязычной поддержкой, но когда я использую login system без интеграции мультиязычной поддержки это дает мне URL для страницы входа laravel/auth/login,

Вот мой kernel.php

class Kernel extends HttpKernel {

/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
'App\Http\Middleware\Language',
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
];

/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'test'=> 'App\Http\Middleware\Test',
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];

}

Вот мой RouteServiceProvider.php

<?php namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Http\Request;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider {

/**
* This namespace is applied to the controller routes in your routes file.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';

/**
* Define your route model bindings, pattern filters, etc.
*
* @param  \Illuminate\Routing\Router  $router
* @return void
*/
public function boot(Router $router)
{
parent::boot($router);

//
}

/**
* Define the routes for the application.
*
* @param  \Illuminate\Routing\Router  $router
* @return void
*/
public function map(Router $router, Request $request)
{
$locale = $request->segment(1);
$this->app->setLocale($locale);

$router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
require app_path('Http/routes.php'); });
}
}

Я не знаю, как интегрировать этот учебник в этот default login system,

Заранее спасибо.

4

Решение

Некоторое время назад я, как и вы, боролся с данным уроком. После исследования / поиска я закончил вот так. Обратите внимание, я все еще работаю над этим.

Шаг 1: Добавьте ваши локали
В конфиг / app.php добавлять skip_locals строка ниже локали

'locales' => ['en' => 'English', 'sv' => 'Swedish'],
'skip_locales' => ['admin','auth','etc'],

Шаг 2: добавьте префиксы к вашим маршрутам
измените метод карты на следующий

public function map(Router $router, Request $request)
{
$locale = $request->segment(1);
$this->app->setLocale($locale);
$skipLocales = $this->app->config->get('app.skip_locales');

// If the locale is added to skip_locales array continue without locale
if (in_array($locale, $skipLocales)) {
$router->group(['namespace' => $this->namespace], function($router)
{
require app_path('Http/routes.php');
});
}
else {
$router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
require app_path('Http/routes.php');
});
}
}

Шаг 3: Создание языкового промежуточного программного обеспечения
Измените содержание с этим

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Contracts\Routing\Middleware;

class Language implements Middleware
{

public function __construct(Application $app, Redirector $redirector, Request $request)
{
$this->app = $app;
$this->redirector = $redirector;
$this->request = $request;
}

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Make sure the current local exists
$locale = $request->segment(1);

// If the locale is added to to skip_locales array continue without locale
if (in_array($locale, $this->app->config->get('app.skip_locales'))) {
return $next($request);
} else {
// If the locale does not exist in the locales array continue with the fallback_locale
if (! array_key_exists($locale, $this->app->config->get('app.locales'))) {
$segments = $request->segments();
array_unshift($segments, $this->app->config->get('app.fallback_locale'));
// $segments[0] = $this->app->config->get('app.fallback_locale');
return $this->redirector->to(implode('/', $segments));
}
}
$this->app->setLocale($locale);

return $next($request);
}

}

Надеюсь, это поможет!

3

Другие решения

Для Laravel 5.5 & выше, пожалуйста, измените на шаге 2 в вышеупомянутом решении в https://stackoverflow.com/a/39384200/5180888

Отредактируйте приложение / Providers / RouteServiceProvider.php и измените

public function map(Router $router, Request $request)
{
$this->mapApiRoutes();
$this->mapWebRoutes($router, $request);
}

and
protected function mapWebRoutes(Router $router, Request $request)
{
//        Route::middleware('web')
//            ->namespace($this->namespace)
//            ->group(base_path('routes/web.php'));

$locale = $request->segment(1);
$this->app->setLocale($locale);
$skipLocales = $this->app->config->get('app.skip_locales');

// If the locale is added to skip_locales array continue without locale
if (in_array($locale, $skipLocales)) {
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('routes/web.php');
});
} else {
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web', 'prefix' => $locale
], function ($router) {
require app_path('routes/web.php');
});
}
}
0

По вопросам рекламы [email protected]