<?php class UrlManager extends CUrlManager { public function createUrl($route,$params=array(),$ampersand='&') { if (!isset($params['language'])) { if (Yii::app()->user->hasState('language')) Yii::app()->language = Yii::app()->user->getState('language'); else if(isset(Yii::app()->request->cookies['language'])) Yii::app()->language = Yii::app()->request->cookies['language']->value; $params['language']=Yii::app()->language; } return parent::createUrl($route, $params, $ampersand); } } ?>
<?php public function __construct($id,$module=null){ parent::__construct($id,$module); // If there is a post-request, redirect the application to the provided url of the selected language if(isset($_POST['language'])) { $lang = $_POST['language']; $MultilangReturnUrl = $_POST[$lang]; $this->redirect($MultilangReturnUrl); } // Set the application language if provided by GET, session or cookie if(isset($_GET['language'])) { Yii::app()->language = $_GET['language']; Yii::app()->user->setState('language', $_GET['language']); $cookie = new CHttpCookie('language', $_GET['language']); $cookie->expire = time() + (60*60*24*365); // (1 year) Yii::app()->request->cookies['language'] = $cookie; } else if (Yii::app()->user->hasState('language')) Yii::app()->language = Yii::app()->user->getState('language'); else if(isset(Yii::app()->request->cookies['language'])) Yii::app()->language = Yii::app()->request->cookies['language']->value; } public function createMultilanguageReturnUrl($lang='en'){ if (count($_GET)>0){ $arr = $_GET; $arr['language']= $lang; } else $arr = array('language'=>$lang); return $this->createUrl('', $arr); } ?>
'sourceLanguage'=>'en', 'language'=>'ru',
<?php class LanguageSelector extends CWidget { public function run() { $currentLang = Yii::app()->language; $languages = Yii::app()->params->languages; $this->render('languageSelector', array('currentLang' => $currentLang, 'languages'=>$languages)); } } ?>
<div id="language-select"> <?php if(sizeof($languages) < 4) { // - // foreach($languages as $key=>$lang) { if($key != $currentLang) { echo CHtml::link( '<img src="/images/'.$key.'.gif" title="'.$lang.'" style="padding: 1px;" width=16 height=11>', $this->getOwner()->createMultilanguageReturnUrl($key)); }; } // /* $lastElement = end($languages); foreach($languages as $key=>$lang) { if($key != $currentLang) { echo CHtml::link( $lang, $this->getOwner()->createMultilanguageReturnUrl($key)); } else echo '<b>'.$lang.'</b>'; if($lang != $lastElement) echo ' | '; } */ } else { // Render options as dropDownList echo CHtml::form(); foreach($languages as $key=>$lang) { echo CHtml::hiddenField( $key, $this->getOwner()->createMultilanguageReturnUrl($key)); } echo CHtml::dropDownList('language', $currentLang, $languages, array( 'submit'=>'', ) ); echo CHtml::endForm(); } ?> </div>
<div id="language-selector" style="float:right; margin:5px;"> <?php $this->widget('application.components.widgets.LanguageSelector'); ?> </div>
<?php 'components'=>array( ... 'request'=>array( 'enableCookieValidation'=>true, 'enableCsrfValidation'=>true, ), 'urlManager'=>array( 'class'=>'application.components.UrlManager', 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( '<language:(ru|ua|en)>/' => 'site/index', '<language:(ru|ua|en)>/<action:(contact|login|logout)>/*' => 'site/<action>', '<language:(ru|ua|en)>/<controller:\w+>/<id:\d+>'=>'<controller>/view', '<language:(ru|ua|en)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<language:(ru|ua|en)>/<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>', ), ), ), 'params'=>array( 'languages'=>array('ru'=>'', 'ua'=>'ї', 'en'=>'English'), ), ?>
RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php
Source: https://habr.com/ru/post/139689/
All Articles