2015-02-26 2 views
0

Я трудно понять, что это идеальное место, чтобы использовать **\Yii::$app->language = 'pt';**

Я пытался в main.php зрения, но только меню есть перевод. В tutorial-i18N говорит:

Вы можете установить язык приложения во время выполнения на языке, который выбрал пользователь. Это должно быть сделано в точке до того, как будет сформирован любой результат , чтобы он правильно влиял на весь вывод. Therefor просто изменить свойства приложения до требуемого значения

Мое намерение состоит в том, чтобы сохранить нужный язык в LANGUAGE поле в профиле пользователя (вместе с FULL_NAME и т.д.).

В коде мне нужно знать правильное местоположение и как использовать его.

EDIT

@ Timothee Planchais, этот способ работает:

class SiteController extends Controller 
{ 
     public function init() 
     { 
     parent::init(); 

     if(!Yii::$app->user->isGuest) { 
       Yii::$app->language = Yii::$app->user->identity->profile->language; 
     } 
     } 

Но работать только в SiteController

ответ

0

Чтобы установить язык приложения, отредактировать файл конфигурации/web.php:

$config = [ 
    'id' => 'myapp', 
    'name' => My App', 
    'basePath' => dirname(__DIR__), 
    'bootstrap' => ['log'], 
    'language' => 'pt',//HERE 
    ... 
] 

Вы можете сделать все в пользовательском классе контроллера, который должен быть расширен всеми вашими контроллерами. В init() функции:

namespace app\components; 

class Controller extends yii\web\Controller 
{ 
    public function init() 
    { 
    parent::init(); 

    if(!Yii::$app->user->isGuest) { 
     Yii::$app->user->getIdentity()->language = Yii::$app->language; 
    } 
    } 

} 

SiteController, например:

class SiteController extends app\components\Controller 
{ 
    ... 
} 
+0

Hi Timothee, это работает, но я должен делать в каждом CONTROLLER в моем приложении? – gugoan

+0

Да, все ваши контроллеры должны расширить это пользовательское приложение \ components \ Controller. –

+0

Хорошо, я сделал это и отлично работал. – gugoan

Смежные вопросы