有可能让symfony2日志缺少翻译字符串,以便我知道需要添加到我的xilff文件中吗?

时间:2012-07-03 15:34:57

标签: symfony internationalization xliff

我有一个symfony项目,我已经浏览了我的树枝模板并添加了{% trans %}...{% endtrans %}或在适当的位置添加{{ title|trans }}等翻译。我还添加了一个messages.de.xliff文件,这对我尝试过的几个翻译工作非常有效。

有没有办法可以从xliff文件中获取字符串列表?我添加它时很难跟踪每个翻译。看起来它应该记录在某个地方的日志文件中获取翻译的失败,但我一直在谷歌搜索一段时间,找不到任何东西。

5 个答案:

答案 0 :(得分:2)

您好试试以下可能会有所帮助。

https://github.com/schmittjoh/JMSTranslationBundle/blob/master/Resources/doc/index.rst

非常强大的工具,绝对能解决您的问题。

答案 1 :(得分:1)

这是一个非常糟糕的补丁,适用于我需要的vendor/symfony。可能不会在生产服务器上运行!

diff --git a/src/Symfony/Component/Translation/MessageCatalogue.php b/src/Symfony/Component/Translation/MessageCatalogue.php
index b55676f..98a5cba 100644
--- a/src/Symfony/Component/Translation/MessageCatalogue.php
+++ b/src/Symfony/Component/Translation/MessageCatalogue.php
@@ -128,6 +128,8 @@ class MessageCatalogue implements MessageCatalogueInterface
             return $this->fallbackCatalogue->get($id, $domain);
         }

+        error_log('Translation not found: "' . $id . '"');
+
         return $id;
     }

答案 2 :(得分:0)

我的解决方案是覆盖TranslatorMessageCatalogue类。

<强>译者:

class RegisteringTranslator extends \Symfony\Component\Translation\Translator
{
    protected function loadCatalogue($locale)
    {
        parent::loadCatalogue($locale);

        if ( ! $this->catalogues[$locale] instanceof RegisteringMessageCatalogue) {
            $registeringCatalogue = new RegisteringMessageCatalogue($locale);
            $registeringCatalogue->addCatalogue($this->catalogues[$locale]);
            $this->catalogues[$locale] = $registeringCatalogue;
        }
    }
}

<强>目录:

class RegisteringMessageCatalogue extends \Symfony\Component\Translation\MessageCatalogue
{
    public function get($id, $domain = 'messages')
    {
        if ( ! $this->has($id, $domain)) {
            error_log('Translation not found: "' . $id . '"');
        }

        return parent::get($id, $domain);
    }

}

当然你需要使用新的翻译类。

也不是很好,因为它使用Translator类的受保护方法和属性。但比直接更改Symfony代码要好。

答案 3 :(得分:0)

我知道这是一个老问题,但我在这里张贴以防万一有人仍有同样的问题。

从Symfony 2.6开始,您将在Web调试工具栏中找到一个非常好的补充,它可以显示您缺少多少翻译。

enter image description here

通过单击它,探查器将显示缺失翻译的详细列表。

开箱即用,无需任何配置。

答案 4 :(得分:0)

通常,您应该能够通过debug:translation使用Symfony命令app/console

这样的事情:

$ php app/console debug:translation --only-missing <locale> <Bundle Name>

一个具体的例子是:

$ php app/console debug:translation --only-missing nl AppBundle

那会输出:

 ----------- ---------- ------------------------------------------------------------------------------------------------------- ------------------------------------------
  State       Domain     Id                                                                                                      Message Preview (nl)
 ----------- ---------- ------------------------------------------------------------------------------------------------------- ------------------------------------------
   missing    messages   Create a clean selection                                                                                Create a clean selection
   missing    messages   New Selection                                                                                           New Selection
   missing    messages   login.labels.geoserver_url                                                                              login.labels.geoserver_url