Вы можете легко сделать это вручную в Yii2 без каких-либо расширений:
1) Внутри config/web.php изменить правило (например)
из
'rules' =>[
[
'pattern' => '',
'route' => 'main/index',
'suffix' => ''
],
]
to (добавить правило для языка)
'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