symfony translation - “xlf”翻译加载程序未注册

时间:2014-12-18 07:34:55

标签: symfony

我正在对symfony2进行i18n测试。 (v2.4)。我按照http://symfony.com/doc/master/book/translation.html的步骤进行操作。

就像其他人的问题Symfony Basic Translation Example一样,Exception我遇到了异常“”xlf“翻译加载器未注册”。

我的配置细节如下:

  1. 应用程序/配置/ config.yml

      translator:      { fallback: "%locale%" }  // locale=en
    
  2. 的src / XXX / MyBundle /控制器/ DefaultController.php

  3. /**
     *@Route("/tr")
     */
    public function trAction()
    {
        $translated = $this->get('translator')->trans('symfony.test.great');
        return new Response($translated);
    }
    
    1. src / xxx / MyBundle / Resources / translations / messages.en.xlf(或带有后缀“xliff”)
    2.        .....
              <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",
      },
      

5 个答案:

答案 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">

并清除缓存。