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

Finding missing translations in django `.po` files

使用 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 "" 我得到 "false positives"(即实际翻译的字符串,但其翻译从下一行开始)。有数千行,这很常见。

有什么聪明的建议吗?

谢谢

假设您使用的是一些流行的编辑器:

  • 在大多数编辑器中,只需搜索 msgstr ""\n\n
  • 在windows下/用记事本,也许你会需要像msgstr ""\r\n\r\n
  • 这样的东西
  • 你也可以尝试一些专门的编辑器,check this
  • 最终,您可以执行以下操作:sed -i '/msgstr ""/{N;N; s/\n\n/\n# translate me!\n\n/g}' django.po,然后在文件中搜索 # translate me! 评论。

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

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

会成功,如果任何翻译被标记为模糊(除非您指定 --use-fuzzy),甚至会失败。

您可以使用

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

查看有多少缺失的翻译(如果有的话),以及

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

列出未翻译的消息。