使用CakePHP 3国际化控制器

问题描述:

在控制器,我需要在Ajax JSON响应为返回翻译消息:使用CakePHP 3国际化控制器

$body['message'] = __("Duplicated"); 
$this->response->body(json_encode($body)); 
$this->response->statusCode(202); 
$this->response->type('json'); 
return $this->response; 

但翻译不抬头。然而,在一个模板,我能够得到这个工作:

<?= __("Duplicated");?> 

我知道我可以使用Ajax的布局和编写模板,但在这种情况下,消息的身体很短,我需要返回状态码不是200.我怎样才能在CakePHP 3的控制器中执行此操作?

这似乎是一个CakePHP的错误(不是一个错误,请参阅下面的评论)。我在app.php

'App' => [ 
... 
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), 
... 
] 

和AppController的:: beforeRender(),根据http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#changing-the-locale-at-runtime我可以覆盖这个(但其实不工作):

I18n::locale('zh'); 

当我改变config/app.php到

'App' => [ 
... 
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'zh'), 
... 
] 

它的工作原理。

+0

'beforeRender'发生_after_控制器操作已运行,_before_视图正在呈现。所以事情按预期工作。 ** [http://book.cakephp.org/3.0/en/controllers.html#Cake\Controller\Controller::beforeRender](http://book.cakephp.org/3.0/en/controllers.html#Cake \ Controller \ Controller :: beforeRender)** – ndm

+0

是的,该作品谢谢你。 – cpliu338