git - 版本控制下的 Gettext .po 文件

标签 git version-control diff gettext po-file

目前在项目上使用 Gettext 并且 .po 文件保存完好 在版本控制下。

PO 文件当然包含翻译,但除此之外 还包含一些元数据 - 有关确切文件的信息和 可翻译字符串所在的行号。

问题是每次更新 PO 文件时元数据 比实际翻译的变化要多得多。这使得它 以后真的很难从版本控制差异中看出到底是什么 已更改 - 您只会看到文件名和行的无数更改 数字。像那样:

- #: somefile.js:43
- #: somefile.js:45
- #: somefile.js:118
+ #: somefile.js:203
+ #: somefile.js:215
  msgid "Translate me please"
  msgstr "Tõlgi mind palun"

- #: somefile.js:23
- #: somefile.js:135
+ #: otherfile.js:23
+ #: otherfile.js:135
  msgid "Note"
  msgstr "Märkus"

- #: andThatFile.js:18
  #: orThisFile.js:131
- msgid "Before I was like this"
- msgstr "Selline olin ma enne"
+ msgid "I happen to be changed"
+ msgstr "Paistab, et mind muudeti"

当然,一个简单的解决办法就是禁用生成 xgettext 输出中的文件名/行号注释。但其实我发现 这些文件名在翻译时是非常有用的提示。

我肯定不是唯一一个不喜欢他的 PO 文件差异的人。 有什么建议吗?

最佳答案

一个简单的修复方法是应用 grep 过滤器从查看的差异中删除注释元数据。您可以对版本控制差异实用程序的输出执行此操作:

myVersionControl diff REV1 REV2 filea | grep -v '^..#'

或者您可以指示版本控制差异实用程序在进行比较之前忽略这些,这可能会导致更可靠和更漂亮的输出:

我不知道您使用的是什么版本控制系统,但是 git(例如)允许您预处理 diff 的输入并删除某些文件类型的注释行(感谢 VonC),查看 man gitattributes 并搜索 Performing text diffs of binary files。下面是保存为 /usr/local/bin/strippocomments 的示例脚本的主体,它将执行此操作:

grep -v '^#:' $1

然后,您可以通过将以下内容添加到存储库中的文件 .git/info/attributes 来告诉 git 使用此脚本来预处理 po 文件:

*.po diff=podiff

然后到您存储库中的文件 .git/config:

[diff "podiff"]
    textconv = /usr/local/bin/strippocomments

使用 git diff 不应包括任何以 #: 开头的行。

请注意,使用此方法从 git diff 生成的差异不应用于修补 - 但 git format-patch 仍将使用默认差异,因此会生成补丁用于电子邮件仍然可以。

关于git - 版本控制下的 Gettext .po 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2006351/

相关文章:

android - Android使用Gradle在启动画面上显示版本名称

php - 使用时间戳保存 contenteditable 中的更改

c# - 如何获取表示两个 XML 文本之间差异的对象集合?

mysql - MySQL 中的版本控制树结构

wordpress - 构建文件夹应该包含在 git repo 中吗?

java - 用于在两个 bean 中生成字段差异的通用算法?

git - 如何解决git的 "not something we can merge"错误

git - 哪个是最好的 git 托管软件? - Gitolite vs. Gitlab vs. Gitorius

git - 设置带有大文件的远程 Git 的最佳方法

git - GIT 服务器的管理。跟踪存储库克隆的过程