git-commit-vandalism/git-gui/po
Junio C Hamano 3eae308700 git-gui 0.21.0
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCAAGBQJYCJqmAAoJEDn3Aot9nM55uKQP/11BTzhOr9K3SLzwCr01ylGP
 94AOA511vx3fIX5aWQ29S96tGbluo73RdbVsWFKKJcKSErpFPscFEiRkyjeMXE2T
 yWWOPOg08tm28ppZNp0Kqjb8VykUUKuG6gVT59DNFUZUqHYQbiQy+t8nwT+Qow3U
 dvo6lksovfSaW2FORWIi5KF5gD4v2F9qsbFgr725a8UoBrOmF0SWaCG4/ZYj0WxF
 0rq8LjpvmMuQqd06DAoGMIsHa71R61En2QWfJ4YoE5+QRq8wQl37FmX+ojiA1rzY
 CG/vJO2Tw4v54wHKK1TCXG7LR4JhTcQZOa6zd8HHsPRn+viGDCMVUG9uMewfxH+m
 F47EVMxiKf0subm3fUhycqkvso0r6mOAddhz47RKT7tqU4XOnhPyGw0x6m7evawg
 Sz2+fOK3wwX2Qec5o3vBZKaEcOftSrLuZmbi5/j43crvcf+OAs9s/jdq/Ulpkks2
 JI2i0DLzHABTbDn6QsuysEZnituks8T8Fdm5NOldritgBNVY81ifatekFscxt6Ct
 OrT9eGJk6iZiX1RvS+R7wykKJCBkxiyHqM8vSj5tPWjApgtnopPMudzNX41geaL9
 ADeb8LVMTTNL/md8KED0deypilcPNnPbW035rAbyCpAsKbtgO3zdfzdzxsQ+dIvc
 MQpCDP5QPPr3toRVdNmb
 =VyhL
 -----END PGP SIGNATURE-----

Merge tag 'gitgui-0.21.0' of git://repo.or.cz/git-gui

git-gui 0.21.0

* tag 'gitgui-0.21.0' of git://repo.or.cz/git-gui: (22 commits)
  git-gui: set version 0.21
  git-gui: Mark 'All' in remote.tcl for translation
  git-gui i18n: Updated Bulgarian translation (565,0f,0u)
  git-gui: avoid persisting modified author identity
  git-gui: handle the encoding of Git's output correctly
  git-gui: unicode file name support on windows
  git-gui: Update Russian translation
  git-gui: maintain backwards compatibility for merge syntax
  git-gui i18n: mark string in lib/error.tcl for translation
  git-gui: fix incorrect use of Tcl append command
  git-gui i18n: mark "usage:" strings for translation
  git-gui i18n: internationalize use of colon punctuation
  git-gui: ensure the file in the diff pane is in the list of selected files
  git-gui: support for $FILENAMES in tool definitions
  git-gui: fix initial git gui message encoding
  git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
  git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
  git-gui: fix detection of Cygwin
  Amend tab ordering and text widget border and highlighting.
  Allow keyboard control to work in the staging widgets.
  ...
2016-10-20 09:33:17 -07:00
..
glossary Merge branch 'va/i18n' of ../git-gui into va/git-gui-i18n 2016-09-26 07:19:57 -07:00
.gitignore
bg.po git-gui 0.21.0 2016-10-20 09:33:17 -07:00
de.po
el.po
fr.po
git-gui.pot
hu.po
it.po
ja.po Merge branch 'sy/i18n' of git-gui 2016-09-07 10:24:25 -07:00
nb.po
po2msg.sh
pt_br.po
pt_pt.po Merge branch 'va/i18n' of ../git-gui into va/git-gui-i18n 2016-09-26 07:19:57 -07:00
README
ru.po git-gui 0.21.0 2016-10-20 09:33:17 -07:00
sv.po git-gui 0.20.0 2015-04-18 18:35:48 -07:00
vi.po git-gui 0.20.0 2015-04-18 18:35:48 -07:00
zh_cn.po

Localizing git-gui for your language
====================================

This short note is to help you, who reads and writes English and your
own language, help us getting git-gui localized for more languages.  It
does not try to be a comprehensive manual of GNU gettext, which is the
i18n framework we use, but tries to help you get started by covering the
basics and how it is used in this project.

