Ren*_*soo 35 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"
Run Code Online (Sandbox Code Playgroud)
当然,一个简单的解决方法是在xgettext输出中禁用filename/linenumber注释的生成.但实际上我发现这些文件名在翻译时非常有用.
我当然不可能是唯一一个不喜欢他的PO文件的差异的人.建议?
Ale*_*own 25
一个简单的解决方法是应用grep过滤器从已查看的diff中删除注释元数据.您可以对版本控制diff实用程序的输出执行此操作:
myVersionControl diff REV1 REV2 filea | grep -v '^..#'
Run Code Online (Sandbox Code Playgroud)
或者您可以在进行比较之前指示版本控制差异实用程序忽略这些,这可能会导致更可靠和更漂亮的输出:
我不知道你使用的版本控制系统,但git(例如)允许你预处理diff的输入并删除某些文件类型的注释行(感谢VonC),查看man gitattributes
并搜索执行二进制文件的文本差异.这是要保存的示例脚本的主体/usr/local/bin/strippocomments
,它将执行此操作:
grep -v '^#:' $1
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将以下内容添加到.git/info/attributes
存储库中的文件来告诉git使用此脚本预处理po文件:
*.po diff=podiff
Run Code Online (Sandbox Code Playgroud)
以及.git/config
存储库中的文件:
[diff "podiff"]
textconv = /usr/local/bin/strippocomments
Run Code Online (Sandbox Code Playgroud)
然后使用git diff不应包含任何以#:
.开头的行.
请注意,git diff
使用此方法生成的差异不应用于修补 - 但git format-patch
仍将使用默认差异,因此为电子邮件生成的补丁仍然可以.
Pet*_*aut 20
该gitattributes
/ textconv
做法是正确的道路要走.我想提供一个更好的解决方案,用于进行预处理的工具.
在.gitattributes
:
*.po diff=po
Run Code Online (Sandbox Code Playgroud)
在.gitconfig
:
[diff "po"]
textconv=msgcat --no-location --no-wrap --sort-output
Run Code Online (Sandbox Code Playgroud)
msgcat
来自gettext包是一个有用的工具.它有许多你可以玩的选项.该选项--no-location
尤其是您想要过滤掉行号差异的选项.如果xgettext
和/或msgmerge
和/或您的编辑器以令人讨厌的方式重新格式化字符串,则其他选项可能很有用.(在这种情况下,将这些相同选项传递给这些工具并重新配置编辑器也是一件好事.)
GNU gettext包有许多有用的实用程序来执行PO文件的各种任务.有msgcmp比较两个PO文件,msgcomm用于选择公共/唯一消息,msgattrib用于选择/过滤/转换现有PO文件.取决于您从PO文件的差异中实际需要什么,我认为您需要使用msgattrib或msgcomm.
如果你只需要比较两个PO文件而没有关于文件/行的注释,那么简单的脚本grep并保存在temp dir中你的新旧PO文件就足够了.
您可以查看自定义diff .gitattribute文件提供的不同选项,例如为po文件指定特殊的diff
[diff "mypodiff"]
command = mypodiff
*.po diff=mypodiff
Run Code Online (Sandbox Code Playgroud)
用mypodiff
脚本调用任何diff
能够过滤掉你想要的行的工具
归档时间: |
|
查看次数: |
4001 次 |
最近记录: |