如何为 .po 翻译文件提供数据?

3
在Django中使用django-admin.py makemessages -l de命令生成翻译文件后,您可以使用普通文本编辑器或Poedit来填写它们。使用Poedit的优点在于它提供了一个专门的UI来输入这些数据。但是,当我在单词之间切换时,我不断收到错误消息:

MyBookmarks/locale/de/LC_MESSAGES/django.po:7: header field `Project-Id-Version' still has the initial default value

这是什么意思?有没有了解Django国际化或po/GNU gettext常规用户遇到过这个错误消息?

感谢您!
1个回答

2
我猜Django让.po文件的头部可由用户自定义,因此您可以自行替换“PACKAGE VERSION”,比如改为“我的超棒应用 v.1.0”。
要在给定路径下的任何相关文件中执行此操作,您可以在命令行中使用以下命令,在*nix环境(或任何可使用sed和find的地方)中使用。
find <YOUR_PATH_HERE> -type f -name '*.po' -exec sed -e s'/PACKAGE VERSION/<YOUR_APP_NAME> <YOUR_APP_VERSION>/g' -i.bak {} \;

这个命令将会在每一个.po文件中替换之前提到的文本内容,并且会同时保存每一个未修改备份文件。

因此,在您的情况下,该命令将是:

find MyBookmarks/ -type f -name '*.po' -exec sed -e s'/PACKAGE VERSION/MyBookmarks v.1.0/g' -i.bak {} \;

我经常在我的fabfile中包含此命令,并且它可以解决使用POedit 1.5.x时出现的问题(但也应该适用于早期版本)。
注意:您只需针对每个.po文件执行一次此操作。下次启动./manage.py makemessages Django将记住该设置。

非常感谢您解决了这个问题。当时我最终使用编辑器并手动为每个文件完成了这项工作。感谢您提供更简单的方法。+1 - Houman
只是一个快速的提示,-i .bak 之间不能有任何空格,否则会出错。 - Houman
1
你的命令有个小坑:如果当前目录中有任何*.po文件,则你的shell会将其展开。如果是这样,该命令很可能会失败。为了防止shell进行任何替换,你需要在'*.po'周围添加引号。我代表你编辑了答案。 - MiniQuark

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