i18n, где хранить константы ?

Друзья.

Столкнулся с такой проблемой. Есть несколько мест в коде где используются списки данных типа




$data = array(

1 => Yii::t('app', 'Value 1'),

2 => Yii::t('app', 'Value 2'),

3 => Yii::t('app', 'Value 3'),

);



хранение в Yii::app()->params не спасает, переключение локали происходит в базовом контроллере в методе beforeAction()

Вот как-то так Yii::app()->setLanguage($code);

ну и соответственно при таком раскладе данные не переводятся.

Вопрос, где их лучше хранить что бы переводы заработали

P.S. в messages все ок

В params в списке поставь просто тексты, а в нужном месте делай так:

Yii::t(‘category’, $myParam)

Да, не очень красиво.

Да, такие вещи придётся добавить в отдельную категорию типа manual_translation и поддерживать переводы этого файла в ручную.

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

Можно поступить немного по другому - создать компоненту, в которой записаны эти списки в том виде, что ты указывал и подгружать её уже в приложении в нужных местах - тогда вообще никаких проблем, разве что тексты будут в компоненте.

ну первый вариант точно не пойдет, потому что все таки массив, вручную поставлять не то.

про компонент можно конечно подумать.

Я заводил классы-словари. Типа


class FormDictionary implements ArrayAccess, Iterator, Countable {

  protected $_data = array();

...



И уже словарь наследовался от FormDictionary с установкой нужной $_data в конструкторе.


  public function __construct($type)

  {

    $this->_data = array(

      2 => Yii::t('Form', 'Жен'),

      1 => Yii::t('Form', 'Муж'),

    );

  }



Потом появился CArrayDataProvider - можно глянуть и его.