1. Getting started.

You would first need to have a working "git".  Your distribution may
have it as "git-core" package (do not get "GNU Interactive Tools" --
that is a different "git").  You would also need GNU gettext toolchain
to test the resulting translation out.  Although you can work on message
translation files with a regular text editor, it is a good idea to have
specialized so-called "po file editors" (e.g. emacs po-mode, KBabel,
poedit, GTranslator --- any of them would work well).  Please install
them.

You would then need to clone the git-gui project repository and create
a feature branch to begin working:

	$ git clone git://repo.or.cz/git-gui.git
	$ cd git-gui.git
	$ git checkout -b my-translation

The "git checkout" command creates a new branch to keep your work
isolated and to make it simple to post your patch series when
completed.  You will be working on this branch.


2. Starting a new language.

In the git-gui directory is a po/ subdirectory.  It has a handful of
files whose names end with ".po".  Is there a file that has messages
in your language?

If you do not know what your language should be named, you need to find
it.  This currently follows ISO 639-1 two letter codes:

	http://www.loc.gov/standards/iso639-2/php/code_list.php

For example, if you are preparing a translation for Afrikaans, the
language code is "af".  If there already is a translation for your
language, you do not have to perform any step in this section, but keep
reading, because we are covering the basics.

If you did not find your language, you would need to start one yourself.
Copy po/git-gui.pot file to po/af.po (replace "af" with the code for
your language).  Edit the first several lines to match existing *.po
files to make it clear this is a translation table for git-gui project,
and you are the primary translator.  The result of your editing would
look something like this:

    # Translation of git-gui to Afrikaans
    # Copyright (C) 2007 Shawn Pearce
    # This file is distributed under the same license as the git-gui package.
    # YOUR NAME <YOUR@E-MAIL.ADDRESS>, 2007.
    #
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: git-gui\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2007-07-24 22:19+0300\n"
    "PO-Revision-Date: 2007-07-25 18:00+0900\n"
    "Last-Translator: YOUR NAME <YOUR@E-MAIL.ADDRESS>\n"
    "Language-Team: Afrikaans\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"

You will find many pairs of a "msgid" line followed by a "msgstr" line.
These pairs define how messages in git-gui application are translated to
your language.  Your primarily job is to fill in the empty double quote
pairs on msgstr lines with the translation of the strings on their
matching msgid lines.  A few tips:

 - Control characters, such as newlines, are written in backslash
   sequence similar to string literals in the C programming language.
   When the string given on a msgid line has such a backslash sequence,
   you would typically want to have corresponding ones in the string on
   your msgstr line.

 - Some messages contain an optional context indicator at the end,
   for example "@@noun" or "@@verb".  This indicator allows the
   software to select the correct translation depending upon the use.
   The indicator is not actually part of the message and will not
   be shown to the end-user.

   If your language does not require a different translation you
   will still need to translate both messages.

 - Often the messages being translated are format strings given to
   "printf()"-like functions.  Make sure "%s", "%d", and "%%" in your
   translated messages match the original.

   When you have to change the order of words, you can add "<number>$"
   between '%' and the conversion ('s', 'd', etc.) to say "<number>-th
   parameter to the format string is used at this point".  For example,
   if the original message is like this:

	"Length is %d, Weight is %d"

   and if for whatever reason your translation needs to say weight first
   and then length, you can say something like:

	"WEIGHT IS %2$d, LENGTH IS %1$d"

   A format specification with a '*' (asterisk) refers to *two* arguments
   instead of one, hence the succeeding argument number is two higher
   instead of one. So, a message like this

	"%s ... %*i of %*i %s (%3i%%)"

   is equivalent to

	"%1$s ... %2$*i of %4$*i %6$s (%7$3i%%)"

 - A long message can be split across multiple lines by ending the
   string with a double quote, and starting another string on the next
   line with another double quote.  They will be concatenated in the
   result.  For example:

   #: lib/remote_branch_delete.tcl:189
   #, tcl-format
   msgid ""
   "One or more of the merge tests failed because you have not fetched the "
   "necessary commits.  Try fetching from %s first."
   msgstr ""
   "HERE YOU WILL WRITE YOUR TRANSLATION OF THE ABOVE LONG "
   "MESSAGE IN YOUR LANGUAGE."

