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

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 25 May 2009 - 01:43 PM

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

0

#2 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 25 May 2009 - 02:38 PM

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

#3 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 25 May 2009 - 03:04 PM

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

#4 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 25 May 2009 - 04:08 PM

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

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

#5 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 26 May 2009 - 12:28 AM

Quote

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

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

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



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

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

#6 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 27 May 2009 - 03:58 AM

Quote

Quote

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

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

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



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


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

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


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

0

#7 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 28 May 2009 - 08:45 AM

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

#8 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 12:16 PM

Quote

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

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

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

#9 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 28 May 2009 - 01:08 PM

Quote

Quote

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

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


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


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

0

#10 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 01:12 PM

Quote

Quote

Quote

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

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


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




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

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

#11 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 28 May 2009 - 01:43 PM

Quote

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

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

ничего конкретного - как я понимаю из документации:
1. создать свой класс, к примеру MyTranslate как производный от CPhpMessageSource.
2. подключить его в модулях
3. в каждом модуле прописать свой MyTranslate->basePath
4. вызывать для перевода MyTranslate::translate(... , ... , ...);
0

#12 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 01:51 PM

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',

Ничего не переводит

Или  я все-таки не верно написал ?
0

#13 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 28 May 2009 - 02:03 PM

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('Тестирование'=>'Тестування');
0

#14 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 02:16 PM

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')

А  не работало  , первое  это  ошибся  в  регистре    в  функцию  поставил все  с прописных а в файл  с  переводами  заглавные
0

#15 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 02:20 PM

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') все  работает,  спасибо за помощь.
0

#16 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 28 May 2009 - 02:58 PM

Хочется все сделать компактным в  модуле создая компонент и  хочу  к нему  обращаться.
Компонент думаю правильно объявил. только не получается  к нему обратиться
Научите как это делается , пример объявления ниже
<?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',
          ),
        ),
       

        ));
}
}
?>
0

#17 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 29 May 2009 - 01:32 AM

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users