5

symfony を始めたばかりで、多言語の Web サイトを構築しようとしていますが、ロケールを変更するのに問題があります

いくつかの投稿を読み、これに関するドキュメントを読みましたが、ロケールは変更されません。試してみます:

public function indexAction()
{    
    $this->get('session')->set('_locale', 'fr');

    $request = $this->getRequest();
    $locale = $request->getLocale();
    return $this->render('PhoneMainBundle:Default:index.html.twig',array('locale'=>$locale));
}

ただし、$locale の値は常に「en」です (私のデフォルトのロケール)

私もやってみる

public function indexAction()
{    
    $this->get('session')->set('_locale', 'fr');

    $request = $this->getRequest();
    $request->setLocale('fr');
    $locale = $request->getLocale();

    return $this->render('PhoneMainBundle:Default:index.html.twig',array('locale'=>$locale));
}

この場合、$locale は fr ですが、翻訳は常に messages.en.yml から行われます。

$_SERVER['HTTP_ACCEPT_LANGUAGE'] を使用して初めてユーザー ロケールを検出したいのですが、おそらく各ページの実現でリスナーを使用していますか?

そして、ロケールを変更するルートを作成した後

しかし、ロケールを変更する方法を見つけたいと思います。

ご協力いただきありがとうございます

4

3 に答える 3

0

たとえば、デフォルトのロケールがフランス語である場合、1 つのコントローラーを除いて、デフォルトのロケールを英語に設定することができます。

ルーティング.yml

desktop_comingsoonpage:
    resource: "@RemmelComparabusBundle/Controller/ComingsoonpageController.php"
    defaults: { _locale: en }
    type:     annotation

詳細 : Symfony のドキュメント

于 2015-02-22T19:40:20.190 に答える
0

ただし、これを追加してより動的にしました

services.yml

 services:
        acme.language.kernel_request_listener:
            class: Acme\UserBundle\EventListener\LanguageListener
            tags:
                - { name: kernel.event_listener, event: kernel.request, method: setLocale }
            arguments: [ @router, @service_container ]

LanguageListener.php:

<?php

namespace Acme\UserBundle\EventListener;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class LanguageListener
{
     private $session;
     private $container;
     private $router;

    public function __construct($router, $container)
    {
        // ...
        $this->router= $router;
        $this->container = $container;
    }

    public function setSession(Session $session)
    {
        $this->session = $session;
    }

    public function setLocale(GetResponseEvent $event)
    {
        if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }

        $request = $event->getRequest();    
        $request->setLocale($request->getPreferredLanguage($this->container->parameters['jms_i18n_routing.locales']));

    }
}

config.yml からパラメーターと値を取得できるようにするだけです。

よろしく、ウィック

于 2014-08-16T10:38:08.553 に答える