1

私の目標は、ローカル ユーザーのブラウザーを認識し、自動的に言語を設定することです。

次に、ユーザーが言語を変更できるようにし、それを他のページに保持します。

当時、私はこのようにルートを設定しました:

# homepage not localized: load the homepage with default language
index_not_localized:
   path:   /
   defaults:  { _controller: "AcmeSiteBundle:Default:index", _locale: %locale% }


acme_site:
   resource: "@AcmeSiteBundle/Controller/"
   type:     annotation
   prefix:   /{_locale}
   defaults:  { _locale: %locale% }
   requirements:
        _locale:  %route_locale_requirements%

ユーザーがローカル ルートで言語を指定せずに example.com ページに入ると、デフォルトで設定されており、ページには言語を変更できるスイッチャーがあります。

<ul class="dropdown-menu">
     {% for locale in ['en', 'it'] %}
         <li>
             <a href="{{ path('homepage', {'_locale': locale}) }}">
         </li>
     {% endfor %}
</ul>

やりたいことはどうすればいいですか?

リスナーを作成する必要がありますか? 私はローカルセッションを入れていますか?

混乱しています。いくつかの回答を読みましたが、明確な回答が見つかりません!

4

1 に答える 1

0

少なくとも 2 つの方法がありますが、どちらもロケールを検出して正しく検出する 100% の保証はありません。

$_SERVER['HTTP_ACCEPT_LANGUAGE']1つ目は、変数を使用することです。HTTP ヘッダー経由で取得され、存在しないことさえあります。

2 つ目は、サードサイド サービスを使用して IP アドレスで国を検出し、国名を国とそのロケールのローカル テーブルと比較することです。例えば:

http://api.hostip.info/get_html.php?ip=127.0.0.1

詳細とコメントについては、次の質問を参照してください: PHP でクライアント ロケールを検出する最も簡単な方法

最後のポイントは、ロケール検出を symfony2 プロジェクトに統合することです。これは最も単純な部分です。kernel.requestイベントリスナーを使用するだけです。ここですべてが完全に説明されています(例を含む):Symfony 2.1 set locale

于 2013-07-15T16:21:59.707 に答える