首页 > 解决方案 > 避免不同语言的多条路线

问题描述

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

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

对于我的其他语言,我正在使用这条其他路线:

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

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

但是,如果路由是“welcome/fr”,则“welcome”视图应该以法语返回。

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

标签: laraveltranslationlaravel-7.x

解决方案


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

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) {
    //
});

推荐阅读