如何使用 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 包。
似乎做我需要的一切。
我不太确定为什么有人会尝试构建自己的版本(如果存在的话)。
使用 Laravel 设置多语言网站的最佳方法是什么? URL 必须包含语言 (nl, fr, en)。例如:我的网站.com/en/faq。 我发现的大多数示例和教程都使用会话来存储当前语言,这当然是完全无用的。我应该能够直接 link 到特定语言的页面。
我可以为每种语言创建一条路线,但这似乎不是一个好主意。理想情况下,这可以动态化,以便轻松创建更多语言环境。
您可以这样做,使用语言环境组和语言环境中间件创建路由
路线应该是这样的
然后在你的中间件中根据 locale
参数设置语言。
我们可以使用 request()->route('')
注意:调用 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 包。 似乎做我需要的一切。 我不太确定为什么有人会尝试构建自己的版本(如果存在的话)。