我有一个 symfony 项目,我在其中浏览了我的 twig 模板,并在适当的地方添加{% trans %}...{% endtrans %}
或添加了翻译。{{ title|trans }}
我还添加了一个 messages.de.xliff 文件,这对于我尝试过的少数翻译来说非常有效。
有没有办法从我的 xliff 文件中获取缺少的字符串列表?在我添加时,很难跟踪每一个翻译。似乎它应该在某处的日志文件中记录翻译失败,但我一直在谷歌搜索一段时间,找不到任何东西。
我有一个 symfony 项目,我在其中浏览了我的 twig 模板,并在适当的地方添加{% trans %}...{% endtrans %}
或添加了翻译。{{ title|trans }}
我还添加了一个 messages.de.xliff 文件,这对于我尝试过的少数翻译来说非常有效。
有没有办法从我的 xliff 文件中获取缺少的字符串列表?在我添加时,很难跟踪每一个翻译。似乎它应该在某处的日志文件中记录翻译失败,但我一直在谷歌搜索一段时间,找不到任何东西。
嗨尝试关注可能会有所帮助。
https://github.com/schmittjoh/JMSTranslationBundle/blob/master/Resources/doc/index.rst
非常强大的工具,绝对可以解决您的问题。
这是一个非常糟糕的补丁,可以满足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;
}
我的解决方案是覆盖Translator
andMessageCatalogue
类。
译者:
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 类。
也不是很好,因为它使用了Translator
类的受保护方法和属性。但比直接更改 Symfony 代码要好。
通常你应该能够debug:translation
通过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