2

次のようなルートを宣言したいと思います: /{_locale}/some/routeSilex で簡単に実行できます。

/some/routeしかし、リクエストURIで指定しなくても、デフォルトのロケール(例:「en」)で自動的に利用できるようにしたいと考えています。このように、リクエスト/some/routeはリクエストと同じ/en/some/routeです。

私の記憶が正しければ、この問題は Symfony2 では解決されていましたが、Silex では何も見つかりませんでした。

私が知っているのは、$app['controllers']->assert('_locale', 'en|fr|es')->value('_locale', 'en');これらのメソッドをグローバルに適用するために使用できるということだけです。しかし、重複したルートを宣言する必要があり、「url_generator」または twig ヘルパーも変更する必要があると思います。

何か案は?

4

3 に答える 3

1

これが最良の解決策であることがわかりました(Silex 2.0):

$app->register(new Silex\Provider\LocaleServiceProvider());
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'locale_fallbacks' => array('en'),
    'locale' => 'en',
));

'locale' => 'en'を定義します。これは、使用されるデフォルトのロケールです。

ソース: http://silex.sensiolabs.org/doc/master/providers/translation.html

于 2016-09-15T15:05:25.233 に答える
0

このリポジトリを見てください。優先ロケールにリダイレクトする方法を確認できます。

// app.php

$app['config.locales.regexp'] = 'ca|es|en';


// controllers.php

/**
* Index URL, automatic redirect to preferred user locale
*/
$app->get('/', function (Silex\Application $app) {
    $locale = $app['request']->getPreferredLanguage($app['config.locales']);

    return $app->redirect(
        $app['url_generator']->generate('homepage', array('locale' => $locale))
    );
});

編集: 上記の回避策は問題を解決しないと思います。インデックス URL に対してのみ機能します。ただし、この GitHub の問題で説明されているように、アプリケーションの初期化後にデフォルトのロケールを設定することも考えられる解決策です。

$app = new Silex\Application();
$app['locale'] = 'fr';
于 2014-03-21T23:06:56.737 に答える