在Django的`.po`文件中查找缺失的翻译。

6
与Django一起工作,您可以使用django.utils.translation.ugettext....ugettext_lazy(以及一些模板标签)来处理本地化消息的翻译。
稍后,使用命令:django-admin.py makemessages -l <LANGUAGE> ,您可以生成包含原始字符串的po文件,以便开发人员可以指定所需的翻译。
问题:是否有django命令或任何其他快速方法可以查找未翻译的消息?
通常我在po文件中查找msgstr ""字符串,但这是不准确的,因为某些翻译是多行的,如下所示:
#file.py:xyz
msgid ""
"Some very long text"
msgstr ""
"The translation of some very long text"

因此,寻找msgstr ""时,我会得到“误报”(即实际上已翻译的字符串,但其翻译是在下一行开始的)。对于成千上万行的代码,这种情况经常发生。

有什么聪明的建议吗?

谢谢


从我所看到的情况来看,Django似乎会将未翻译的内容放置在翻译列表的顶部(或者可能是底部,我记不清了)。 - Sayse
不,我不这么认为。我在我的“po”文件中找到它们的位置在中间 :-/ - FSp
1
哦,我记不清了,我们的翻译人员转而使用 Poedit,这在某种程度上抵消了整个问题。 - Sayse
2
不知道你使用的是哪个IDE,但在PyCharm中,你可以通过正则表达式搜索:""\n\n 这将突出显示所有未翻译的条目。 - Leistungsabfall
在 PyCharm 中,可以使用 Crtl +Shift + Enter 将换行符字段添加到搜索中。 - Viljami
3个回答

6
假设您正在使用一些流行的编辑器:
  • 在大多数编辑器中,只需搜索msgstr ""\n\n
  • 在 Windows / 使用记事本时,可能需要类似于msgstr ""\r\n\r\n的内容
  • 您还可以尝试一些专门的编辑器,请查看此处
  • 最后,您可以执行以下操作:sed -i '/msgstr ""/{N;N; s/\n\n/\n# translate me!\n\n/g}' django.po,然后在文件中搜索# translate me!注释。

糟糕,刚才意识到上一个有问题了。无论如何,我又做了一个。 - Art

4

您可以使用

msgfmt --statistics --output=/dev/null locale/django.po

查看是否有任何缺少的翻译内容,

msgattrib --untranslated locale/fr/LC_MESSAGES/django.po

列出未翻译的信息。


3

检查缺失的翻译和其他错误最简单的方法是使用 "msgcmp" 实用程序。它实际上应该用于将翻译文件(.po)与模板文件(.pot)进行比较,但它也可以轻松地将 .po 文件与其自身进行比较:

msgcmp path/to/nl.po path/to/nl.po

将会完成这项技巧,即使有任何翻译标记为模糊(除非您指定--use-fuzzy),也会失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接