Php 未从Yaml设置Silex表单验证程序翻译

Php 未从Yaml设置Silex表单验证程序翻译,php,forms,translation,silex,Php,Forms,Translation,Silex,这就是我的index.php部分的外观。消息域正常,但验证器域不正常。这是因为xlf文件中的默认表单翻译意味着我正在加载的yml文件不适用 例如,如果我编辑xlf文件并删除: 此值不应为空 然后我的yml文件: // Forms $app->register(new FormServiceProvider()); $app->register(new Silex\Provider\ValidatorServiceProvider()); // Locale $app->reg

这就是我的index.php部分的外观。消息域正常,但验证器域不正常。这是因为xlf文件中的默认表单翻译意味着我正在加载的yml文件不适用

例如,如果我编辑xlf文件并删除:

此值不应为空

然后我的yml文件:

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

// Locale
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
  'locale' => 'en',
  'locale_fallback' => 'en'
));

$app['translator']->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader());
$app['translator']->addResource('yaml', $app['root_dir'] .'/config/poseidon/locales/en.yml', 'en');
$app['translator']->addResource('yaml', $app['root_dir'] .'/config/poseidon/locales/validators.en.yml', 'en', 'validators');
将被加载,此密钥将添加到validators数组。然而,似乎只要加载这些默认xlf文件,我的yaml文件中的任何内容都无法覆盖验证器翻译域

任何帮助都将不胜感激,因为我不知道为什么会发生这种情况。谢谢

编辑:

这实际上与我的想法相反,我补充道:

# validators.en.yml

This value should not be blank.: This is a required field
转换器添加资源并获得预期结果后,即加载FormServiceProvider时,默认xlf文件将覆盖消息目录验证程序域中当前存在的内容

因此,如果有人知道如何防止它这样做,那就太好了,谢谢

echo $app['translator']->trans(
                        'This value should not be blank.',
                        array(), 
                        'validators'
                    );
这不是最理想的解决方案,但我编辑了Translator类并反转了数组,如上图所示,以确保xliff文件在yml文件之前加载,现在一切正常

我确实需要找到一个不编辑Translator类的解决方案。

签出:
注册(在index.php中):

$app['validator']
之前调用
$app['translator']
会触发它的注册方法,因此yaml文件会在之后加载


我也有同样的问题,这就解决了

在最新的silex版本中,使用

$app['locale'] = 'fr';

$app->register(new TranslationServiceProvider());
$app->register(new ValidatorServiceProvider());

$app['validator'];
$app['translator'] = $app->share(
    $app->extend(
        'translator',
        function ($translator, $app) {
            $translator->addLoader('yaml', new YamlFileLoader());
            $translator->addResource('yaml', 'path/to/validators.fr.yml', 'fr', 'validators');

            return $translator;
        }
    )
);
没有«共享»方法

$app['locale'] = 'fr';

$app->register(new TranslationServiceProvider());
$app->register(new ValidatorServiceProvider());

$app['validator'];
$app['translator'] = $app->share(
    $app->extend(
        'translator',
        function ($translator, $app) {
            $translator->addLoader('yaml', new YamlFileLoader());
            $translator->addResource('yaml', 'path/to/validators.fr.yml', 'fr', 'validators');

            return $translator;
        }
    )
);
$app['locale'] = 'fr';

$app->register(new TranslationServiceProvider());
$app->register(new ValidatorServiceProvider());

$app['validator'];
$app['translator'] = $app->extend(
    'translator',
    function ($translator, $app) {
        $translator->addLoader('yaml', new YamlFileLoader());
        $translator->addResource('yaml', 'path/to/validators.fr.yml', 'fr', 'validators');

        return $translator;
    }
);