检测 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 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 中发布。