我正在尝试本地化Laravel(最新版本)项目。
我需要将some1访问路由/home
重定向到locale/home
。
我有一个使用语言环境translatable.php
的配置:
return [
'locales' => [
'en' => 'English',
'ukr' => 'Ukrainian',
'ru' => 'Russian'
],
'locale' => 'en' // default locale
];
我正在使用语言middleware
-Middleware/Language.php
:
class Language
{
public function handle(Request $request, Closure $next)
{
\PhpConsole\Handler::getInstance()
->debug(!array_key_exists($request->segment(1), config('translatable.locales')), 'bool');
\PhpConsole\Handler::getInstance()
->debug($request->segment(1), 'locale');
// Check if the first segment matches a language code
if (!array_key_exists($request->segment(1), config('translatable.locales'))) {
// Store segments in array
$segments = $request->segments();
// Set the default language code as the first segment
$segments = array_prepend($segments, config('translatable.locale'));
// Redirect to the correct url
return redirect()->to(implode('/', $segments));
}
return $next($request);
}
}
添加语言环境前缀-Http/Kernel.php
:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\Language::class,
]
];
RouteServiceProvider.php
:
protected function mapWebRoutes()
{
$locale = Request::segment(1);
Route::middleware('web')
->namespace($this->namespace)
->prefix($locale)
->group(base_path('routes/web.php'));
}
,并且可以正常工作,如果我访问/home
,它将重定向到/locale|fr|en.../home
,除非该路由超过一个网段。
例如,/post/post-name
将返回404
错误,并且不会重定向到/en/post/post-name
,但是我可以访问/en/post/post-name
。 en
是默认语言环境。