Помогите найти причину, по которой не работает Yii::t() запускаемый из модуля, причем файлы с переводами находятся в messages модуля
Если файлы располагаю protected/messages - все работает
Помогите найти причину, по которой не работает Yii::t() запускаемый из модуля, причем файлы с переводами находятся в messages модуля
Если файлы располагаю protected/messages - все работает
на конфиг посмотреть можно?
Quote
на конфиг посмотреть можно?
<main.php – begin>
<?php
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'Test YiiFrameWork',
// preloading 'log' component
'preload'=>array('log'),
'modules'=>array('base'),
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
),
'layout'=>'main',
'defaultController'=>'site',
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ru',
// application components
'components'=>array(
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
),
),
'user'=>array(
'allowAutoLogin'=>false,
),
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'pgsql:host=localhost;port=5432;dbname=webdiary',
'username'=>'sergey',
'password'=>'!sergey',
'autoConnect'=>true,
),
),
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
'pageSize'=>10,
//array('id'=>0,'name'=>'defaul UserName', 'auth'=>false)
),
);
<main.php – end>
В модуле
<BaseModule.php – begin>
<?php
class BaseModule extends CWebModule
{
public function init()
{
parent::init();
$this->defaultController='index';
$this->configure(array(
'import'=>array(
'application.modules.base.components.*',
'application.modules.base.models.*',
),
));
}
}
?>
<BaseModule.php – end>
Так это самое,
если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.
Или вы в контроллере Language напрямую устанавливаете и у вас не работает?
Quote
Так это самое,
если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.
Или вы в контроллере Language напрямую устанавливаете и у вас не работает?
Да я язык меняю программно. Все работает и все переводится когда файлы с переводами под нужную локаль находятся в каталоге заданном по умолчанию protected/messages , меня же интересует как перезадать каталог размещения файлов переводов , причем хотелось бы для каждого модуля чтобы он был свой.
интересно возможно ли сделать так как я спрашиваю ?
Quote
Quote
Так это самое,
если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.
Или вы в контроллере Language напрямую устанавливаете и у вас не работает?
Да я язык меняю программно. Все работает и все переводится когда файлы с переводами под нужную локаль находятся в каталоге заданном по умолчанию protected/messages , меня же интересует как перезадать каталог размещения файлов переводов , причем хотелось бы для каждого модуля чтобы он был свой.
интересно возможно ли сделать так как я спрашиваю ?
Получается никто не знает решения данной проблемы ?
или все таки так настроить не получится этот механизм перевода ?
у CPhpMessageSource есть basePath property, которая по умолчания в null, что подразумевает, что файлы перевода находятся в "protected/messages"
попробуй в модуле поменять на нужный тебе путь.
Quote
попробуй в модуле поменять на нужный тебе путь.
Хорошо, а как тогда к методу t() обращаться , чтобы он понимал что нужно брать значения basePath именно из модуля, а ни приложения
Quote
Quote
попробуй в модуле поменять на нужный тебе путь.
Хорошо, а как тогда к методу t() обращаться , чтобы он понимал что нужно брать значения basePath именно из модуля, а ни приложения
так я и говорю про CPhpMessageSource, а не про Yii. У CPhpMessageSource есть такая же функция translate. То есть в модуле пользуем метод CPhpMessageSource::translate() или свой производный класс от него в комбинации с basePath разным для каждого модуля.
Quote
Quote
Quote
попробуй в модуле поменять на нужный тебе путь.
Хорошо, а как тогда к методу t() обращаться , чтобы он понимал что нужно брать значения basePath именно из модуля, а ни приложения
так я и говорю про CPhpMessageSource, а не про Yii. У CPhpMessageSource есть такая же функция translate. То есть в модуле пользуем метод CPhpMessageSource::translate() или свой производный класс от него в комбинации с basePath разным для каждого модуля.
потерялся если не трудно пример дайте
Quote
откуда же взять? [армянский акцент]я так дюмаю![/армянский акцент]
ничего конкретного - как я понимаю из документации:
создать свой класс, к примеру MyTranslate как производный от CPhpMessageSource.
подключить его в модулях
в каждом модуле прописать свой MyTranslate->basePath
вызывать для перевода MyTranslate::translate(… , … , …);
Quote
Quote
откуда же взять? [армянский акцент]я так дюмаю![/армянский акцент]
ничего конкретного - как я понимаю из документации:
создать свой класс, к примеру MyTranslate как производный от CPhpMessageSource.
подключить его в модулях
в каждом модуле прописать свой MyTranslate->basePath
вызывать для перевода MyTranslate::translate(… , … , …);
Спасибо, идея ясна
я пока ждал ответа сделал следующим образом
$t = new CPhpMessageSource();
$t->basePath = '/home/sergey/www/myproject/protected/modules/m1/messages/';
echo $t->basePath ;
echo $t->translate('test','Тестирование');
'test' это test.php
следующего содержания
return array('Тестирование','Тестування');
данный файл находится
/home/sergey/www/myproject/protected/modules/m1/messages/ru_ua'
Для приложения устанавливаю
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ua',
Ничего не переводит
Или я все-таки не верно написал ?
Quote
следующего содержания
return array('Тестирование','Тестування');
данный файл находится
/home/sergey/www/myproject/protected/modules/m1/messages/ru_ua'
Для приложения устанавливаю
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ua',
Ничего не переводит
Или я все-таки не верно написал ?
вроде так должно быть:
return array(
'original message 1' => 'translated message 1',
'original message 2' => 'translated message 2',
);
попробуй:
return array('Тестирование'=>'Тестування');
Quote
Quote
следующего содержания
return array('Тестирование','Тестування');
данный файл находится
/home/sergey/www/myproject/protected/modules/m1/messages/ru_ua'
Для приложения устанавливаю
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ua',
Ничего не переводит
Или я все-таки не верно написал ?
вроде так должно быть:
return array(
'original message 1' => 'translated message 1',
'original message 2' => 'translated message 2',
);
попробуй:
return array('Тестирование'=>'Тестування');
С массивом просто описка , устал не много, все заработало, только если
в функцию вставляю язык
echo $t->translate('test','тестирование','ru_ua')
А не работало , первое это ошибся в регистре в функцию поставил все с прописных а в файл с переводами заглавные
Quote
Quote
Quote
следующего содержания
return array('Тестирование','Тестування');
данный файл находится
/home/sergey/www/myproject/protected/modules/m1/messages/ru_ua'
Для приложения устанавливаю
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ua',
Ничего не переводит
Или я все-таки не верно написал ?
вроде так должно быть:
return array(
'original message 1' => 'translated message 1',
'original message 2' => 'translated message 2',
);
попробуй:
return array('Тестирование'=>'Тестування');
С массивом просто описка , устал не много, все заработало, только если
в функцию вставляю язык
echo $t->translate('test','тестирование','ru_ua')
А не работало , первое это ошибся в регистре в функцию поставил все с прописных а в файл с переводами заглавные
все работает, не внимательно читал мануал
Свойство в функцию берется при NULL берется из приложения если устанавливаю Yii::app()->setLanguage('ru_ua') все работает, спасибо за помощь.
Хочется все сделать компактным в модуле создая компонент и хочу к нему обращаться.
Компонент думаю правильно объявил. только не получается к нему обратиться
Научите как это делается , пример объявления ниже
<?php
class TestModule extends CWebModule
{
public function init()
{
parent::init();
$this->defaultController='index';
$this->configure(array(
'import'=>array(
'application.modules.test.components.*',
'application.modules.test.models.*',
),
'components'=>array(
'mt'=>array(
'class'=>'CPhpMessageSource',
'basePath'=>'/home/sergey/www/myproject/protected/modules/test/messages/',
'language'=>'ru_ua',
),
),
));
}
}
?>
Все разобрался, нужно подключать в основном файле конфигурации компонент в модуль