Quote
1. как сконфигурировать языки?
-
как выбор языков "играет" в строке запроса ($_GET['lang'])?
-
выбор актуального сообщения на текущем языке.
-
как вывести на форме ввода сразу 3 перевода (например, слово "Название")?
1. организация папок см. скриншот. в файле конфигурации:
[tt]…
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ru',
…[/tt]
3. [tt]Yii::t(‘admin.label’,‘Дата’);[/tt]
4. [tt]Yii::app()->messages->translate(‘admin.label’,‘Название’,‘en_us’);[/tt]
2.
Quote
можно подписаться на событие onbeginRequest приложения. Подробнее про события - в разделе Компонент
- нельзя. еще не пропарсена строка запроса. (можно организовать это вручную, но овчинка выделки не стоит, дублируется)
что бы языки "заиграли" в запросе GET, в конфигурации прописал так:
[tt] 'urlManager'=>array(
'rules'=>array(
// localhost/EN/news, либо localhost/ES/news
'<lang:(EN|ES)>/news/<id:\d+>'=>'news',
'<lang:(EN|ES)>/news'=>'news/table',
'<lang:(EN|ES)>/news/page/<id:\d+>'=>'news/page',
'<lang:(EN|ES)>/news/add'=>'news/add',
'<lang:(EN|ES)>/news/edit/<id:\d+>'=>'news/edit',
'<lang:(EN|ES)>/news/delete/<id:\d+>'=>'news/delete',
// русский, язык по умолчанию localhost/news
'news/<id:\d+>'=>'news',
'news'=>'news/table',
'news/page/<id:\d+>'=>'news/page',
'news/add'=>'news/add',
'news/edit/<id:\d+>'=>'news/edit',
'news/delete/<id:\d+>'=>'news/delete',
[/tt]возможно можно шаблон прописать и короче для "пустого"
русского языка, но не силен в регулярных дебрях, сорри
на данный момент перестал работать контроллер по умолчанию,
типа: localhost/ , localhost/EN. чешу репу…
дописываем в конфиг и заработало:
[tt] '<lang:(EN|ES)>'=>'контроллер по умолчанию',
'<lang:(EN|ES)>'=>'', //либо пустую строку[/tt]
формирование ссылок в системе пока сделал так:
[tt]// localhost/EN/news, либо localhost/ES/news, либо localhost/news
$lang = (isset($_GET['lang']) ? array('lang'=>$_GET['lang']) : array());
$id = array('допустим_GET_парамерт_id'=>$row['id']);
$this->createUrl('имя_экшана', array_merge($lang, $id));[/tt]
установка языка в системе и формирование ссылок.
-
в контроллерах использ. внешний фильтр:
[tt] public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
array(
'application.filters.InitLang', //создать папку private/filters
),
);
}
[/tt]
[tt]class InitLang extends CFilter
{
protected function preFilter($filterChain)
{
$_GET['lang'] = (isset($_GET['lang']) ? $_GET['lang'] : 'RU');
switch ($_GET['lang']) {
case 'EN':
Yii::app()->language = 'en_us';
Yii::app()->params['lang'] = array('lang'=>$_GET['lang']); // запомнить в конфигурации
break;
case 'ES':
Yii::app()->language = 'es_es';
Yii::app()->params['lang'] = array('lang'=>$_GET['lang']);
break;
//default: - инициализировано в кунфигурации
// Yii::app()->language = 'ru_ru';
// Yii::app()->params['lang'] = array();
}
return true; // false - в случае когда следует запретить выполнение экшна
}
protected function postFilter($filterChain)
{
// код, выполянемый после запуска экшна
}
}[/tt]
[tt] 'params'=>array(
'adminEmail'=>'webmaster@example.com', // this is used in contact page
'lang'=>array(), //для ссылок, filter InitLang, пустой array() для 'RU'
…[/tt]
-
формирование ссылок в системе:
$params = array_merge(Yii::app()->params['lang'], array('id'=>$row['id']));
$this->createUrl('edit', $params);
это все. спасабо всем кто принял обсуждение в топике