37

現在、プロジェクトで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ファイルの違いが気に入らないのは私だけではありません。提案?

4

4 に答える 4

27

簡単な修正は、grepフィルターを適用して、表示された差分からコメントメタデータを削除することです。バージョン管理diffユーティリティの出力に対してこれを行うことができます。

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

または、バージョン管理diffユーティリティに、比較を行う前にこれらを無視するように指示できる場合があります。これにより、より信頼性が高く、よりきれいな出力が得られる可能性があります。

使用しているバージョン管理システムはわかりませんが、git(たとえば)を使用すると、入力をdiffに前処理し、特定のファイルタイプのコメント行を削除できます(VonCに感謝)。バイナリファイルのテキストdiffの実行man gitattributesを参照して検索してください。 。保存するサンプルスクリプトの本文は次のとおりです。/usr/local/bin/strippocomments

grep -v '^#:' $1

.git/info/attributes次に、リポジトリ内のファイルに以下を追加することで、このスクリプトを使用してpoファイルを前処理するようにgitに指示できます。

*.po diff=podiff

.git/configリポジトリ内のファイルへ:

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

git diffを使用する場合は、で始まる行を含めないでください#:

git diffこのアプローチを使用して生成されたdiffは、パッチ適用には使用しないでください。ただしgit format-patch、デフォルトのdiffは引き続き使用されるため、電子メール用に生成されたパッチは引き続き問題ありません。

于 2010-01-07T15:04:06.257 に答える
24

gitattributes/textconvアプローチは正しい方法です。前処理を行うためのツールに関して、より良いソリューションを提供したいと思います。

.gitattributes

*.po    diff=po

.gitconfig

[diff "po"]
    textconv=msgcat --no-location --no-wrap --sort-output

msgcatgettextパッケージからは便利なツールです。それはあなたが遊ぶことができる多くのオプションを持っています。このオプション--no-locationは、特に行番号の違いを除外したいものです。xgettext他のオプションは、および/またはmsgmergeおよび/またはエディターが厄介な方法で文字列を再フォーマットし続ける場合に役立つ可能性があります。(その場合は、同じオプションをこれらのツールに渡して、エディターを再構成することもできます。)

于 2012-07-02T09:27:33.160 に答える
7

GNU gettextパッケージには、POファイルでさまざまなタスクを実行するための便利なユーティリティが多数あります。2つのPOファイルを比較するためのmsgcmp、共通/固有のメッセージを選択するためのmsgcomm、既存のPOファイルを選択/フィルタリング/変換するためのmsgattribがあります。POファイルのdiffから実際に必要なものに応じて、msgattribまたはmsgcommのいずれかを使用する必要があると思います。

ファイル/行に関するコメントなしで2つのPOファイルを比較する必要がある場合は、grepして一時ディレクトリに保存する簡単なスクリプトで、古いPOファイルと新しいPOファイルで十分です。

于 2010-01-07T16:56:37.337 に答える
7

poファイルに特別なdiffを指定するなど、カスタムdiff.gitattributeファイルによって提供されるさまざまなオプションを確認できます。

[diff "mypodiff"]
    command = mypodiff
*.po   diff=mypodiff

あなたが見た行を除外することができる任意のツールをmypodiff呼び出すスクリプトを使用してdiff

于 2010-01-08T07:21:15.287 に答える