言語とタイムゾーンの配線
表示言語は URL のプレフィックスで決まります。すべての API 呼び出しは X-Locale と X-Timezone を明示的に送信し、サーバーの応答は Content-Language と照合します。
- API ベース URL
http://127.0.0.1:8092- 表示言語(URL プレフィックス由来)
ja- サーバーが解決した言語(Content-Language)
ja- フロント/バックの言語一致チェック
- ✓ 表示言語と一致しています
- API が対応している言語
en, zh-CN, ja- 表示タイムゾーン
Asia/Shanghai- サーバー時刻(UTC のまま)
2026-10-16T17:12:26Z- 表示タイムゾーンに変換した時刻
2026/10/17 1:12:26
サーバーが実際に返したもの
このページの他の文言はフロント側のメッセージ(ICU)です。この 2 つは API の応答そのままで、フロントは翻訳しません。ヘッダーで言語を切り替えて変化を確認してください。
サーバーが描画した完成済みの文言(レスポンス本文の `message`)成功しましたこのリクエストの X-Locale に応じてバックエンドが描画したもの — フロント側の文字列ではありません
- 主なレスポンスヘッダー
- Content-Language: ja
- X-Timezone: Asia/Shanghai
- body.locale: ja
- body.timezone: Asia/Shanghai
レスポンス本文(生)
{
"code": 0,
"data": {
"status": "ok",
"service": "fan-shop-api",
"version": "dev",
"started_at": "2026-10-16T16:55:07Z",
"uptime_seconds": 1039,
"time": "2026-10-16T17:12:26Z"
},
"locale": "ja",
"message": "成功しました",
"timezone": "Asia/Shanghai"
}実験:わざと不一致を起こす
送信する X-Locale を選び、サーバーが実際にどの言語で描画するかを確認できます。未対応の値を送ると、サーバーは即座にソース言語へフォールバックします — だからこそフロントは「対応言語に写像できない値」を送ってはいけません。
送料の目安
言語を切り替えても深いパスを保持
置き換えるのは先頭セグメントだけです:/en/a/b と /zh-CN/a/b は同じページの別言語版です。