问题描述
我正在使用多语言Web应用程序,因此,我还需要处理翻译成不同语言的URL(出于SEO的原因)。我正在遵循this article(第二个答案)中的指南,但遇到了一个基本问题。请在下面查看我的web.PHP:
<?PHP
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Route;
$all_langs = config('app.all_langs');
//Iterate over each language prefix
foreach( $all_langs as $prefix ){
Route::group(['prefix' => $prefix,'middleware' => 'localization'],function() use ($prefix) {
if ($prefix == '') $prefix = 'en';
Route::get(Lang::get('routes.home',[],$prefix),'HomeController@index')->name('home');
});
}
尽管我上面的代码段将基于“ home”的德语翻译生成一条路由:例如de / hause(仅用于测试目的)。
相反,生成的路由具有URI route.home,感觉翻译不起作用。另外,我的翻译文件(lang / en / routes.PHP和lang / de / routes.PHP)被打印在页面顶部(为什么会这样?)。请在下面查看生成的route:list,以对此进行说明:
Ors-MacBook-Pro:gng_backo Ors$ PHP artisan route:list
return array(
'home' => 'home','tours' => 'tours','guides' => 'guides'
'login' => 'login'
);return array(
'home' => 'hause','tours' => 'touren','guides' => 'stadtfuehrer'
);+--------+----------+----------------+------+-------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+----------------+------+-------------------------------------------+------------+
| | GET|HEAD | api/user | | Closure | api |
| | | | | | auth:api |
| | GET|HEAD | de/routes.home | home | App\Http\Controllers\HomeController@index | web |
| | | | | | auth |
| | GET|HEAD | en/routes.home | home | App\Http\Controllers\HomeController@index | web |
| | | | | | auth |
+--------+----------+----------------+------+-------------------------------------------+------------+
参考:
我的本地化中间件:
<?PHP
namespace App\Http\Middleware;
use App;
use Closure;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request,Closure $next)
{
//setting of the locale based on the first segment of the URL
app()->setLocale($request->segment(1));
return $next($request);
}
}
我的内核:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,// \Illuminate\Session\Middleware\AuthenticateSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\App\Http\Middleware\VerifyCsrftoken::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,\App\Http\Middleware\Localization::class,],'api' => [
'throttle:60,1',];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,'can' => \Illuminate\Auth\Middleware\Authorize::class,'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsverified::class,'localization' => \App\Http\Middleware\Localization::class,];
Lang文件夹:
解决方法
确保您正在使用区域设置中间件
\App\Http\Middleware\Locale::class
,
我错过了翻译文件中的起始php标签:-(((。 另外,翻译效果很好。