{"thread":{"id":"27344","subject":"[PATCH 0/7] Document translation with po4a.","startedAt":"2011-05-13T13:14:11Z","lastAt":"2011-05-15T13:51:09Z","messageCount":22,"participants":["Osamu OKANO","Junio C Hamano","Drew Northup","Ævar Arnfjörð Bjarmason","Jonathan Nieder"],"isPatch":true,"patchVersion":1,"patchTotal":7},"messages":[{"id":"167792","messageId":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":null,"subject":"[PATCH 0/7] Document translation with po4a.","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:11Z","receivedAt":"2011-05-13T13:14:11Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"1 Document translation with po4a. \n---------------------------------\nI tried to translate Docmentation with po4a.\nPlease relive my translation flow.\n\n1.1 prepareration \n==================\n$ install po4a\n$ git am 0001-Add-new-target-pot-in-Makefile.patch\n$ git am 0002-add-make-shell-scripts.patch\n$ cd Documentation\n$ make pot    # convert .txt to .pot  with po4a-gettexize\n\n1.2 new translation \n====================\n$ mkdir ja\n$ cp git-stage.pot ja/git-stage.po\n  -> 0003-cp-git-stage.pot-ja-git-stage.po.patch\n$ cd ja\n$  translate .po by hand ...\n  -> 0004-translate-ja-git-stage.po.patch\n$ ../make_txt    # convert .po  to .txt  with po4a-translate\n$ ../make_html   # convert .txt to .html with asciidoc\n\n1.3 update translation \n=======================\n$ git-stage.txt was updated.\n  -> 0005-your-file.patch\n$ cd Documentation/ja\n$ ../make_update # update(merge) .po     with po4a-updatepo\n  -> 0006-update-git-stage.po.patch\n$ translate and remove fuzzy\n  -> 0007-translate-and-remove-fazzy.patch\n$ ../make_txt\n$ ../make_html\n\n=======================\nOsamu OKANO (7):\n  Add new target pot in Makefile\n  add make(shell) scripts\n  cp git-stage.pot ja/git-stage.po\n  translate ja/git-stage.po\n  your file\n  update git-stage.po\n  translate and remove fazzy\n\n Documentation/.gitignore      |    1 +\n Documentation/Makefile        |   15 ++++++++-\n Documentation/git-stage.txt   |    2 +-\n Documentation/ja/git-stage.po |   74 +++++++++++++++++++++++++++++++++++++++++\n Documentation/make_html       |   10 +++++\n Documentation/make_txt        |   13 +++++++\n Documentation/make_update     |   13 +++++++\n 7 files changed, 126 insertions(+), 2 deletions(-)\n create mode 100644 Documentation/ja/git-stage.po\n create mode 100644 Documentation/make_html\n create mode 100644 Documentation/make_txt\n create mode 100644 Documentation/make_update\n\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167794","messageId":"1305292458-3920-2-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 1/7] Add new target pot in Makefile","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:12Z","receivedAt":"2011-05-13T13:14:12Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/.gitignore |    1 +\n Documentation/Makefile   |   15 ++++++++++++++-\n 2 files changed, 15 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/.gitignore b/Documentation/.gitignore\nindex 1c3a9fe..0d8dc2e 100644\n--- a/Documentation/.gitignore\n+++ b/Documentation/.gitignore\n@@ -3,6 +3,7 @@\n *.[1-8]\n *.made\n *.texi\n+*.pot\n git.info\n gitman.info\n howto-index.txt\ndiff --git a/Documentation/Makefile b/Documentation/Makefile\nindex 36989b7..ac97d5f 100644\n--- a/Documentation/Makefile\n+++ b/Documentation/Makefile\n@@ -11,6 +11,7 @@ MAN7_TXT=gitcli.txt gittutorial.txt gittutorial-2.txt \\\n MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)\n MAN_XML=$(patsubst %.txt,%.xml,$(MAN_TXT))\n MAN_HTML=$(patsubst %.txt,%.html,$(MAN_TXT))\n+MAN_POT=$(patsubst %.txt,%.pot,$(MAN_TXT))\n \n DOC_HTML=$(MAN_HTML)\n \n@@ -41,6 +42,7 @@ man7dir=$(mandir)/man7\n # DESTDIR=\n \n ASCIIDOC=asciidoc\n+PO4AG=po4a-gettextize\n ASCIIDOC_EXTRA =\n MANPAGE_XSL = manpage-normal.xsl\n XMLTO_EXTRA =\n@@ -151,6 +153,7 @@ ifndef V\n \tQUIET_SUBDIR0\t= +@subdir=\n \tQUIET_SUBDIR1\t= ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \\\n \t\t\t  $(MAKE) $(PRINT_DIR) -C $$subdir\n+\tQUIET_PO4AG\t= @echo '   ' PO4AG $@;\n \texport V\n endif\n endif\n@@ -166,6 +169,8 @@ man1: $(DOC_MAN1)\n man5: $(DOC_MAN5)\n man7: $(DOC_MAN7)\n \n+pot: $(MAN_POT)\n+\n info: git.info gitman.info\n \n pdf: user-manual.pdf\n@@ -230,7 +235,7 @@ cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)\n \tdate >$@\n \n clean:\n-\t$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7\n+\t$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7 *.pot\n \t$(RM) *.texi *.texi+ *.texi++ git.info gitman.info\n \t$(RM) howto-index.txt howto/*.html doc.dep\n \t$(RM) technical/api-*.html technical/api-index.txt\n@@ -256,6 +261,14 @@ manpage-base-url.xsl: manpage-base-url.xsl.in\n \t\t$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) -o $@+ $< && \\\n \tmv $@+ $@\n \n+%.pot : %.txt\n+\t$(QUIET_PO4AG)$(RM) $@+ $@ && \\\n+\t$(PO4AG) --master-charset UTF8 --localized-charset UTF8 \\\n+\t\t--master `basename $@ .pot`.txt \\\n+\t\t--format text --option asciidoc \\\n+\t\t--po $@+ $< && \\\n+\tmv $@+ $@\n+\n user-manual.xml: user-manual.txt user-manual.conf\n \t$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \\\n \t$(ASCIIDOC) $(ASCIIDOC_EXTRA) -b docbook -d book -o $@+ $< && \\\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167793","messageId":"1305292458-3920-3-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 2/7] add make(shell) scripts","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:13Z","receivedAt":"2011-05-13T13:14:13Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/make_html   |   10 ++++++++++\n Documentation/make_txt    |   13 +++++++++++++\n Documentation/make_update |   13 +++++++++++++\n 3 files changed, 36 insertions(+), 0 deletions(-)\n create mode 100644 Documentation/make_html\n create mode 100644 Documentation/make_txt\n create mode 100644 Documentation/make_update\n\ndiff --git a/Documentation/make_html b/Documentation/make_html\nnew file mode 100644\nindex 0000000..cbd0a69\n--- /dev/null\n+++ b/Documentation/make_html\n@@ -0,0 +1,10 @@\n+#!/bin/sh\n+for t in *.txt\n+do\n+  asciidoc \\\n+  -b xhtml11 \\\n+  -d manpage \\\n+  -f ../asciidoc.conf \\\n+  -o `basename $t .txt`.html \\\n+  $t\n+done\ndiff --git a/Documentation/make_txt b/Documentation/make_txt\nnew file mode 100644\nindex 0000000..8fd6ab7\n--- /dev/null\n+++ b/Documentation/make_txt\n@@ -0,0 +1,13 @@\n+#!/bin/sh\n+for t in *.po\n+do\n+  po4a-translate \\\n+  --keep 0 \\\n+  --format text \\\n+  --option asciidoc \\\n+  --master-charset UTF8 \\\n+  --localized-charset UTF8 \\\n+  --master ../`basename $t .po`.txt \\\n+  --po $t \\\n+  --localized `basename $t .po`.txt\n+done\ndiff --git a/Documentation/make_update b/Documentation/make_update\nnew file mode 100644\nindex 0000000..59322d2\n--- /dev/null\n+++ b/Documentation/make_update\n@@ -0,0 +1,13 @@\n+#!/bin/sh\n+for t in *.po\n+do\n+  lang=`basename $PWD`\n+  cd ..\n+  po4a-updatepo \\\n+  --master-charset UTF8 \\\n+  --format text \\\n+  --master `basename $t .po`.txt \\\n+  --po $lang/$t \\\n+  --option asciidoc\n+  cd $lang\n+done\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167795","messageId":"1305292458-3920-4-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 3/7] cp git-stage.pot ja/git-stage.po","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:14Z","receivedAt":"2011-05-13T13:14:14Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/ja/git-stage.po |   71 +++++++++++++++++++++++++++++++++++++++++\n 1 files changed, 71 insertions(+), 0 deletions(-)\n create mode 100644 Documentation/ja/git-stage.po\n\ndiff --git a/Documentation/ja/git-stage.po b/Documentation/ja/git-stage.po\nnew file mode 100644\nindex 0000000..18c057f\n--- /dev/null\n+++ b/Documentation/ja/git-stage.po\n@@ -0,0 +1,71 @@\n+# SOME DESCRIPTIVE TITLE\n+# Copyright (C) YEAR Free Software Foundation, Inc.\n+# This file is distributed under the same license as the PACKAGE package.\n+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n+#\n+#, fuzzy\n+msgid \"\"\n+msgstr \"\"\n+\"Project-Id-Version: PACKAGE VERSION\\n\"\n+\"POT-Creation-Date: 2011-05-13 11:06+0900\\n\"\n+\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n+\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n+\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n+\"Language: \\n\"\n+\"MIME-Version: 1.0\\n\"\n+\"Content-Type: text/plain; charset=CHARSET\\n\"\n+\"Content-Transfer-Encoding: 8bit\\n\"\n+\n+#. type: Plain text\n+#: git-stage.txt:2\n+msgid \"git-stage(1)\"\n+msgstr \"\"\n+\n+#. type: Title -\n+#: git-stage.txt:5\n+#, no-wrap\n+msgid \"NAME\\n\"\n+msgstr \"\"\n+\n+#. type: delimited block =\n+#: git-stage.txt:7\n+msgid \"git-stage - Add file contents to the staging area\"\n+msgstr \"\"\n+\n+#. type: Title -\n+#: git-stage.txt:10\n+#, no-wrap\n+msgid \"SYNOPSIS\\n\"\n+msgstr \"\"\n+\n+#. type: delimited block =\n+#: git-stage.txt:13\n+#, no-wrap\n+msgid \"'git stage' args...\\n\"\n+msgstr \"\"\n+\n+#. type: Title -\n+#: git-stage.txt:16\n+#, no-wrap\n+msgid \"DESCRIPTION\\n\"\n+msgstr \"\"\n+\n+#. type: delimited block =\n+#: git-stage.txt:20\n+msgid \"\"\n+\"This is a synonym for linkgit:git-add[1].  Please refer to the documentation \"\n+\"of that command.\"\n+msgstr \"\"\n+\n+#. type: delimited block =\n+#: git-stage.txt:22\n+#, no-wrap\n+msgid \"\"\n+\"GIT\\n\"\n+\"---\\n\"\n+msgstr \"\"\n+\n+#. type: delimited block =\n+#: git-stage.txt:23\n+msgid \"Part of the linkgit:git[1] suite\"\n+msgstr \"\"\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167797","messageId":"1305292458-3920-5-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 4/7] translate ja/git-stage.po","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:15Z","receivedAt":"2011-05-13T13:14:15Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/ja/git-stage.po |   26 +++++++++++++-------------\n 1 files changed, 13 insertions(+), 13 deletions(-)\n\ndiff --git a/Documentation/ja/git-stage.po b/Documentation/ja/git-stage.po\nindex 18c057f..e464a06 100644\n--- a/Documentation/ja/git-stage.po\n+++ b/Documentation/ja/git-stage.po\n@@ -3,59 +3,57 @@\n # This file is distributed under the same license as the PACKAGE package.\n # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n #\n-#, fuzzy\n msgid \"\"\n-msgstr \"\"\n-\"Project-Id-Version: PACKAGE VERSION\\n\"\n-\"POT-Creation-Date: 2011-05-13 11:06+0900\\n\"\n+msgstr \"Project-Id-Version: PACKAGE VERSION\\n\"\n+\"POT-Creation-Date: 2011-05-12 11:34+0900\\n\"\n \"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n \"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n \"Language-Team: LANGUAGE <LL@li.org>\\n\"\n \"Language: \\n\"\n \"MIME-Version: 1.0\\n\"\n-\"Content-Type: text/plain; charset=CHARSET\\n\"\n+\"Content-Type: text/plain; charset=UTF-8\\n\"\n \"Content-Transfer-Encoding: 8bit\\n\"\n \n #. type: Plain text\n #: git-stage.txt:2\n msgid \"git-stage(1)\"\n-msgstr \"\"\n+msgstr \"git-stage(1)\"\n \n #. type: Title -\n #: git-stage.txt:5\n #, no-wrap\n msgid \"NAME\\n\"\n-msgstr \"\"\n+msgstr \"NAME\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:7\n msgid \"git-stage - Add file contents to the staging area\"\n-msgstr \"\"\n+msgstr \"git-stage - ファイルコンテンツをステージングエリアに追加する\"\n \n #. type: Title -\n #: git-stage.txt:10\n #, no-wrap\n msgid \"SYNOPSIS\\n\"\n-msgstr \"\"\n+msgstr \"SYNOPSIS\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:13\n #, no-wrap\n msgid \"'git stage' args...\\n\"\n-msgstr \"\"\n+msgstr \"'git stage' 引数...\\n\"\n \n #. type: Title -\n #: git-stage.txt:16\n #, no-wrap\n msgid \"DESCRIPTION\\n\"\n-msgstr \"\"\n+msgstr \"DESCRIPTION\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:20\n msgid \"\"\n \"This is a synonym for linkgit:git-add[1].  Please refer to the documentation \"\n \"of that command.\"\n-msgstr \"\"\n+msgstr \"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してください.\"\n \n #. type: delimited block =\n #: git-stage.txt:22\n@@ -64,8 +62,10 @@ msgid \"\"\n \"GIT\\n\"\n \"---\\n\"\n msgstr \"\"\n+\"GIT\\n\"\n+\"---\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:23\n msgid \"Part of the linkgit:git[1] suite\"\n-msgstr \"\"\n+msgstr \"この文書は linkgit:git[1] の一部です\"\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167799","messageId":"1305292458-3920-6-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 5/7] your file","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:16Z","receivedAt":"2011-05-13T13:14:16Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/git-stage.txt |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/git-stage.txt b/Documentation/git-stage.txt\nindex ba3fe0d..8fcb93c 100644\n--- a/Documentation/git-stage.txt\n+++ b/Documentation/git-stage.txt\n@@ -3,7 +3,7 @@ git-stage(1)\n \n NAME\n ----\n-git-stage - Add file contents to the staging area\n+git-stage - Add your file contents to the staging area\n \n \n SYNOPSIS\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167796","messageId":"1305292458-3920-7-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 6/7] update git-stage.po","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:17Z","receivedAt":"2011-05-13T13:14:17Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/ja/git-stage.po |   14 +++++++++-----\n 1 files changed, 9 insertions(+), 5 deletions(-)\n\ndiff --git a/Documentation/ja/git-stage.po b/Documentation/ja/git-stage.po\nindex e464a06..697b411 100644\n--- a/Documentation/ja/git-stage.po\n+++ b/Documentation/ja/git-stage.po\n@@ -4,15 +4,16 @@\n # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n #\n msgid \"\"\n-msgstr \"Project-Id-Version: PACKAGE VERSION\\n\"\n-\"POT-Creation-Date: 2011-05-12 11:34+0900\\n\"\n+msgstr \"\"\n+\"Project-Id-Version: PACKAGE VERSION\\n\"\n+\"POT-Creation-Date: 2011-05-13 11:18+0900\\n\"\n \"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n \"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n \"Language-Team: LANGUAGE <LL@li.org>\\n\"\n-\"Language: \\n\"\n \"MIME-Version: 1.0\\n\"\n \"Content-Type: text/plain; charset=UTF-8\\n\"\n \"Content-Transfer-Encoding: 8bit\\n\"\n+\"Language: \\n\"\n \n #. type: Plain text\n #: git-stage.txt:2\n@@ -27,7 +28,8 @@ msgstr \"NAME\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:7\n-msgid \"git-stage - Add file contents to the staging area\"\n+#, fuzzy\n+msgid \"git-stage - Add your file contents to the staging area\"\n msgstr \"git-stage - ファイルコンテンツをステージングエリアに追加する\"\n \n #. type: Title -\n@@ -53,7 +55,9 @@ msgstr \"DESCRIPTION\\n\"\n msgid \"\"\n \"This is a synonym for linkgit:git-add[1].  Please refer to the documentation \"\n \"of that command.\"\n-msgstr \"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してください.\"\n+msgstr \"\"\n+\"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してくだ\"\n+\"さい.\"\n \n #. type: delimited block =\n #: git-stage.txt:22\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167798","messageId":"1305292458-3920-8-git-send-email-okano.osamu@gmail.com","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"[PATCH 7/7] translate and remove fazzy","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-13T13:14:18Z","receivedAt":"2011-05-13T13:14:18Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"---\n Documentation/ja/git-stage.po |    3 +--\n 1 files changed, 1 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/ja/git-stage.po b/Documentation/ja/git-stage.po\nindex 697b411..cf45291 100644\n--- a/Documentation/ja/git-stage.po\n+++ b/Documentation/ja/git-stage.po\n@@ -28,9 +28,8 @@ msgstr \"NAME\\n\"\n \n #. type: delimited block =\n #: git-stage.txt:7\n-#, fuzzy\n msgid \"git-stage - Add your file contents to the staging area\"\n-msgstr \"git-stage - ファイルコンテンツをステージングエリアに追加する\"\n+msgstr \"git-stage - あなたのファイルコンテンツをステージングエリアに追加する\"\n \n #. type: Title -\n #: git-stage.txt:10\n-- \n1.7.5.1.169.g505a1.dirty\n"},{"id":"167811","messageId":"7v39ki8s2r.fsf@alter.siamese.dyndns.org","threadId":"27344","inReplyTo":"1305292458-3920-1-git-send-email-okano.osamu@gmail.com","subject":"Re: [PATCH 0/7] Document translation with po4a.","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-05-13T16:48:28Z","receivedAt":"2011-05-13T16:48:28Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Osamu OKANO <okano.osamu@gmail.com> writes:\n\n> 1 Document translation with po4a. \n> ---------------------------------\n> I tried to translate Docmentation with po4a.\n> Please relive my translation flow.\n\nThanks for a fun read.\n\nDo I understand correctly that this \"patchset\" is primarily for you to\nrequest comments on, and it is not about adding it literally as \"this\ngives a good framework for documentation i18n and demonstrates l10n with a\nsample page translated to Japanese\"?\n\nI have a few comments on the overall structure.\n\nFirst of all, I would prefer to have these in \"po\" subdirectory of\nDocumentation.\n\nSomething like:\n\n     Documentation/\n                  /Makefile\n                  /asciidoc.conf\n                  /git-stash.txt\n                  /po/ (new directory)\n                  /po/.gitignore\n                  /po/Makefile\n                  /po/pot/git-stash.pot\n                  /po/ja/git-stash.po\n                  /po/ko/git-stash.po\n                  /po/ru/git-stash.po\n\n\nThen from the end-user's point of view (not from the translators), I would\nlike to see Documentation/po/Makefile that lets me say\n\n\tcd Documentation/po && make html man install\n\nwhich would first create Documentation/po/*/*.txt files using the\ncorresponding .po files and the base documentation, and then run asciidoc\nto format them into Documentation/po/*/*.{html,[1-8]}, and install them to\ntheir final destination (e.g. /usr/share/man/$lang/man[1-8], but it is\nlikely that you have to make it configurable).\n\nWhen all of the above works solidly, Documentation/Makefile can learn a\nnew rule to make \"cd Documentation && make (man|html|install)\" would\ndescend to Documentation/po and run a corresponding make there.\n\nBroadly, there are four kinds of things to keep l10n up-to-date.\n\n - Starting a new documentation page\n   . add Documentation/po/pot/$newpage.pot for Documentation/$newpage.txt\n   . commit the addition of Documentation/po/pot/$newpage.pot\n\n - Updating the .pot from documentation\n\n - Starting a new language\n   . create a subdirectory in Documentation/po/$lang\n   . copy Documentation/po/*.pot to Documentation/po/$lang/ and translate\n   . test with the above \"end-user\" procedure.\n   . commit the addition of Documentation/po/$lang/*.po\n\n - Updating an existing documentation page\n   . edit Documentation/po/$lang/$page.po\n   . test with the above \"end-user\" procedure.\n   . commit the resulting Documentation/po/$lang/$page.po\n\n - Keeping your Documentation/po/$lang/*.pot up-to-date\n   . find Documentation/po/pot/$page.pot without Documentation/po/$lang/$page.po\n   . update Documentation/po/$lang/*.po from corresponding Documentation/pot/*.pot\n\nWe may want to have a rule in Documentation/po/.gitignore to ignore\neverything except a select few, namely Makefile, pot/*.pot, po/*/*.po,\nin order to avoid mistakes.\n\nWe also may want to have targets in Documentation/po/Makefile to help the\ntranslators carrying out the above set of tasks.  \"make lang=ja update\"\nmay do the following (just thinking aloud):\n\n - create Documentation/po/$(lang)/, if the directory does not exist.\n\n - for all Documentation/po/pot/%.pot,\n   . if Documentation/po/$(lang)/%.po does not exist, copy po/pot/%.pot to\n     po/$(lang)/%.po, and optionally \"git add -N\" the latter\n   . otherwise, update po/$(lang)/%.po with po/pot/%.pot using po4a-updatepo\n\n - for all Documentation/po/$(lang)/%.po,\n   . \"git rm --cached\" it if Documentation/po/pot/%.pot does not exist.\n\nI deliberately left the management of *.pot (i.e. the first two tasks in\nthe above list)outside the scope of \"make update\" run in Documentation/po/\ndirectory.  It often is easier for the i18n coordinators to manage if\neverybody works on translating the same version of documentation strings.\n\nI would expect the overall project workflow to be:\n\n - A developer can add or modify Documentation/*.txt to document new\n   commands any time without having to worry about documentation i18n.\n\n - A translator may tweak wording in Documentation/po/$(lang)/*.po any\n   time.\n\n - From time to time Documentation/po/pot/*.pot files are updated from\n   Documentation/*.txt by the i18n coordinator.  The translators are asked\n   to update their translation when this happens.\n\n - A translator gets update to Documentation/po/pot/*.pot, performsn\n   msgmerge^Wpo4a-updatepo to update Documentaiton/po/$(lang)/*.po and\n   commits the fixed-up version.\n\nYou may want to help the i18n coordinator by supporting \"make pot-update\"\ntarget in Documentation/po/Makefile to be run \"from time to time\".\n"},{"id":"167812","messageId":"7vy62a7dba.fsf@alter.siamese.dyndns.org","threadId":"27344","inReplyTo":"1305292458-3920-6-git-send-email-okano.osamu@gmail.com","subject":"Re: [PATCH 5/7] your file","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-05-13T16:52:41Z","receivedAt":"2011-05-13T16:52:41Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Osamu OKANO <okano.osamu@gmail.com> writes:\n\n> ---\n\nWhy?  Sorry, this change does not make sense to me.\n\n>  Documentation/git-stage.txt |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n>\n> diff --git a/Documentation/git-stage.txt b/Documentation/git-stage.txt\n> index ba3fe0d..8fcb93c 100644\n> --- a/Documentation/git-stage.txt\n> +++ b/Documentation/git-stage.txt\n> @@ -3,7 +3,7 @@ git-stage(1)\n>  \n>  NAME\n>  ----\n> -git-stage - Add file contents to the staging area\n> +git-stage - Add your file contents to the staging area\n>  \n>  \n>  SYNOPSIS\n"},{"id":"167813","messageId":"7vtycy7d9z.fsf@alter.siamese.dyndns.org","threadId":"27344","inReplyTo":"1305292458-3920-7-git-send-email-okano.osamu@gmail.com","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-05-13T16:53:28Z","receivedAt":"2011-05-13T16:53:28Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Osamu OKANO <okano.osamu@gmail.com> writes:\n\n> @@ -53,7 +55,9 @@ msgstr \"DESCRIPTION\\n\"\n>  msgid \"\"\n>  \"This is a synonym for linkgit:git-add[1].  Please refer to the documentation \"\n>  \"of that command.\"\n> -msgstr \"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してください.\"\n> +msgstr \"\"\n> +\"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してくだ\"\n> +\"さい.\"\n\nIsn't this a no-op?  Translators need to be careful about these.\n"},{"id":"167815","messageId":"1305305883.1177.10.camel@drew-northup.unet.maine.edu","threadId":"27344","inReplyTo":"1305292458-3920-6-git-send-email-okano.osamu@gmail.com","subject":"Re: [PATCH 5/7] your file","fromName":"Drew Northup","fromEmail":"drew.northup@maine.edu","sentAt":"2011-05-13T16:58:03Z","receivedAt":"2011-05-13T16:58:03Z","isPatch":true,"sender":{"key":"drew.northup@maine.edu","avatar":"https://avatars.githubusercontent.com/u/18331571?v=4"},"body":"\nOn Fri, 2011-05-13 at 22:14 +0900, Osamu OKANO wrote:\n> ---\n>  Documentation/git-stage.txt |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n> \n> diff --git a/Documentation/git-stage.txt b/Documentation/git-stage.txt\n> index ba3fe0d..8fcb93c 100644\n> --- a/Documentation/git-stage.txt\n> +++ b/Documentation/git-stage.txt\n> @@ -3,7 +3,7 @@ git-stage(1)\n>  \n>  NAME\n>  ----\n> -git-stage - Add file contents to the staging area\n> +git-stage - Add your file contents to the staging area\n\nIs the demarcation of file ownership (the audience) required in the\ntranslation? I suspect that the English original was left vague on that\npoint for a reason (the file could be yours, his, hers, or its). If a\nchange in the demarcation of the audience is required in the translation\nI suggest doing such changes there and leaving the source text intact as\ndifferent natural languages approach this matter differently. \nAs an example, some languages require that the text be reworded\nliterally to: \"Add the contents of the file to the staging area\" as it\nstands, being rather different from \"Add the contents of the file\nof/from [belonging to] you to the staging area\"; there is advantage to\nleaving this text as-is.\n\n-- \n-Drew Northup\n________________________________________________\n\"As opposed to vegetable or mineral error?\"\n-John Pescatore, SANS NewsBites Vol. 12 Num. 59\n"},{"id":"167838","messageId":"BANLkTi=Tr-iciTK+ScLao=MWgOnKotZ+5w@mail.gmail.com","threadId":"27344","inReplyTo":"7v39ki8s2r.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 0/7] Document translation with po4a.","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-05-14T09:14:57Z","receivedAt":"2011-05-14T09:14:57Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Fri, May 13, 2011 at 18:48, Junio C Hamano <gitster@pobox.com> wrote:\n\n> I have a few comments on the overall structure.\n\nFWIW I was going to add PO support to Documentation with po4a\neventually, but I'm really glad someone beat me to it.\n\nI agree with Junio's suggested workflow for this, it would be really\nnice if you would follow up on this and submit something in that\nstyle, I'd be happy to help if needed.\n"},{"id":"167842","messageId":"BANLkTi=u4_vbTjDyL1JNAz06=R_1XUikvA@mail.gmail.com","threadId":"27344","inReplyTo":"7vtycy7d9z.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Osamu OKANO","fromEmail":"okano.osamu@gmail.com","sentAt":"2011-05-14T13:36:13Z","receivedAt":"2011-05-14T13:36:13Z","isPatch":true,"sender":{"key":"okano.osamu@gmail.com","avatar":"https://gravatar.com/avatar/08dbdf62f1d26e7f96d27f74d6afcb4f027419102cab5c38e2bbc7c04b1871dd?d=mp&s=160"},"body":"2011/5/14 Junio C Hamano <gitster@pobox.com>:\n> Osamu OKANO <okano.osamu@gmail.com> writes:\n>\n>> @@ -53,7 +55,9 @@ msgstr \"DESCRIPTION\\n\"\n>>  msgid \"\"\n>>  \"This is a synonym for linkgit:git-add[1].  Please refer to the documentation \"\n>>  \"of that command.\"\n>> -msgstr \"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してください.\"\n>> +msgstr \"\"\n>> +\"これは linkgit:git-add[1] の同義語です.  git-add のドキュメントを参照してくだ\"\n>> +\"さい.\"\n>\n> Isn't this a no-op?  Translators need to be careful about these.\nYes, this part has no point.\n\nBefore I commit .po, I should run po4a-update\nfor the sake of line feed normalization.\nThen I can avoid the crap diff.\n\n1.2 new translation\n====================\n$ mkdir ja\n$ cp git-stage.pot ja/git-stage.po\n -> 0003-cp-git-stage.pot-ja-git-stage.po.patch\n$ cd ja\n$  translate .po by hand ...\n$ ../make_update  # add this procedure\n -> 0004-translate-ja-git-stage.po.patch\n"},{"id":"167860","messageId":"20110514192154.GA17271@elie","threadId":"27344","inReplyTo":"BANLkTi=u4_vbTjDyL1JNAz06=R_1XUikvA@mail.gmail.com","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-05-14T19:21:54Z","receivedAt":"2011-05-14T19:21:54Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Osamu OKANO wrote:\n> 2011/5/14 Junio C Hamano <gitster@pobox.com>:\n\n>> Isn't this a no-op?  Translators need to be careful about these.\n>\n> Yes, this part has no point.\n>\n> Before I commit .po, I should run po4a-update\n> for the sake of line feed normalization.\n> Then I can avoid the crap diff.\n>\n> 1.2 new translation\n> ====================\n> $ mkdir ja\n> $ cp git-stage.pot ja/git-stage.po\n>  -> 0003-cp-git-stage.pot-ja-git-stage.po.patch\n> $ cd ja\n> $  translate .po by hand ...\n> $ ../make_update  # add this procedure\n>  -> 0004-translate-ja-git-stage.po.patch\n\nI wonder if it is possible to encode this in .gitattributes\n(+ .git/config) as a \"clean\" filter or in .git/hooks as a pre-commit\nhook, for extra safety.\n\nAnother thought I have had occasionally is that it would be nice if\nthe versions committed did not have line numbers while the working\ncopy had line numbers, so an ordinary 3-way merge could be more likely\nto work for integrating changes[1].  But this second thought is less\nfully cooked. :)\n\nJonathan\n\n[1] This could be also done with smudge/clean filters, but it's hard\nto make it fast.  Maybe a pre-commit hook combined with a variant on\nthe trick in v1.7.2-rc0~24^2 (autocrlf: Make it work also for\nun-normalized repositories, 2010-05-12) would make it bearable.\n"},{"id":"167874","messageId":"7vd3jkr6ms.fsf@alter.siamese.dyndns.org","threadId":"27344","inReplyTo":"20110514192154.GA17271@elie","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-05-15T03:21:15Z","receivedAt":"2011-05-15T03:21:15Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jonathan Nieder <jrnieder@gmail.com> writes:\n\n> Another thought I have had occasionally is that it would be nice if\n> the versions committed did not have line numbers while the working\n> copy had line numbers, so an ordinary 3-way merge could be more likely\n> to work for integrating changes[1].  But this second thought is less\n> fully cooked. :)\n\nI would rather see that done as a customized content-level merge backend,\ni.e. at the same level as binary and union merges are specified. Losing\nline number information just for the sake of the generic merge that does\nnot have domain knowledge (read: \"stupid\") is a way suboptimal solution to\nthe problem, I would think.\n"},{"id":"167877","messageId":"20110515034408.GA28245@elie","threadId":"27344","inReplyTo":"7vd3jkr6ms.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-05-15T03:44:09Z","receivedAt":"2011-05-15T03:44:09Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Junio C Hamano wrote:\n\n> I would rather see that done as a customized content-level merge backend,\n> i.e. at the same level as binary and union merges are specified. Losing\n> line number information just for the sake of the generic merge that does\n> not have domain knowledge (read: \"stupid\") is a way suboptimal solution to\n> the problem, I would think.\n\nOh!  You are definitely right.  Thank you.\n"},{"id":"167889","messageId":"BANLkTin+oceG32Xr9J+f3Kmf05P_MdDgeA@mail.gmail.com","threadId":"27344","inReplyTo":"20110514192154.GA17271@elie","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-05-15T12:51:07Z","receivedAt":"2011-05-15T12:51:07Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Sat, May 14, 2011 at 21:21, Jonathan Nieder <jrnieder@gmail.com> wrote:\n\n> Another thought I have had occasionally is that it would be nice if\n> the versions committed did not have line numbers while the working\n> copy had line numbers, so an ordinary 3-way merge could be more likely\n> to work for integrating changes[1].  But this second thought is less\n> fully cooked. :)\n\nWe went over this for the main gettext series. Not commiting the line\nnumbers is unworkable, because it means that users who check out\ngit.git can't run msgmerge, because it completely fails without line\nnumbers.\n\nHaving a merge strategy to deal with them would be nice, but that can\nbe done by using the existing gitattributes config + msgmerge(1) to do\nthe work.\n"},{"id":"167890","messageId":"20110515125603.GA3178@elie","threadId":"27344","inReplyTo":"BANLkTin+oceG32Xr9J+f3Kmf05P_MdDgeA@mail.gmail.com","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-05-15T12:56:03Z","receivedAt":"2011-05-15T12:56:03Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> We went over this for the main gettext series.\n\nI mean no unkindness by this: Junio's answer was a little more\nhelpful.\n\n> Having a merge strategy to deal with them would be nice, but that can\n> be done by using the existing gitattributes config + msgmerge(1) to do\n> the work.\n\nCould you spell that out?  I haven't seen a working example of such\nconfiguration before, and when I tried I wasn't able to get msgmerge\nto do it.  I'd be happy to summarize the result of such an explanation\nas an example for the gitattributes manpage.\n"},{"id":"167892","messageId":"20110515130856.GB3178@elie","threadId":"27344","inReplyTo":"BANLkTin+oceG32Xr9J+f3Kmf05P_MdDgeA@mail.gmail.com","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-05-15T13:08:56Z","receivedAt":"2011-05-15T13:08:56Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Hi again,\n\nÆvar Arnfjörð Bjarmason wrote:\n\n> We went over this for the main gettext series. Not commiting the line\n> numbers is unworkable, because it means that users who check out\n> git.git can't run msgmerge, because it completely fails without line\n> numbers.\n\nPlease feel free to ignore my other reply.  You were saying something\nhelpful there, not just calling me out, and I completely misunderstood.\n\nI assume you were referring to this discussion:\n\n http://thread.gmane.org/gmane.comp.version-control.git/147973/focus=148044\n\nI'm confused about the msgmerge comment above.  I'll have to try it.\nBut anyway, of course I agree with the more important point that not\nproviding line numbers would make life harder for humans.\n\n> Having a merge strategy to deal with them would be nice, but that can\n> be done by using the existing gitattributes config + msgmerge(1) to do\n> the work.\n\nI'm still curious about this part, of course.\n\nThanks,\nJonathan\n"},{"id":"167895","messageId":"BANLkTin3hVusWc-oubW5T-L=mCatubHiKA@mail.gmail.com","threadId":"27344","inReplyTo":"20110515130856.GB3178@elie","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-05-15T13:25:48Z","receivedAt":"2011-05-15T13:25:48Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Sun, May 15, 2011 at 15:08, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Hi again,\n>\n> Ævar Arnfjörð Bjarmason wrote:\n>\n>> We went over this for the main gettext series. Not commiting the line\n>> numbers is unworkable, because it means that users who check out\n>> git.git can't run msgmerge, because it completely fails without line\n>> numbers.\n>\n> Please feel free to ignore my other reply.  You were saying something\n> helpful there, not just calling me out, and I completely misunderstood.\n\nNo problem. Sorry about the terseness. I don't have a lot of time for\nmailing list trawling these days.\n\n> I assume you were referring to this discussion:\n>\n>  http://thread.gmane.org/gmane.comp.version-control.git/147973/focus=148044\n>\n> I'm confused about the msgmerge comment above.  I'll have to try it.\n> But anyway, of course I agree with the more important point that not\n> providing line numbers would make life harder for humans.\n>\n>> Having a merge strategy to deal with them would be nice, but that can\n>> be done by using the existing gitattributes config + msgmerge(1) to do\n>> the work.\n>\n> I'm still curious about this part, of course.\n\nMaybe I'm just adding confusion here. I mean that as far as I can tell\nwe need to have the line numbers in the *.po files, I've been unable\nto not make merges go horribly wrong without them.\n\nWhenever I did a merge from git.pot to LANG.po where LANG.po didn't\nhave line numbers I ended up with issues like msgmerge confusing\nstrings between program A and program B, which doesn't happen if the\nPO file has file:line comments.\n\nBut having them will result in merge conflicts using Git's default\nmerge strategy, which can be mitigated by using msgmerge(1) to resolve\nthe conflicts, since it knows to ignore the line numbers and to look\nat the actual content.\n\nWe should be able to have a merge driver defined for git.git to do\nthat using the \"Defining a custom merge driver\" facility defined in\ngitattributes(5), but I haven't actually tried to make one. But it\nlooks easy enough, I'll look at doing that when this becomes a problem\nI have to deal with, and I'm hoping someone beats me to it :)\n"},{"id":"167896","messageId":"20110515135037.GB9422@elie","threadId":"27344","inReplyTo":"BANLkTin3hVusWc-oubW5T-L=mCatubHiKA@mail.gmail.com","subject":"Re: [PATCH 6/7] update git-stage.po","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-05-15T13:51:09Z","receivedAt":"2011-05-15T13:51:09Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> We should be able to have a merge driver defined for git.git to do\n> that using the \"Defining a custom merge driver\" facility defined in\n> gitattributes(5), but I haven't actually tried to make one. But it\n> looks easy enough, I'll look at doing that when this becomes a problem\n> I have to deal with, and I'm hoping someone beats me to it :)\n\nHeh.  Hopefully it won't be hard to do this as a program using\nlibgettextpo.  For now my i18n time will be going towards playing with\nthe toolset you've already sent, but afterwards I'd like to try that\nout.\n\nmsgmerge itself cannot perform a 3-way merge, if I understand it\ncorrectly --- its purpose is instead to integrate new strings and\nfuzzies as the document being translated changes over time, while what\nI would like to do is to combine two changes to a translation without\nRCS merge(1) [or rather git's ll-merge machinery] being confused by\nirrelevant changes to line numbers, message order, and line wrapping.\n\nThat said, msgmerge can be helpful in almost solving the problem.\n\nTo compare old-hu.po and new-hu.po:\n\n\tmsgmerge old-hu.po po/git.pot >+preimage.po\n\tmsgmerge new-hu.po po/git.pot >+postimage.po\n\tgit diff --no-index +preimage.po +postimage.po\n\nTo perform a 3-way merge between ancestor-hu.po, our-hu.po, and\ntheir-hu.po:\n\n\tmsgmerge ancestor-hu.po po/git.pot >+base.po\n\tmsgmerge our-hu.po po/git.pot >+ours.po\n\tmsgmerge their-hu.po po/git.pot >+theirs.po\n\tgit merge-file -L ours -L base -L theirs --stdout \\\n\t\t+ours.po +base.po +theirs.po >hu.po\n"}]}