не работает в модуле Yii::t()

Помогите  найти причину, по которой  не работает Yii::t() запускаемый из  модуля, причем файлы с  переводами  находятся  в messages  модуля

Если файлы  располагаю  protected/messages -  все работает

на конфиг посмотреть можно?

Quote

link=topic=2336.msg12860#msg12860 date=1243280315]

на конфиг посмотреть можно?

<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(

&#039;basePath&#039;=&gt;dirname(__FILE__).DIRECTORY_SEPARATOR.&#039;..&#039;,


&#039;name&#039;=&gt;&#039;Test YiiFrameWork&#039;,





// preloading &#039;log&#039; component


&#039;preload&#039;=&gt;array(&#039;log&#039;),





&#039;modules&#039;=&gt;array(&#039;base&#039;),





// autoloading model and component classes


&#039;import&#039;=&gt;array(


	&#039;application.models.*&#039;,


	&#039;application.components.*&#039;,&nbsp; &nbsp; 


),


&#039;layout&#039;=&gt;&#039;main&#039;,


&#039;defaultController&#039;=&gt;&#039;site&#039;, 





&#039;sourceLanguage&#039;=&gt;&#039;ru_ru&#039;,

    'language'=>'ru_ru',

// application components


&#039;components&#039;=&gt;array(





	&#039;log&#039;=&gt;array(


		&#039;class&#039;=&gt;&#039;CLogRouter&#039;,


		&#039;routes&#039;=&gt;array(


			array(


				&#039;class&#039;=&gt;&#039;CFileLogRoute&#039;,


				&#039;levels&#039;=&gt;&#039;error, warning&#039;,


			),


		),


	),


	


	&#039;user&#039;=&gt;array(


		&#039;allowAutoLogin&#039;=&gt;false,


	),


	


	&#039;db&#039;=&gt;array(


	 	&#039;class&#039;=&gt;&#039;CDbConnection&#039;,

            'connectionString'=>'pgsql:host=localhost;port=5432;dbname=webdiary',

            'username'=>'sergey',

            'password'=>'!sergey',

	&nbsp; &nbsp; &#039;autoConnect&#039;=&gt;true,


	),


	


),





// application-level parameters that can be accessed


// using Yii::app()-&gt;params&#91;&#039;paramName&#039;]


&#039;params&#039;=&gt;array(


	// this is used in contact page


	&#039;adminEmail&#039;=&gt;&#039;webmaster@example.com&#039;,


&nbsp; &nbsp; &#039;pageSize&#039;=&gt;10,


//array(&#039;id&#039;=&gt;0,&#039;name&#039;=&gt;&#039;defaul UserName&#039;, &#039;auth&#039;=&gt;false) 


),

);

<main.php – end>

В модуле

<BaseModule.php – begin>

<?php

class BaseModule extends CWebModule

{

public function init()


{


	parent::init();		

        $this->defaultController='index';     

       

        $this->configure(array(

		&#039;import&#039;=&gt;array(


				&#039;application.modules.base.components.*&#039;,&nbsp; &nbsp; 


				&#039;application.modules.base.models.*&#039;,&nbsp; &nbsp; 

        ),

        ));

}

}

?>

<BaseModule.php – end>

Так это самое,

если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.

Или вы в контроллере Language напрямую устанавливаете и у вас не работает?

Quote

link=topic=2336.msg12869#msg12869 date=1243285694]

Так это самое,

если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.

Или вы в контроллере Language напрямую устанавливаете и у вас не работает?

Да  я  язык  меняю  программно. Все  работает  и все  переводится  когда файлы  с  переводами  под  нужную  локаль  находятся  в каталоге заданном по умолчанию protected/messages , меня  же  интересует как перезадать каталог размещения  файлов  переводов , причем  хотелось бы  для  каждого модуля  чтобы он был свой.

интересно возможно ли сделать так как  я  спрашиваю ?

Quote

Quote

link=topic=2336.msg12869#msg12869 date=1243285694]

Так это самое,

если у вас язык скриптов (sourceLanguage) и язык клиента (Language) равны - тогда перевод не будет выполняться через Yii::t т.к. она будет считать что пользователь видит сайт на родном ему языке.

