Локализация Laravel не работает «setLocale ::»

#laravel #localization #routes

#laravel #локализация #маршруты

Вопрос:

Я использую laravel 5.3 и setLocale не работает

Если я использую setLocate в Route -> не работает, например:

 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. У вас ошибка? Если нет, можете ли вы показать в своем контроллере dd(app()->getLocale()) после установки локали?

2. Нет, у меня нет ошибки. Если я использую dd(app()->getLocale()) после setLocate , я вижу — «en» или «ru», это то, что я выбрал, НО мой lengauge не меняется на сайте. Если я изменю язык в файле app.php -> хорошо, мой язык изменится

Ответ №1:

На самом деле, App::setLocale($locale) ваши изменения не сохраняются. Итак, если вы хотите динамический способ изменения локали, у вас есть 2 варианта :

  1. Добавьте локаль в URI: ru.example.com или example.com/ru .

Затем вы можете получить локализацию из запроса.

  1. Сохраняйте локаль для пользователя или приложения, например, в базе данных.

Когда вы нажмете example.com/ru , вот что произойдет:

 // HomeController.php
public function language($locale)
{
    // Validate locale if needed

    // Update or create the locale in settings table
    AppSetting::updateOrCreate(['name' => 'locale'], ['value' => $locale]);

    // Redirect back
    return redirect()->back();
}
  

Тогда в вашем AppProvidersAppServiceProvider :

 // App/Providers/AppServiceProvider.php
public function boot()
{
    // Get the locale stored in the settings table
    $locale = AppSetting::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