2016-10-19 3 views
0

Я использую Laravel 5,3 и setLocale не работаетЛокализация Laravel не работают «Setlocale ::»

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

Route::get('loc/{locale?}', function($locale) { 
App::setLocale($locale); 
return redirect()->back();}); 

Но если я использую это в другом месте в моих файловых маршрутах! я упоминал в коде указывает:

$locale = 'en'; 
App::setLocale($locale); 

Эле я использую HomeController:

Route::get('loc/{locale}', '[email protected]'); 

В файле HomeController:

public function language($locale) 
{ 
    App::setLocale($locale); 
    return redirect()->back(); 
} 

Этот метод также не работают

+1

У вас есть ошибка? Если нет, в контроллере вы можете показать 'dd (app() -> getLocale())' после того, как вы установили локаль? – SimonDepelchin

+0

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

ответ

0

На самом деле , 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 
    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 
Смежные вопросы