3

オブジェクト言語があり、管理ページから言語を追加、削除、および更新できます。

私がやりたいことは、言語スイッチャーを追加することです。このhtml/twigコードを入れます:

 {% for language in languages %}         
      <li><a href="{{ path('evr_footer_switch_language',{'locale': language.code | lower }) }}">{{ language.language | capitalize }} ({{ language.code }})</a></li>
 {% endfor %}

the route for the action is evr_footer_switch_languageそして、上記のスイッチャーで使用した action :

 public function switchlanguageAction($locale = 'en') {

        $this->get('session')->set('_locale', $locale);
        $request = $this->getRequest();
       $request->setLocale($locale);
        return $this->redirect($request->headers->get('referer'));
    }

これは、アクション/コントローラー用に定義したルートです switchlanguageAction()

evr_footer_switch_language:
    pattern: /language/switch/{locale}
    defaults: { _controller: EvrHomeBundle:Footer:switchlanguage, locale: en }

原則として非常に単純に思えます。言語のリンク (データベースから取得) をクリックし、言語のコード (例: 'fr'、'en'、'zh' など) を送信します。アクションを $locale 変数として設定し、セッション/リクエストの Locale をこの値に設定します。

問題は、これが機能せず、言語がまだ「EN」(デフォルト値) であることです。

注:このプロジェクトの要件によると、言語を URL (fr/articles、en/articles など) に記載することはできませんが、同じ URL (/articles/) を別の言語で表示することはできます。事前定義されたスラッグ (_locale) を使用しないでください。

ありがとう

4

3 に答える 3

3

回答を書くためにさらに詳細を探しているときに、このSymfonyクックブックのエントリに出くわしました: Making the Locale "Sticky" during a User's Session

私はそれがまさにあなたが必要としているものだと思います;)

于 2014-02-06T23:28:06.933 に答える