2014-10-07 71 views
2

我已經絕對閱讀過有關CakePHP國際化的SO帖子,而且似乎沒有任何東西可以用於我。我正在使用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 2014-10-07 03:55:41

+0

1)改變config/bootstrap.php以便沒有名爲「Config.language」的默認語言配置變量: 配置:: write('Config.defaultLanguage','spa');如果($ this-> Session-> check('Config.language')){Configure :: write('Config.language',$ this-> Session-> read(012) 'Config.language'));} else {Configure :: write('Config.language',Configure :: read('Config.defaultLanguage'));} 3)從/ app/tmp/cache /持久/*.* 4)驗證您的po文件或使用poedit 5)使用調試包,並按照會話值 – 2014-10-07 11:56:28

+0

@ndm我試過刪除緩存,但這並沒有解決它。 – Sandy 2014-10-07 15:36:16

回答

0

以上的錯誤是一個下劃線正在被使用,而不是兩個:

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

應該是

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

在代碼的所有其他部分我只使用一個下劃線,當它應該是兩個國際化。