我刚刚开始使用symfony validator,我非常喜欢它,除了翻译部分,目前它使用我自己的翻译器库,但是我发现了translations for almost all languages存储在其中的validator.LOCALE.xlf文件,我可以不知道如何使用它们。
我当前的验证器注册码是
$container->register('validator', \Symfony\Component\Validator\Validator\ValidatorInterface::class)
->setFactory(
[
new Reference('validator.builder'),
'getValidator'
]
);
$container->register('validator.builder', \Symfony\Component\Validator\ValidatorBuilderInterface::class)
->setFactory(
[
\Symfony\Component\Validator\Validation::class,
'createValidatorBuilder'
]
)
->addMethodCall(
'setTranslator',
[
new Reference('translator') // Symfony translatorInterface
]
)
->addMethodCall(
'setTranslationDomain',
[
'messages'
]
);
似乎我已经检查了整个验证器结构,例如RecursiveValidator,ContextualValidator,Contexts等,但是另一方面,只是缺少一个参数的地方,ConstraintViolationBuilder只是简单地采用了传递的翻译器并试图通过它,没有尝试使用任何xlf文件。
仅强制搜索所有验证程序库文件也没有得到结果。
Symfony guilde也没有帮助,因为它提供了使用默认错误句子作为翻译关键字,并在您自己的翻译文件中使用此“关键字”的原因,但是为什么将已经翻译过的句子复制到您自己的文件中,并且还已经存在结构化文件时(例如,我在谈论.xlf),并使用键模式造成混乱(例如,我使用蛇形保护套)?
答案 0 :(得分:0)
解决方案是将xlf文件加载器添加到您的翻译器中,并将.xlf翻译作为资源传递。
类似的东西
$container->register('translator.xlf_file_loader', \Symfony\Component\Translation\Loader\XliffFileLoader::class);
$container->register('translator.php_file_loader', \Symfony\Component\Translation\Loader\PhpFileLoader::class);
$container->register('translator', \Project\Framework\Translation\Translator::class)
->addArgument(
new Reference('service_container')
)
->addMethodCall(
'addLoader',
[
'php',
new Reference('translator.php_file_loader')
]
)
->addMethodCall(
'addLoader',
[
'xlf',
new Reference('translator.xlf_file_loader')
]
)
->addMethodCall('addResource', ['php', __DIR__ . '/../translation/lt.php', 'lt'])
->addMethodCall('addResource', ['php', __DIR__ . '/../translation/en.php', 'en'])
->addMethodCall('addResource', ['php', __DIR__ . '/../translation/ru.php', 'ru'])
->addMethodCall('addResource', ['xlf', __DIR__ . '/../../vendor/symfony/validator/Resources/translations/validators.lt.xlf', 'lt'])
->addMethodCall(
'setFallbackLocales',
[
['lt']
]
);
答案 1 :(得分:0)
您只是尝试过
在应用配置中更改语言环境:
# config/packages/translation.yaml
framework:
default_locale: 'en'
translator:
fallbacks: ['en']
根据(用户)输入更改语言环境:
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
// some logic to determine the $locale
$request->setLocale($locale);
}