多言語対応に関して、相談したいです。
HTTP ヘッダーについて
HTTP ヘッダーには、クライアントやサーバーが HTTP リクエストやレスポンスで追加情報を渡すことができます。 詳細情報はこちらです。
多言語対応するため、共通方法があります。HTTP ヘッダーの「Accept-Language」と「Content-Language」値で設定できます。 「Accept-Language」と「Content-Language」の詳細情報は下記となります。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Accept-Language
HTTP の Accept-Language リクエストヘッダーは、クライアントがどの言語を理解できるか、どの種類のロケールが推奨されるかを示します。 (言語というのは、英語のような自然言語を意味し、プログラミング言語ではありません。) コンテンツネゴシエーションを使用して、サーバーは提案されたものから一つを選択して使用し、 Content-Language レスポンスヘッダーを使用してクライアントに選択結果を知らせます。ブラウザーはユーザーインターフェイスの言語に従って、このヘッダーに適切な値を設定し、ユーザーはこれを変更することができますが、稀です (そして指紋につながるとして難色を示されます)。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Language
Content-Language は エンティティヘッダー で、ユーザが自分の好みの言語に応じて区別できるように、オーディエンス向けの言語を記述するために使用されます。
つまり、リクエストのヘッダー場合は、 「Accept-Language」を使用します。 レスポンスのヘッダー場合は、 「Content-Language」を使用します。
たとえば、
- 「Accept-Language: ja」をリクエストのヘッダーに設定する
- サーバーは日本語テキストを返却し、「Content-Language: ja」をレスポンスのヘッダーに設定する
英語(en)と中国語(zh)/中国語簡略化(zh-Hans)/中国語伝統的(zh-Hant)は同じです。
メリット
API設計:不要な値を省略する
・全部多言語データをレスポンスに渡す例:
// 必要
"helloText": "おはよう",
// 不要
"helloTextEn": "hello",
// 不要
"helloTextZh": "你好",
-> 👌
// header: Accept-Language: ja
"helloText": "おはよう",
API設計も省略できます。(それぞれAPIには「英語・中国語・・」キーが切り替える)
・パラメーターに設定不要になる
例:get-data?lang=en&data-id=1
-> 👌
// header: Accept-Language: en
get-data?data-id=1
パフォーマンス
- 返却データ量を減らす(テキスト量による)
- バックエンドの処理を減らす(データベースに関する)
- フロントエンドの処理が減らす(if/elseで設定した言語あり・なしことを確認必要)
3言語以上対応の場合、便利になる
将来に3言語以上対応の場合、全部多言語データをレスポンスに渡す場合は無理になる
例:
// 必要
"helloText": "おはよう",
// 不要
"helloTextEn": "hello",
// 不要
"helloTextZh": "你好",
...
// 不要
"helloTextVn": "xin chào",
多言語対応に関しては、HTTP ヘッダーの方法を検討してください。
画像のソース: