Перевод Silex перестает работать при регистрации валидации

Я зарегистрировал 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';

1 ответ

Таким образом, все службы (от поставщиков услуг) получают локали во время выполнения, до запроса, в процессе создания. И, если реальная локаль не представлена, переводчик получает запасную локаль.

Проблема: вы не можете изменить локаль во время выполнения, потому что локаль является переменной и не представлена ​​как ссылка (если локаль будет объектом, вы можете изменить локаль).

Решение: Изменить / установить локаль по запросу абонента.

Другие вопросы по тегам