6

symfony 2.1 Web サイトでロケールを変更する際に問題が発生しました。

_localeすべてのルートでを使用せずに lang を変更できる方法が見つかりません。これが基本的なルールに反していることは承知していますが、このコンテンツはメンバーのみであるため、たとえばエンジンによってインデックス化されません。

通常、リクエスト (バージョン 2.1 からの BC) またはセッションでロケールを変更できる簡単な方法が必要ですが、それをスムーズに行う方法がわかりません。そのためのリスナーの使用も避けたいと思います。

config.yml ファイル:

framework:
    translator:      { fallback: %locale% }
    session:

routing.yml ファイル:

route_change_lang:
    pattern:   /changelang/{newlang}
    defaults:  { _controller: AcmeCoreBundle:Default:switchLanguage, newlang: en }
    requirements:
        newlang: en|fr|de

ルーターのロケールを更新する簡単なアクション:

public function switchLanguageAction($newlang)
{

    $request = $this->getRequest();

    $request->setLocale($newlang);

    $referer_url = $this->get('request')->headers->get('referer');
    if ($referer_url != null) {
        return $this->redirect($referer_url);
    } else {
        return $this->redirect($this->generateUrl('route_home'));
    }
}

何が問題ですか?メインのconfig.ymlファイルに設定されているdefault_localeに関連していると思いますが、ドキュメントはあまり明確ではありません。ヘルプ/ヒントをいただければ幸いです

4

3 に答える 3

1

URLでロケールを使用できないため、同じ問題に遭遇しました(seoの問題)。また、en_US などのロケールを使用し、それらは直接フレームワーク アクセスの外にある構成に保存されます。私がしたことは、イベント リスナーを登録し、onKernelRequest イベントにフックすることです。そこで、ロケールがセッションに設定されているかどうかを確認し、そうでない場合は、リクエストとセッションの両方に追加します。このようにして、フレームワークは 2.1 以前と同じように動作し続けます。これを行う方法についてさらに情報が必要な場合は、コメントしてください。ここでいくつかの例を編集します :-)

于 2012-10-16T14:38:40.917 に答える
0

https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1で説明されているように古い動作を復元し、 Carlos Granados のコードを使用します。

私の別の回答を読むこともできますhttps://stackoverflow.com/a/12952999/520114

于 2012-08-29T13:35:34.207 に答える
-1

リクエストでロケールを設定すると、これは現在のリクエストにのみ使用されます。次回リクエストが発行されるときは、default_locale が使用されます。現在 (2.1) ロケールがセッションではなくリクエストに設定されている場合でも、「リクエストごとではなくセッションにロケールを保存することもできます。これを行うと、後続の各リクエストはこのロケールを持ちます。 ." (ドキュメントから)。したがって、次のことを行う必要があります。

$this->get('session')->set('_locale', $newlang);
于 2012-08-27T17:59:11.927 に答える