Symfony2 Translator如何从其他Bundle调用翻译Domain?
如何在Symfony中跨Bundle调用同名翻译域的内容
嘿,这个场景我之前处理过,其实Symfony的翻译组件已经内置了很直接的解决方案,不用复杂配置,改个参数就能搞定!
核心解决方案:给翻译域加上Bundle标识后缀
你只需要在原来的翻译域名称后面加上@Bundle名称的后缀,就能明确指定要从哪个Bundle的翻译资源中读取内容。
原来的调用代码是:
$translator->trans('mykey', array(), 'mytranslations');
现在改成这样,就能读取BundleB里的mytranslations域对应的mykey翻译了:
$translator->trans('mykey', array(), 'mytranslations@BundleB');
原理说明
Symfony的翻译器支持通过{domain}@{BundleName}的格式定位特定Bundle下的翻译资源。当你加上这个后缀后,翻译组件会直接去BundleB的Resources/translations目录下查找对应语言的mytranslations翻译文件,不再优先使用当前Bundle(BundleA)的翻译内容。
额外补充:Twig模板中的写法
如果需要在Twig模板里实现同样的效果,语法也是类似的:
{{ 'mykey'|trans({}, 'mytranslations@BundleB') }}
注意事项
- 确保BundleB已经正确注册到你的Symfony项目中,且它的翻译文件(比如
mytranslations.en.yml这类)放在BundleB/Resources/translations目录下,命名和格式符合Symfony的规范。
内容的提问来源于stack exchange,提问作者JV Lobo
相关产品推荐
相关产品推荐

