6

symfony2.1のWebサイトで言語スイッチャーを使用しようとしています。

私は公式ドキュメントに従い、翻訳ファイルを設定しましたが、ロケールを$ request-> setLocale('en_US');で設定しました。動作しないようです。いくつかの調査の後、私はこのリスナーテクニックで答えの始まりを提供するこの質問を見つけました。

しかし、私はまだそれを機能させることができません、私は私のリスナー宣言についてよくわかりません、それは何か問題がありますか?

私のコントローラー:

public function englishAction(Request $request)
{
    $this->get('session')->set('_locale', 'en_US');
    return $this->redirect($request->headers->get('referer'));
}

config.ymlでのサービス宣言:

services:
    my_listener:
        class:        "FK\MyWebsiteBundle\Listener\LocaleListener"

私のルーティング:

homepage:
    pattern:  /{_locale}
    defaults: { _controller: FKMyWebsiteBundle:Default:index, _locale: en }
    requirements:
        _locale: en|fr|cn
about:
    pattern:  /{_locale}/about
    defaults: { _controller: FKMyWebsiteBundle:Default:about, _locale: en }
    requirements:
        _locale: en|fr|cn
4

2 に答える 2

9

ymlでのLocaleListenerの宣言(新しいLocaleListenerの現在の宣言に触発されました:\ vendor \ symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Resources \ config \ web.xml)

services:
    my_listener:
        class: "FK\MyWebsiteBundle\Listener\LocaleListener"
        arguments: [%locale%]
        tags:
            -  { name: kernel.event_subscriber }

いくつかのスニペット:

テンプレート内の言語スイッチャー:

{% for locale in ['en', 'fr', 'cn'] %}
    <li {% if locale == app.request.locale %}class="active"{% endif %}>
        <a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : locale})) }}">{{ locale }}</a>
    </li>
{% endfor %}

コントローラからのロケール変更を伴うリダイレクト:

$LocalizedUrl = $this->get('router')->generate(
    $request->attributes->get('_route'), 
    ['_locale' => $locale] + $request->attributes->get('_route_params')
);

return new \Symfony\Component\HttpFoundation\RedirectResponse($LocalizedUrl);
于 2012-10-18T10:54:28.837 に答える
1

トランスレータインスタンスをsymfonyカーネルコンテナにリンクする必要があります。

$this->container->get('translator')->setLocale('fr');
于 2015-11-21T10:41:18.267 に答える