Php 未从Yaml设置Silex表单验证程序翻译
这就是我的index.php部分的外观。消息域正常,但验证器域不正常。这是因为xlf文件中的默认表单翻译意味着我正在加载的yml文件不适用 例如,如果我编辑xlf文件并删除: 此值不应为空 然后我的yml文件: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
// 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;
}
);