2013-09-13 6 views
0

У меня есть это в мой Config/core.phpCakePHP - Использование функция локализации (__()) в основные файлы

Configure::write('Product', array(
    ... 
    'Colors' => array(
     'black'  => __('Black'), 
     'brown'  => __('Brown'), 
     'grey'  => __('Grey'), 
     'white'  => __('White'), 
     'blue'  => __('Blue') 
    ), 
    ... 
)); 

В файле представление (.ctp), я рендеринг этого массив в виде JSON:

$config = array(
    ... 
    'colors' => Configure::read('Product.Colors'), 
    ... 
); 

echo '(function(){window.AppCfg=' . json_encode($config) . '}).call(this);'; 

Если теперь я изменяю текущий язык, цвета остаются на английском языке. Если я вставляю массив из core.php прямо в мой .ctp, тогда он отлично работает - почему? Я уверен, что раньше использовал __() в core.php.

+0

И где, когда и как именно вы меняете язык? – ndm

+0

Он жестко запрограммирован в начале core.php: 'Configure :: write ('Config.language', 'deu');' –

ответ

1

Это рано, чтобы сделать это в core.php, по the time this file is included, правильные пути для приложения aren't built yet, и, следовательно, связывание ДОМЕНЕ потерпит неудачу в the locale path is yet unknown.

Просто переместите все, что связано с вызовом __() (это то, что вызывает привязку textdomain) от вашего core.php в ваш файл bootstrap.php, и вы должны быть хорошими.

+0

Пробовал задавать 'Configure :: write ('Config.language', 'deu');' в bootstrap и AppController-> beforeFilter, но ничего. –

+0

Если я переопределяю 'Configure :: write ('Product.Colors', ...)' в 'AppController-> beforeFilter()', то он работает, но это не то, что я хочу. –

+0

Возможно, я должен был сделать это более понятным, это часть 'Configure :: write ('Product', ...)', которая должна войти в файл 'bootstap.php', то есть вызовы' __() ', поскольку они фактически вызывают привязку textdomain. Я обновил свой ответ. – ndm

Смежные вопросы