我使用laravel 5.3而setLocale
无效
如果我在路线中使用setLocate
- >不起作用,例如:
Route::get('loc/{locale?}', function($locale) {
App::setLocale($locale);
return redirect()->back();});
但是,如果我在我的文件中的其他地方使用它,路由工作正常! 我在代码中提到了:
$locale = 'en';
App::setLocale($locale);
我使用homecontroller:
Route::get('loc/{locale}', 'HomeController@language');
在文件homecontroller中:
public function language($locale)
{
App::setLocale($locale);
return redirect()->back();
}
此方法也不起作用
答案 0 :(得分:0)
事实上,App::setLocale($locale)
并未持久保存您的更改。因此,如果您想要一种动态的方式来更改区域设置,您有两个选项:
ru.example.com
或example.com/ru
。然后,您可以从请求中捕获区域设置。
当您点击example.com/ru
时,会发生以下情况:
// HomeController.php
public function language($locale)
{
// Validate locale if needed
// Update or create the locale in settings table
App\Setting::updateOrCreate(['name' => 'locale'], ['value' => $locale]);
// Redirect back
return redirect()->back();
}
然后在App\Providers\AppServiceProvider
:
// App/Providers/AppServiceProvider.php
public function boot()
{
// Get the locale stored in the settings table
$locale = App\Setting::where('name', 'locale')->first();
// Setup the app locale
app()->setLocale($locale ? $locale->value : config('app.locale'));
}
所以你的settings
表看起来像这样:
id | name | value
-- | --------- | ---------------
1 | locale | ru
2 | timezone | Europe/Brussels
3 | copyright | @2016 ACME Inc