本地化Laravel没有工作" setLocale ::"

时间:2016-10-19 09:36:18

标签: laravel localization routes

我使用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();
}

此方法也不起作用

1 个答案:

答案 0 :(得分:0)

事实上,App::setLocale($locale)并未持久保存您的更改。因此,如果您想要一种动态的方式来更改区域设置,您有两个选项:

  1. 在URI中添加区域设置:ru.example.comexample.com/ru
  2. 然后,您可以从请求中捕获区域设置。

    1. 例如,在数据库中保留用户或应用程序的区域设置。
    2. 当您点击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