使用routes.php
使用前缀为不同语言创建路径非常容易,例如我们可以使用以下命令创建大约页面路由about
和pl/o-nas
URL到同一路由:
if (\Request::segment(1) =='pl') {
$prefix ='pl';
\App::setLocale('pl');
}
else{
$prefix ='';
\App::setLocale('en');
}
Route::group(
array('prefix' => $prefix,
function () {
Route::any('/'.trans('routes.about'), 'Controller@action');
}
);
但是我们知道Laravel 5默认使用注释。是否可以使用注释实现相同的目标?目前,关于在Laravel 5中使用注释的信息并不多。
您可以先在RouteServiceProver
方法中添加before
类似的代码:
if (\Request::segment(1) =='en') {
$routePrefix ='';
$this->app->setLocale('en');
}
else{
$routePrefix ='pl';
$this->app->setLocale('pl');
}
但我们如何在注释本身中使用此前缀和翻译以及如何在此处使用trans函数?它应该是这样的,但它显然不会起作用,因为你不能简单地将函数放入注释中,我不知道是否有任何方法可以在这里添加前缀。
/**
* @Get("/trans('routes.about')")
* @prefix: {$prefix}
*/
public function about()
{
return "about page";
}
答案 0 :(得分:0)
这样的事情应该有效:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
class LangDetection implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->segment(1) =='en') {
$this->app->setLocale('en');
}
else{
$this->app->setLocale('pl');
}
return $next($request);
}
}
然后确保在每次调用时运行 - 将其放入应用程序中间件堆栈(app / Providers / AppServiceProvider.php):
protected $stack = [
'App\Http\Middleware\LangDetection',
'Illuminate\Cookie\Middleware\Guard',
'Illuminate\Cookie\Middleware\Queue',
'Illuminate\Session\Middleware\Reader',
'Illuminate\Session\Middleware\Writer',
];
编辑:或者您不必将其放入堆栈,您可以将其作为中间件过滤器&#39;并且只需在特定路线上拨打电话 - 就像您已经为&#39; auth&#39;,&#39; csrf&#39;等