You can test your translation by running "make install", which would
create po/af.msg file and installs the result, and then running the
resulting git-gui under your locale:

	$ make install
	$ LANG=af git-gui

There is a trick to test your translation without first installing:

	$ make
	$ LANG=af ./git-gui.sh

When you are satisfied with your translation, commit your changes then submit
your patch series to the maintainer and the Git mailing list:

	$ edit po/af.po
	... be sure to update Last-Translator: and
	... PO-Revision-Date: lines.
	$ git add po/af.po
	$ git commit -s -m 'git-gui: added Afrikaans translation.'
	$ git send-email --to 'git@vger.kernel.org' \
	   --cc 'Pat Thoyts <patthoyts@users.sourceforge.net>' \
	   --subject 'git-gui: Afrikaans translation' \
	   master..


3. Updating your translation.

There may already be a translation for your language, and you may want
to contribute an update.  This may be because you would want to improve
the translation of existing messages, or because the git-gui software
itself was updated and there are new messages that need translation.

In any case, make sure you are up-to-date before starting your work:

	$ git checkout master
	$ git pull

In the former case, you will edit po/af.po (again, replace "af" with
your language code), and after testing and updating the Last-Translator:
and PO-Revision-Date: lines, "add/commit/push" as in the previous
section.

By comparing "POT-Creation-Date:" line in po/git-gui.pot file and
po/af.po file, you can tell if there are new messages that need to be
translated.  You would need the GNU gettext package to perform this
step.

	$ msgmerge -U po/af.po po/git-gui.pot

This updates po/af.po (again, replace "af" with your language
code) so that it contains msgid lines (i.e. the original) that
your translation did not have before.  There are a few things to
watch out for:

 - The original text in English of an older message you already
   translated might have been changed.  You will notice a comment line
   that begins with "#, fuzzy" in front of such a message.  msgmerge
   tool made its best effort to match your old translation with the
   message from the updated software, but you may find cases that it
   matched your old translated message to a new msgid and the pairing
   does not make any sense -- you would need to fix them, and then
   remove the "#, fuzzy" line from the message (your fixed translation
   of the message will not be used before you remove the marker).

 - New messages added to the software will have msgstr lines with empty
   strings.  You would need to translate them.

The po/git-gui.pot file is updated by the internationalization
coordinator from time to time.  You _could_ update it yourself, but
translators are discouraged from doing so because we would want all
language teams to be working off of the same version of git-gui.pot.

****************************************************************

This section is a note to the internationalization coordinator, and
translators do not have to worry about it too much.

The message template file po/git-gui.pot needs to be kept up to date
relative to the software the translations apply to, and it is the
responsibility of the internationalization coordinator.

When updating po/git-gui.pot file, however, _never_ run "msgmerge -U
po/xx.po" for individual language translations, unless you are absolutely
sure that there is no outstanding work on translation for language xx.
Doing so will create unnecessary merge conflicts and force needless
re-translation on translators.  The translator however may not have access
to the msgmerge tool, in which case the coordinator may run it for the
translator as a service.

But mistakes do happen.  Suppose a translation was based on an older
version X, the POT file was updated at version Y and then msgmerge was run
at version Z for the language, and the translator sent in a patch based on
version X:

         ? translated
        /
    ---X---Y---Z (master)

The coordinator could recover from such a mistake by first applying the
patch to X, replace the translated file in Z, and then running msgmerge
again based on the updated POT file and commit the result.  The sequence
would look like this:

    $ git checkout X
    $ git am -s xx.patch
    $ git checkout master
    $ git checkout HEAD@{1} po/xx.po
    $ msgmerge -U po/xx.po po/git-gui.pot
    $ git commit -c HEAD@{1} po/xx.po

State in the message that the translated messages are based on a slightly
older version, and msgmerge was run to incorporate changes to message
templates from the updated POT file.  The result needs to be further
translated, but at least the messages that were updated by the patch that
were not changed by the POT update will survive the process and do not
need to be re-translated.