Или вы в контроллере Language напрямую устанавливаете и у вас не работает?

Да  я  язык  меняю  программно. Все  работает  и все  переводится  когда файлы  с  переводами  под  нужную  локаль  находятся  в каталоге заданном по умолчанию protected/messages , меня  же  интересует как перезадать каталог размещения  файлов  переводов , причем  хотелось бы  для  каждого модуля  чтобы он был свой.

интересно возможно ли сделать так как  я  спрашиваю ?

Получается  никто не  знает  решения  данной  проблемы ?

или  все  таки  так  настроить не  получится  этот механизм  перевода ?

у CPhpMessageSource есть basePath property, которая по умолчания в null, что подразумевает, что файлы перевода находятся в "protected/messages"

попробуй в модуле поменять на нужный тебе путь.

Quote

у CPhpMessageSource есть basePath property, которая по умолчания в null, что подразумевает, что файлы перевода находятся в "protected/messages"

попробуй в модуле поменять на нужный тебе путь.

Хорошо, а  как  тогда к  методу  t() обращаться , чтобы  он  понимал что нужно брать значения basePath  именно из  модуля,  а  ни приложения

Quote

Quote

у CPhpMessageSource есть basePath property, которая по умолчания в null, что подразумевает, что файлы перевода находятся в "protected/messages"

попробуй в модуле поменять на нужный тебе путь.

Хорошо, а  как  тогда к  методу  t() обращаться , чтобы  он  понимал что нужно брать значения basePath  именно из  модуля,  а  ни приложения

так я и говорю про CPhpMessageSource, а не про Yii. У CPhpMessageSource есть такая же функция translate. То есть в модуле пользуем метод CPhpMessageSource::translate() или свой производный класс от него в комбинации с basePath разным для каждого модуля.

Quote

Quote

Quote

у CPhpMessageSource есть basePath property, которая по умолчания в null, что подразумевает, что файлы перевода находятся в "protected/messages"

попробуй в модуле поменять на нужный тебе путь.

Хорошо, а  как  тогда к  методу  t() обращаться , чтобы  он  понимал что нужно брать значения basePath  именно из  модуля,  а  ни приложения

так я и говорю про CPhpMessageSource, а не про Yii. У CPhpMessageSource есть такая же функция translate. То есть в модуле пользуем метод CPhpMessageSource::translate() или свой производный класс от него в комбинации с basePath разным для каждого модуля.

потерялся  если  не трудно пример  дайте

Quote

потерялся  если  не трудно пример  дайте

откуда же взять? :) [армянский акцент]я так дюмаю![/армянский акцент]

ничего конкретного - как я понимаю из документации:

  1. создать свой класс, к примеру MyTranslate как производный от CPhpMessageSource.

  2. подключить его в модулях

  3. в каждом модуле прописать свой MyTranslate->basePath

  4. вызывать для перевода MyTranslate::translate(… , … , …);

Quote

Quote

потерялся  если  не трудно пример  дайте

откуда же взять? :) [армянский акцент]я так дюмаю![/армянский акцент]

ничего конкретного - как я понимаю из документации:

  1. создать свой класс, к примеру MyTranslate как производный от CPhpMessageSource.

  2. подключить его в модулях

  3. в каждом модуле прописать свой MyTranslate->basePath

  4. вызывать для перевода 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

'test'  это test.php

следующего содержания

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

'test'  это test.php

следующего содержания

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

'test'  это test.php

следующего содержания

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(

		&#039;import&#039;=&gt;array(


				&#039;application.modules.test.components.*&#039;,&nbsp; &nbsp; 


				&#039;application.modules.test.models.*&#039;,&nbsp; &nbsp; 

        ),

       

        'components'=>array(

        'mt'=>array(

	 	&nbsp; &nbsp; &nbsp; &#039;class&#039;=&gt;&#039;CPhpMessageSource&#039;,

              'basePath'=>'/home/sergey/www/myproject/protected/modules/test/messages/',

              'language'=>'ru_ua',

          ),

        ),

       

        ));

}

}

?>

Все разобрался,  нужно подключать в основном файле конфигурации компонент в модуль