我正在开发一个本地化为不同语言的博客。根据其中一个教程,我是在中介 - 中间件的帮助下完成的。一切正常,但存在几个问题。
首先,更改语言时,每次都重定向到主页,但我想留在同一个页面上。
其次,主页看起来像这样:localost:8000/en 因为英语是默认语言。但我不确定这是否对 seo 有好处。如果是英文,那么idea应该是localost:8000。试图通过session解决,但是session不记得变量。这是我们目前的代码:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Contracts\Routing\Middleware;
use Illuminate\Support\Facades\URL;
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'));
return $this->redirector->to(implode('/', $segments));
}
}
if (!$locale) $locale = $this->app->config->get('app.fallback_locale');
$this->app->setLocale($locale);
return $next($request);
}
如何解决这些问题?
解决您的问题。 https://habrahabr.ru/post/264435/
所选语言存储在会话中。默认情况下,采用配置中设置的语言。通过转到用户被重定向回的页面进行切换。