2014-10-07 4 views
2

Я прочитал абсолютно все сообщения SO относительно интернационализации в CakePHP, и ничто, кажется, не работает для меня. Я использую CakePHP 2.5.1.Интернационализация CakePHP не работает

В конфигурации/bootstrap.php:

//Default language 
Configure::write('Config.language', 'spa'); 

В контроллере/AppController.php:

public $components = array('Session', 'DebugKit.Toolbar'); 

public function beforeFilter() 
{ 
    //Set the UI lang preference 
    if($this->Session->check('Config.language')) 
    { 
     Configure::write('Config.language', $this->Session->read('Config.language')); 
    } 
} 

Моя файловая структура, как так:

/Locale/ 
    - default.mo 
    - default.po 
    - default.pot 
    - eng/LC_MESSAGES/ 
     - default.mo 
     - default.po 

У меня есть ссылки на вид как таковой:

echo '<p class="">' . $this->Html->link('EN', array('controller' => 'users', 'action' => 'lang', 'en')) . '</p>'; 
echo '<p class="">' . $this->Html->link('ES', array('controller' => 'users', 'action' => 'lang', 'es')) . '</p>'; 

и мои пользователи контроллер выполняет следующие действия с этим:

public function lang($which) 
{ 
    if($which == "en") 
    { 
     $this->Session->write('Config.language', 'eng'); 
    } elseif($which == "es") 
    { 
     $this->Session->write('Config.language', 'spa'); 
    } else 
    { 
     $this->Session->setFlash(_('Unknown language.'), 'flash_red'); 
    } 
    $this->redirect('/'); 
} 

Когда я нажимаю на любую из ссылок (EN или ES), страница перезагружается, но показывает нормальный текст.

Любая подсказка о том, что я могу пропустить? Или какие-либо советы о том, где начать отладку в коде ядра Cake?

PD. Журналы ошибок ничего не показывают.

Спасибо!

+0

Первый шаг, удалите кеш ('/ app/tmp/cache /'). – ndm

+0

1) Измените конфигурацию/bootstrap.php, чтобы не иметь конфигурационную переменную с именем «Config.language» для языка по умолчанию: Конфигурация :: write ('Config.defaultLanguage', 'spa'); 2) Изменение контроллера/AppController.php if ($ this-> Session-> check ('Config.language')) {Configure :: write ('Config.language', $ this-> Session-> read ('Config.language'));} else {Configure :: write ('Config.language', Configure :: read ('Config.defaultLanguage'));} 3) Удалите все файлы из/app/tmp/cache/persistent /*.* 4) Подтвердите свои файлы po или используйте poedit 5) Используйте Debug Kit и следуйте за значениями сеансов –

+0

@ndm Я попытался удалить кеш, но это не исправить. – Sandy

ответ

0

Ошибка выше в том, что ONE подчеркивания используются вместо двух:

$this->Session->setFlash(_('Unknown language.'), 'flash_red'); 

должен быть

$this->Session->setFlash(__('Unknown language.'), 'flash_red'); 

Во всех остальных частях кода я только с помощью одного подчеркивания , когда для интернационализации это должно быть два.

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