在控制器中使用CakePHP 3国际化

在控制器中使用CakePHP 3国际化,php,ajax,cakephp,cakephp-3.0,Php,Ajax,Cakephp,Cakephp 3.0,在控制器中,我需要在Ajax json响应中返回翻译后的消息,如下所示: $body['message'] = __("Duplicated"); $this->response->body(json_encode($body)); $this->response->statusCode(202); $this->response->type('json'); return $this->response; 但是翻译没有查到。但是,在模板中,我能够实

在控制器中,我需要在Ajax json响应中返回翻译后的消息,如下所示:

$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()中,我可以使用以下内容覆盖(但事实上,这不起作用):

当我将config/app.php更改为

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

它可以工作。

beforeRender
发生在控制器操作运行之后,视图呈现之前。因此,事情正在按预期进行。
'App' => [
...
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'zh'),
...
]