带有 Route::group、前缀和命名空间的 Laravel 本地化

bak*_*ker 5 php localization laravel

“您还可以使用 App 外观上的 setLocale 方法在运行时更改活动语言:” https://laravel.com/docs/5.3/localization#introduction

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});
Run Code Online (Sandbox Code Playgroud)

如果我们有这样的东西,我们如何用 $locale 做到这一点:

Route::group(['prefix' => 'admin/{id}/{locale}', 'namespace' => 'Admin'], function( $locale ) {
    // this does not work.
    App::setLocale( $locale );

    // this does work.
    App::setLocale( Request::segment( 3 ) );

    Route::resource('product', 'ProductController', ['except' => [
        'show'
    ]]);

});
Run Code Online (Sandbox Code Playgroud)

Gay*_*yan 0

问题在于路线参数而不是本地化

由于您期望路线有两个参数,因此您应该为闭包传递两个参数。

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { 
    // 
});
Run Code Online (Sandbox Code Playgroud)

在你的例子中

Route::group(['prefix' => 'admin/{id}/{locale}', 'namespace' => 'Admin'], function( $id, $locale ) { 
    // this does not work.
    App::setLocale( $locale ); 
    // this does work.
    App::setLocale( Request::segment( 3 ) );
    Route::resource('product', 'ProductController', ['except' => [ 'show' ]]);
});
Run Code Online (Sandbox Code Playgroud)

请参阅路线参数以获取更多信息