言語検出:動的多言語サポート

この記事では、ユーザーの希望言語を自動検出し、その言語でコンテンツを提供する方法について説明します。

問題:グローバルユーザーへの対応

ユーザーは様々な国から様々な言語でアクセスします:

  • インド:ヒンディー語、ベンガル語、タミル語、テルグ語、グジャラート語、マラーティー語、カンナダ語、マラヤーラム語、パンジャブ語、ウルドゥー語

  • ヨーロッパ:ドイツ語、フランス語、スペイン語、イタリア語、ポルトガル語、ロシア語

  • アジア:日本語、韓国語、中国語

ユーザーの言語設定を検出し、自動的に翻訳されたコンテンツを提供する必要があります。

検出の優先順位

複数の情報源を以下の順序で確認します:

1. URLパラメータ (?lang=hi)

2. セッション (初回検出後に保存)

3. クッキー (translation_lang または lang)

4. ブラウザのAccept-Languageヘッダー (将来実装)

5. デフォルト (英語)

この順序の理由

URLパラメータを最初に: 明示的な言語切替を可能にするため

セッションを次に: ブラウジングセッション中に維持されるため

クッキーを3番目に: セッションをまたいで保持されるため (30日間)

デフォルトを最後に: 新規ユーザーのためのフォールバック

実装

def get_locale():
    # 1. URLパラメータを確認
    lang_param = request.args.get("lang")
    if lang_param in valid_langs:
        return lang_param

    # 2. セッションを確認
    if "translation_lang" in session:
        return session["translation_lang"]

    # 3. クッキーを確認
    # ... (実装詳細は省略)

言語切替

ユーザーはURL経由で言語を切替えられます:

/p/Treo-N100-8-256?lang=hi

これにより以下がトリガーされます:

1. セッション設定: session["translation_lang"] = "hi"

2. クッキー設定: translation_lang=hi; Max-Age=2592000 (30日間)

3. リダイレクト: URLからlangパラメータを削除

利点: 言語選択後のクリーンなURL

対応言語

20言語をサポートしています:

インドの言語 (10):

  • ヒンディー語 (hi)

  • ベンガル語 (bn)

  • タミル語 (ta)

  • テルグ語 (te)

  • グジャラート語 (gu)

  • マラーティー語 (mr)

  • カンナダ語 (kn)

  • マラヤーラム語 (ml)

  • パンジャブ語 (pa)

  • ウルドゥー語 (ur)

ヨーロッパの言語 (7):

  • ドイツ語 (de)

  • フランス語 (fr)

  • スペイン語 (es)

  • イタリア語 (it)

  • ポルトガル語 (pt)

  • ロシア語 (ru)

アジアの言語 (3):

  • 日本語 (ja)

  • 韓国語 (ko)

  • 中国語 (zh)

コンテンツ翻訳

異なるコンテンツタイプは異なる翻訳方法を使用します:

静的テンプレート (Flask-Babel)

ナビゲーション、ボタン、ラベルは.poファイル経由で翻訳:

{{ _('Add to Cart') }}  → "कार्ट में जोड़ें" (ヒンディー語)

動的コンテンツ (TranslationManager)

製品名、機能はフレーズテーブル経由で翻訳:

"Mini PC" → "मिनी पीसी" (ヒンディー語)

長文コンテンツ (DeepSeek AI)

製品説明、記事はAI経由で翻訳:

"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (ヒンディー語)

詳細は: 翻訳システム を参照

地域別フォーマット

言語選択はフォーマットにも影響します:

数字フォーマット

英語: 1,234.56

ヨーロッパ: 1.234,56 (区切り文字が逆)

インド: 1,23,456 (ラク/クロールのグループ化)

日付フォーマット

英語: Feb 18, 2026

ヨーロッパ: 18.02.2026

インド: 18/02/2026

通貨

英語: ₹1,234

ヨーロッパ: €1.234

国際: $1,234

言語選択UI

ユーザーはドロップダウンで言語を切替えられます:

位置: トップナビゲーションバー

表示: 国旗アイコン + 言語名

動作: ?lang=<コード>でページを再読み込み

SEO考慮事項

URL構造

すべての言語で単一URLを使用します (/hi/, /de/プレフィックスなし):

利点: シンプルなアーキテクチャ、重複コンテンツ問題なし

トレードオフ: 言語ごとのSEO価値が低い

Hreflangタグ

代替言語リンクを追加します:

<link rel="alternate" hreflang="en" href="https://www.thinvent.in/p/Treo-N100">
<link rel="alternate" hreflang="hi" href="https://www.thinvent.in/p/Treo-N100?lang=hi">
<link rel="alternate" hreflang="de" href="https://www.thinvent.in/p/Treo-N100?lang=de">

利点: Googleがどの言語版を表示するかを認識

フォールバック戦略

選択言語の翻訳が欠落している場合:

1. 英語を試す: ほとんどのコンテンツに英語版がある

2. 原文を表示: 何も表示しないより良い

3. 翻訳キューに追加: バッチ処理のために翻訳キューに追加

パフォーマンス

キャッシュ

翻訳はメモリ内にキャッシュされます:

フレーズテーブル: 起動時に一度だけ読み込み

AI翻訳: データベースにキャッシュ

利点: リクエストごとの翻訳オーバーヘッドなし

レイジーローディング

翻訳は必要な時だけ読み込まれます:

製品説明: 製品ページ表示時に読み込み

クエリページコンテンツ: クエリページ表示時に読み込み

利点: 初期ページ読み込みが高速

参考文献

技術的概念

ライブラリ

関連記事

まとめ

言語検出は優先順位システムを使用します:

検出順序:

  • ✅ URLパラメータ (?lang=hi)

  • ✅ セッション (ブラウジング中)

  • ✅ クッキー (30日間)

  • ✅ デフォルト (英語)

サポート:

  • ✅ 20言語 (10インド語、7ヨーロッパ語、3アジア語)

  • ✅ 地域別フォーマット (数字、日付、通貨)

  • ✅ SEO hreflangタグ

翻訳方法:

  • ✅ Flask-Babel (静的テンプレート)

  • ✅ TranslationManager (製品名、機能)

  • ✅ DeepSeek AI (説明、記事)

パフォーマンス:

  • ✅ メモリ内キャッシュ

  • ✅ レイジーローディング

  • ✅ AI翻訳のデータベースキャッシュ

これにより、自動言語検出とシームレスな多言語体験が可能になります。


← ドキュメントインデックスに戻る