我正在对symfony2进行i18n测试。 (v2.4)。我按照http://symfony.com/doc/master/book/translation.html的步骤进行操作。
就像其他人的问题Symfony Basic Translation Example一样,Exception我遇到了异常“”xlf“翻译加载器未注册”。
我的配置细节如下:
应用程序/配置/ config.yml
translator: { fallback: "%locale%" } // locale=en
的src / XXX / MyBundle /控制器/ DefaultController.php
/** *@Route("/tr") */ public function trAction() { $translated = $this->get('translator')->trans('symfony.test.great'); return new Response($translated); }
..... <trans-unit id="10"> <source>symfony.test.great</source> <target> Symfony is Great...</target> </trans-unit> ....
当我访问router / tr时,它说:
未注册“xlf”翻译加载程序。 500内部服务器 错误 - RuntimeException
有什么不对吗?请提前帮助我。
还有更多: 我的compose.json:
"require": { "php": ">=5.3.3", "symfony/symfony": "~2.4", "doctrine/orm": "~2.2,>=2.2.3", "doctrine/doctrine-bundle": "~1.2", "twig/extensions": "~1.0", "symfony/assetic-bundle": "~2.3", "symfony/swiftmailer-bundle": "~2.3", "symfony/monolog-bundle": "~2.4", "sensio/distribution-bundle": "~2.3", "sensio/framework-extra-bundle": "~3.0", "sensio/generator-bundle": "~2.3", "incenteev/composer-parameter-handler": "~2.0", "sonata-project/admin-bundle": "dev-master", "sonata-project/doctrine-orm-admin-bundle": "dev-master", "sonata-project/intl-bundle": "dev-master", "friendsofsymfony/elastica-bundle": "3.0.x", "symfony/translation": "2.4.x-dev", "symfony/config": "2.4.x", },
答案 0 :(得分:1)
谢谢大家。 我现在可以解决这个问题:(手动添加加载程序)
在我的控制器/动作中:
/**
*@Route("/tr")
*/
public function trAction()
{
$tr = $this->get('translator');//->trans('symfony.test.great');
$tr->addLoader('xliff', new XliffFileLoader()); // new add
$tr->addLoader('xlf', new XliffFileLoader()); // new add
$translated = $tr->trans('symfony.test.great');
return new Response($translated);
}
我不知道为什么要添加这个。 symfony文档“http://symfony.com/doc/master/book/translation.html”也没有添加。任何建议都将受到欢迎。再次感谢。
答案 1 :(得分:1)
我知道这是一个古老的问题,但仍然有人会觉得它很有用。通过从composer.json中删除一些打包来解决我遇到的同样问题
删除这些包:
"symfony/translation": "2.3.*",
"symfony/config": "2.3.*"
然后运行composer update
Symfony已内置翻译,因此您无需添加任何额外内容,但如果您想要或需要使用它们,您可能需要将扩展添加到您的树枝环境中。更多信息请阅读docummentation
答案 2 :(得分:1)
我解决了类似的问题:
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\XliffFileLoader;
...
...
$translator = new Translator('en_US');
$translator->addLoader('xlf', new XliffFileLoader());
$translator->addResource('xlf', __DIR__ . '/registration.xlf', 'it_IT', 'registration');
答案 3 :(得分:1)
我知道这是一个老问题,但我找到了正确的答案:
在翻译文件夹中搜索扩展名为.xlf~的文件并将其删除。
例如: messages.en.xlf〜
这些文件由translation:update console命令创建。
此致
答案 4 :(得分:0)
加载器配置为./vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
您应该具有以下参数:
<parameter key="translation.loader.xliff.class">Symfony\Component\Translation\Loader\XliffFileLoader</parameter>
如果一切正常,请使用xliff扩展名,检查文件标题是否如下所示:
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
并清除缓存。