避免不同语言的多条路线

Avoiding Multiple Routes for Different Languages

我正在将我的网站翻译成不同的语言。默认情况下,语言为英语,我使用以下路径到达 return“欢迎”视图:

Route::get('welcome', function ()
{
    return view('welcome');
});

对于我的其他语言,我正在使用其他途径:

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

有什么办法可以将这两条路线合二为一吗?例如,如果路由是“welcome”或“welcome/en”,return 英文的“welcome”视图,默认语言。

但是,如果路线是“welcome/fr”,“欢迎”视图应该return用法语编辑。

我将有数百条路线,所以我希望能够合并我的路线。

您的应用程序的默认语言存储在 config/app.php 配置文件中。您可以修改此值以满足您的应用程序的需要。您还可以使用 App 外观上的 setLocale 方法在运行时更改活动语言:

Route::get('welcome/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'es', 'fr'])) {
        abort(400);
    }

    App::setLocale($locale);

    //
});

您可以配置“后备语言”,当活动语言不包含给定的翻译字符串时将使用该语言。和默认语言一样,回退语言也在config/app.php配置文件中配置:

'fallback_locale' => 'en',

有时您可能需要指定路由参数,但该路由参数的存在是可选的。您可以通过在参数名称后放置一个 ? 标记来实现。确保给路由对应的变量一个默认值:

Route::get('welcome/{locale?}', function ($locale = null) {
    //
});