检测 CI 中对 Django 翻译 (PO) 文件的更改



我正在为一个项目使用 Django 翻译,并希望在 TravisCI 上确保在对可翻译字符串进行更改时不会留下翻译。

这是我.travis.yml的简化片段:

script:
 - ...
 - python manage.py makemessages -l ja --no-wrap --no-location
 - git diff --exit-code

这将重新创建PO文件,并在文件更改时失败。目前为止,一切都好。

不幸的是,django 每次运行脚本时都会更新POT-Creation-Date,我看不到任何可以禁用它的标志makemessages,所以即使没有更改,文件也会在每次运行时更改。

我是否在正确的路线上,或者是否有更好的方法来检测发生了变化?

因此,在 makemessages diff 之后,所有内容都会显示至少 1 个插入和 1 个删除,对吧?

git diff --numstat | awk '{if ($1>1 || $2>1) { exit 1 } else { exit 0 }}'

如果 diff 中有超过 1 个插入和 1 个删除,则此脚本应以 status=1 退出。

Git 现在有一种很好的方法来忽略特定的匹配项。如果存在差异,以下行将失败,但排除有问题的标头:

git diff --ignore-matching-lines=POT-Creation-Date --exit-code

更好的是,Django 最近合并了一个更改,以阻止在翻译没有更改时更新此标头。它还没有从Django 4.0发布,所以我希望它会在Django 4.1中发布。

请参阅 Django 错误 #6106 和修复此问题的提交。

最新更新