我使用Yii2中的模型实现了API Rest的结构。一切都适用于动作(索引,创建,更新等...)和方法(GET,POST,PUT等...)但是我对ContentNegotiator
类有问题。
具体来说,如果我作为GET参数传递要转换响应的语言,则忽略它。
根据设置响应语言的文档,我们需要设置ContentNegotiator
的允许语言(查看我的behaviors()
)并提出如下请求:
http://localhost/api/v1/users?_lang=it-IT
但是回复仍然是英文。为什么???什么都不反对英语=)
这是从ActiveController
延伸的yii\rest\Controller
子类。
use yii\rest\ActiveController;
use yii\filters\VerbFilter;
class AActiveController extends ActiveController
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['verbFilter'] = [
'class' => VerbFilter::className(),
'actions' => $this->verbs(),
];
$behaviors['contentNegotiator']['languages'] = [
'en-EN',
'it-IT',
'de-DE',
'ru-RU',
];
return $behaviors;
}
...
N.B。:我通过框架的yii\filters\ContentNegotiator
类进行调试,此时应用程序语言设置正确,但响应始终为英文。
public function negotiate()
{
$request = $this->request ?: Yii::$app->getRequest();
$response = $this->response ?: Yii::$app->getResponse();
if (!empty($this->formats)) {
$this->negotiateContentType($request, $response);
}
if (!empty($this->languages)) {
Yii::$app->language = $this->negotiateLanguage($request);
}
debug(Yii::$app->language); // result OK!: it-IT
}
答案 0 :(得分:2)
看起来某些内置错误未被翻译,例如yii\rest\Action:103
会导致throw new NotFoundHttpException("Object not found: $id")
未翻译。您有不同的方法来解决此问题:
有关i18n see documentation的更多信息。