如何使用 Laravel 9 创建多语言网站

How to create a multi language website with Laravel 9

使用 Laravel 设置多语言网站的最佳方法是什么? URL 必须包含语言 (nl, fr, en)。例如:我的网站.com/en/faq。 我发现的大多数示例和教程都使用会话来存储当前语言,这当然是完全无用的。我应该能够直接 link 到特定语言的页面。

我可以为每种语言创建一条路线,但这似乎不是一个好主意。理想情况下,这可以动态化,以便轻松创建更多语言环境。

您可以这样做,使用语言环境组和语言环境中间件创建路由

路线应该是这样的

然后在你的中间件中根据 locale 参数设置语言。

我们可以使用 request()->route('')

选择动态 url 细分

注意:调用 route() helper 时需要传递 locale 值。

也许还有另一种更好的方法。

我很好奇,为什么你不能使用session(这是一个真正的问题,我很想了解)?

您可以使用与会话相同的方法:创建一个中间件以根据查询字符串设置 App::setLocale("YourLanguage")。

public function handle(Request $request, Closure $next)
{
    // This example try to get "language" variable, \
    // if it not exist will define pt as default \
    // you also can use some config value: replace 'pt' by Config::get('app.locale')

    App::setLocale(request('language', 'pt'));

    return $next($request);
}

或者你可以通过路线:

// This example check the if the language exist in an array before apply
Route::get('/{language?}', function ($language = null) {
    if (isset($language) && in_array($language, config('app.available_locales'))) {
        app()->setLocale($language);
    } else {
      app()->setLocale(Config::get('app.locale'));
    }
    
    return view('welcome');
});

来源:

https://lokalise.com/blog/laravel-localization-step-by-step/

我最终使用了 mcamara 的 laravel-localization 包。 似乎做我需要的一切。 我不太确定为什么有人会尝试构建自己的版本(如果存在的话)。