Laravel多语言URL翻译不起作用

问题描述

我正在使用多语言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文件夹:

Lang folder

解决方法

确保您正在使用区域设置中间件

\App\Http\Middleware\Locale::class
,

我错过了翻译文件中的起始php标签:-(((。 另外,翻译效果很好。