Yii2のモデルでAPI Restの構造を実装しました。すべては、アクション(インデックス、作成、更新など)とメソッド(GET、POST、PUTなど)に最適ですが、私はContentNegotiator
クラスに問題があります。 特に、応答を翻訳する言語をGETのパラメータとして渡すと、これは無視されます。 我々はContentNegotiator
の許可の言語を設定する(私のbehaviors()
を見て)、このような要求をするために必要な応答の言語を設定するためのドキュメントによると:Yii2 RESTful:コンテンツネゴシエーション言語が機能しない
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
}
「ただし、応答は引き続き英語で行われます」とはどういう意味ですか? ContentNegotiatorはlang appフィールドのみを設定できます。翻訳が必要な場合は、自分でそれを行う必要があります。 – Torv
私は答えがイタリア語に翻訳されていないことを意味します – alvarofvr
フレームワークはあなたのカスタムデータを翻訳できません。 – Torv