1

言語を切り替えて同じページに戻るための小さなアイコンを実装しましたが、新しい Symfony2.2 の_locale動作に行き詰まります。

<a class="lang" href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">
    <img src="{{ asset('bundles/fuzlayout/images2/locale_fr.png') }}" title="Français" alt="Français" />
</a>
 &nbsp;
<a class="lang" href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'en'})) }}">
    <img src="{{ asset('bundles/fuzlayout/images2/locale_en.png') }}" title="English" alt="English" />
</a>

これは以下を表示します:

ここに画像の説明を入力

Web サイトのどこでもロケールをクリックすると、すべてのルートが有名な引数を取るため、これは_locale問題ありません。たとえば、次のページにいる場合です。

fuz_home_test:
    pattern:  /{_locale}/test
    defaults: { _controller: FuzHomeBundle:Default:test }
    requirements:
      _locale: fr|en

次のルートで生成される URL は/fr/testまたはになります/en/test

_localeしかし、私のホームページにはパラメータを含めることができません:

fuz_home:
    pattern:  /
    defaults: { _controller: FuzHomeBundle:Default:index }

次のようなデフォルトの引数を入れた場合:

fuz_home:
    pattern:  /{_locale}
    defaults: { _controller: FuzHomeBundle:Default:index, _locale: %locale% }
    requirements:
      _locale: fr|en

デフォルトでは、Symfony はユーザーのオリジナルのロケールではなくフォールバック ロケールを使用します。

だから私の質問は: 多言語ホームページを作成する方法?

4

1 に答える 1

2

問題に一晩中費やした後、私はついに解決策を得ました。

/ユーザーのロケールに応じて、適切な翻訳されたホームページにユーザーをリダイレクトするコントローラーにバインドする必要があります。

あなたのルーティングで:

fuz_index:
    pattern:  /
    defaults: { _controller: FuzHomeBundle:Default:index }

fuz_home:
    pattern:  /{_locale}
    defaults: { _controller: FuzHomeBundle:Default:home }
    requirements:
      _locale: fr|en

あなたのコントローラーで:

public function indexAction()
{
    $router = $this->get('router');
    $locale = $this->getRequest()->getLocale(); // here is the magic!
    $url = $router->generate('fuz_home', array('_locale' => $locale));
    return new RedirectResponse($url);
}

public function homeAction()
{
    return $this->render('FuzHomeBundle:Default:index.html.twig');
}

編集

最後に、標準ルーティングを使用して i18n を透過的に管理するJMSI18nRoutingBundleをインストールしました。特に特別なビュー (404 / エラーのフォールバック、ログイン要求ページなど) では、Symfony2 の組み込みの方法よりもはるかに簡単です。

于 2013-04-28T21:17:17.303 に答える