Можете да го направите лесно ръчно в Yii2 без никакви разширения:
1) В config/web.php променете правилото си (например)
от
'rules' =>[
[
'pattern' => '',
'route' => 'main/index',
'suffix' => ''
],
]
към (добавете правило за език)
'rules' =>[
[
'pattern' => '',
'route' => 'main/index',
'suffix' => ''
],
'<language:\w{2}>'=>'main/index',
]
направете същото за други правила, ако имате (например)
[
'pattern' => '<controller>/<action>/<id:\w+>',
'route' => '<controller>/<action>',
'suffix' => ''
],
[
'pattern' => '<language:\w{2}>/<controller>/<action>/<id:\w+>',
'route' => '<controller>/<action>',
'suffix' => ''
],
2) Представете си, че имаме 3 езика: ru, en, kz. И всички контролери разширяват нашия BehaviorsController.php< /strong> (пример, class MainController extends BehaviorsController
)
В BehaviorsController.php създайте функция beforeAction()
public function beforeAction($action)
{
$language = Yii::$app->getRequest()->getQueryParam('language');
if($language){
if(in_array($language,Yii::$app->params['langs'])) Yii::$app->session->set('lang',$language);
Yii::$app->language = $language;
}
return parent::beforeAction($action);
}
3) В config/params.php добавете ключ langs към масива
return [
... // some params
'langs' => ['RU' => 'ru','KZ' => 'kz','EN' => 'en'], //allowed languages
];
4) Това е всичко. Сега можем да проверим пътя с помощта на езиков параметър:
example.com/ru
or
example.com/en
person
Nikolay Yenbakhtov
schedule
19.09.2017