【问题标题】:Detecting changes to Django translations (PO) files in CI检测 CI 中 Django 翻译 (PO) 文件的更改
【发布时间】:2015-01-23 16:30:09
【问题描述】:

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

这是我.travis.yml的简化sn-p:

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

这会重新创建 PO 文件,并在文件更改时失败。到目前为止一切顺利。

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

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

【问题讨论】:

    标签: django testing continuous-integration translation travis-ci


    【解决方案1】:

    那么,在 makemessages diff 之后总是会显示至少 1 次插入和 1 次删除,对吗?

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

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

    【讨论】:

    • 我发现当多个.po 文件被更改时,调用exit 0 只会检查第一个文件。 git diff --numstat | awk '{if ($1!=1 || $2!=1) { exit 1 }}' 检查所有这些,但我的新答案使它们变得多余。
    【解决方案2】:

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

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

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

    请参阅 Django bug #6106the commit that fixes this issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多