JavaScript | サーバーサイド(Node.js)で Accept-Language を使ってロケールを判定する方法

JavaScript JavaScript
スポンサーリンク

では「サーバーサイド(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 を使う」といったハイブリッド運用が多いです。

タイトルとURLをコピーしました