Ниже приводится то, что я сделал для достижения многоязычной функции для статического текста.Laravel 5.0, веб-сайт с несколькими языками
Шаг 1: Откройте config/app.php и добавьте следующее ниже: 'locale' => 'xx'.
'locales' => ['en' => 'English', 'sv' => 'Swedish'],
Шаг 2: Префикс ваши маршруты
префикс наших маршрутов, мы изменяем метод карты в приложение/Провайдеры/RouteServiceProvider.php. Изменение метода карты к следующему:
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');
});
}
Затем добавьте в верхней части файла:
use Illuminate\Routing\Router;
use Illuminate\Http\Request;
Шаг 3: Создание языка промежуточного программного
Теперь создайте файл с именем языка. PHP в приложение/HTTP/Middleware с этим содержанием:
<?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 current locale exists.
$locale = $request->segment(1);
if (! array_key_exists($locale, $this->app->config->get('app.locales'))) {
$segments = $request->segments();
$segments[0] = $this->app->config->get('app.fallback_locale');
return $this->redirector->to(implode('/', $segments));
}
$this->app->setLocale($locale);
return $next($request);
}
}
Теперь сделать это промежуточное запустить на ll, добавив его в свойство $ middleware в приложении/Http/Kernel.php. Рекомендуется добавить его в начало массива.
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',
'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',
];
Все выше были взяты из here
После всего выше, мои маршруты не выбирают язык автоматически ... мой корень
Route::get('/', '[email protected]');
Route::get('/about', '[email protected]');
И если я дам полный путь на страницах, таких как http://localhost:8000/pl/about
Он работает.
Но я хочу, чтобы он автоматически выбирал путь, потому что не нужно указывать полные URL-адреса на страницах.
Правильно ли это и как это можно достичь?
Я знаю, что каким-то образом мне нужно работать на routes.php, но я не знаю, как заставить его работать.
У меня очень ограниченные знания в Laravel, как я работаю на мой первый проект в Laravel
На самом деле вам нужно просто взять заголовок языка принятия из самого запроса. Вы можете прочитать об этом здесь. Https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 –
Не думаю, что я это понимаю ... что я должен делать? и где я должен разместить этот заголовок принимающего языка – rgoyal
Также в форме submit Я получаю следующую ошибку 'NotFoundHttpException в строке RouteCollection.php 145:' – rgoyal