Перевод 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 ответ
Таким образом, все службы (от поставщиков услуг) получают локали во время выполнения, до запроса, в процессе создания. И, если реальная локаль не представлена, переводчик получает запасную локаль.
Проблема: вы не можете изменить локаль во время выполнения, потому что локаль является переменной и не представлена как ссылка (если локаль будет объектом, вы можете изменить локаль).
Решение: Изменить / установить локаль по запросу абонента.