では「サーバーサイド(Node.js)で Accept-Language を使ってロケールを判定する方法」を見てみましょう。
ゴール
- ブラウザから送られてくる
Accept-Languageヘッダー を使ってユーザーの希望言語を判定 - そのロケールを使って Intl API で日付や金額をフォーマット
- Express.js を例に実装
サンプルコード(Express.js)
import express from 'express';
const app = express();
app.get('/', (req, res) => {
// Accept-Language ヘッダーを取得
const acceptLang = req.headers['accept-language'] || 'en-US';
// 最初の言語コードを抽出(例: "ja,en;q=0.9" → "ja")
const lang = acceptLang.split(',')[0];
// Intl API を使って日付をフォーマット
const now = new Date();
const dateFormatter = new Intl.DateTimeFormat(lang, {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
});
const formattedDate = dateFormatter.format(now);
res.send(`Hello! Current date in your locale (${lang}): ${formattedDate}`);
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
JavaScript動作イメージ
- ブラウザが
Accept-Language: ja,en;q=0.9を送信 →lang = "ja"
→ 出力例:2025年10月26日日曜日 - ブラウザが
Accept-Language: en-US,en;q=0.9を送信 →lang = "en-US"
→ 出力例:Sunday, October 26, 2025
ポイント
req.headers['accept-language']でブラウザの言語設定を取得- 複数言語が送られてくる場合があるので、最初のものを優先
- Intl API を使えばサーバーサイドでも多言語フォーマットが可能
💡 実務では「ユーザーがログインしている場合はプロフィール設定の言語を優先」「未ログインなら Accept-Language を使う」といったハイブリッド運用が多いです。

