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

Detecting changes to Django translations (PO) files in CI

我正在为一个项目使用 Django translations,我想确保在 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) { exit 1 } else { exit 0 }}'

如果 diff 中有超过 1 次插入和 1 次删除,此脚本应以状态 =1 退出。

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

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

更好的是,Django 最近合并了一项更改,以阻止 header 在翻译没有更改时进行更新。它尚未在 Django 4.0 中发布,所以我预计它会在 Django 4.1 中发布。

参见Django bug #6106 and the commit that fixes this issue