8

TranslationServiceProviderをYAMLに登録しましたが、正常に動作します。

$app->register(new TranslationServiceProvider(), array(
    'locale_fallback' => 'ru',
));

$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
    $translator->addLoader('yaml', new YamlFileLoader());
    $translator->addResource('yaml', CONTENT_PATH . '/locales/en.yml', 'en');
    return $translator;
}));

次に、ValidationServiceProviderを次のように登録します。

$app->register(new Silex\Provider\ValidatorServiceProvider());

検証を登録すると、翻訳が機能しなくなります。翻訳する必要のあるすべての文字列がエラーなしで翻訳されるわけではありません。カウントローラーのロケールを変更しているので、それと関係がある可能性があります。

$en->get('/{slug}', function (Silex\Application $app, $slug) {
    $app['locale'] = 'en';
4

1 に答える 1

0

そのため、すべてのサービス (サービス プロバイダーから) は、実行時に、リクエストの前に、作成プロセスでロケールを取得します。また、実際のロケールが提示されていない場合、翻訳者は代替ロケールを取得します。

問題: ロケールは変数であり、リンクとして表示されないため、実行時にロケールを変更できません (ロケールがオブジェクトの場合は、ロケールを変更できます)。

解決策: 要求サブスクライバーでロケールを変更/設定します。

于 2015-08-26T13:01:56.563 に答える