使用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'),
...
]
它的工作原理。
'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
是的,该作品谢谢你。 – cpliu338