diff options
Diffstat (limited to 'po/README')
-rw-r--r-- | po/README | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/po/README b/po/README deleted file mode 100644 index 07595d369b..0000000000 --- a/po/README +++ /dev/null @@ -1,306 +0,0 @@ -Core GIT Translations -===================== - -This directory holds the translations for the core of Git. This document -describes how you can contribute to the effort of enhancing the language -coverage and maintaining the translation. - -The localization (l10n) coordinator, Jiang Xin <worldhello.net@gmail.com>, -coordinates our localization effort in the l10 coordinator repository: - - https://github.com/git-l10n/git-po/ - -The two character language translation codes are defined by ISO_639-1, as -stated in the gettext(1) full manual, appendix A.1, Usual Language Codes. - - -Contributing to an existing translation ---------------------------------------- -As a contributor for a language XX, you should first check TEAMS file in -this directory to see whether a dedicated repository for your language XX -exists. Fork the dedicated repository and start to work if it exists. - -Sometime, contributors may find that the translations of their Git -distributions are quite different with the translations of the -corresponding version from Git official. This is because some Git -distributions (such as from Ubuntu, etc.) have their own l10n workflow. -For this case, wrong translations should be reported and fixed through -their workflows. - - -Creating a new language translation ------------------------------------ -If you are the first contributor for the language XX, please fork this -repository, prepare and/or update the translated message file po/XX.po -(described later), and ask the l10n coordinator to pull your work. - -If there are multiple contributors for the same language, please first -coordinate among yourselves and nominate the team leader for your -language, so that the l10n coordinator only needs to interact with one -person per language. - - -Translation Process Flow ------------------------- -The overall data-flow looks like this: - - +-------------------+ +------------------+ - | Git source code | ---(1)---> | L10n coordinator | - | repository | <---(4)--- | repository | - +-------------------+ +------------------+ - | ^ - (2) (3) - V | - +------------------+ - | Language Team XX | - +------------------+ - - * Translatable strings are marked in the source file. - * L10n coordinator pulls from the source (1) - * L10n coordinator updates the message template po/git.pot - * Language team pulls from L10n coordinator (2) - * Language team updates the message file po/XX.po - * L10n coordinator pulls from Language team (3) - * L10n coordinator asks the result to be pulled (4). - - -Maintaining the po/git.pot file -------------------------------- - -(This is done by the l10n coordinator). - -The po/git.pot file contains a message catalog extracted from Git's -sources. The l10n coordinator maintains it by adding new translations with -msginit(1), or update existing ones with msgmerge(1). In order to update -the Git sources to extract the messages from, the l10n coordinator is -expected to pull from the main git repository at strategic point in -history (e.g. when a major release and release candidates are tagged), -and then run "make pot" at the top-level directory. - -Language contributors use this file to prepare translations for their -language, but they are not expected to modify it. - - -Initializing a XX.po file -------------------------- - -(This is done by the language teams). - -If your language XX does not have translated message file po/XX.po yet, -you add a translation for the first time by running: - - msginit --locale=XX - -in the po/ directory, where XX is the locale, e.g. "de", "is", "pt_BR", -"zh_CN", etc. - -Then edit the automatically generated copyright info in your new XX.po -to be correct, e.g. for Icelandic: - - @@ -1,6 +1,6 @@ - -# Icelandic translations for PACKAGE package. - -# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER - -# This file is distributed under the same license as the PACKAGE package. - +# Icelandic translations for Git. - +# Copyright (C) 2010 Ævar Arnfjörð Bjarmason <avarab@gmail.com> - +# This file is distributed under the same license as the Git package. - # Ævar Arnfjörð Bjarmason <avarab@gmail.com>, 2010. - -And change references to PACKAGE VERSION in the PO Header Entry to -just "Git": - - perl -pi -e 's/(?<="Project-Id-Version: )PACKAGE VERSION/Git/' XX.po - -Once you are done testing the translation (see below), commit the result -and ask the l10n coordinator to pull from you. - - -Updating a XX.po file ---------------------- - -(This is done by the language teams). - -If you are replacing translation strings in an existing XX.po file to -improve the translation, just edit the file. - -If there's an existing XX.po file for your language, but the repository -of the l10n coordinator has newer po/git.pot file, you would need to first -pull from the l10n coordinator (see the beginning of this document for its -URL), and then update the existing translation by running: - - msgmerge --add-location --backup=off -U XX.po git.pot - -in the po/ directory, where XX.po is the file you want to update. - -Once you are done testing the translation (see below), commit the result -and ask the l10n coordinator to pull from you. - - -Testing your changes --------------------- - -(This is done by the language teams, after creating or updating XX.po file). - -Before you submit your changes go back to the top-level and do: - - make - -On systems with GNU gettext (i.e. not Solaris) this will compile your -changed PO file with `msgfmt --check`, the --check option flags many -common errors, e.g. missing printf format strings, or translated -messages that deviate from the originals in whether they begin/end -with a newline or not. - - -Marking strings for translation -------------------------------- - -(This is done by the core developers). - -Before strings can be translated they first have to be marked for -translation. - -Git uses an internationalization interface that wraps the system's -gettext library, so most of the advice in your gettext documentation -(on GNU systems `info gettext` in a terminal) applies. - -General advice: - - - Don't mark everything for translation, only strings which will be - read by humans (the porcelain interface) should be translated. - - The output from Git's plumbing utilities will primarily be read by - programs and would break scripts under non-C locales if it was - translated. Plumbing strings should not be translated, since - they're part of Git's API. - - - Adjust the strings so that they're easy to translate. Most of the - advice in `info '(gettext)Preparing Strings'` applies here. - - - If something is unclear or ambiguous you can use a "TRANSLATORS" - comment to tell the translators what to make of it. These will be - extracted by xgettext(1) and put in the po/*.po files, e.g. from - git-am.sh: - - # TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] - # in your translation. The program will only accept English - # input at this point. - gettext "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " - - Or in C, from builtin/revert.c: - - /* TRANSLATORS: %s will be "revert" or "cherry-pick" */ - die(_("%s: Unable to write new index file"), action_name(opts)); - -We provide wrappers for C, Shell and Perl programs. Here's how they're -used: - -C: - - - Include builtin.h at the top, it'll pull in gettext.h, which - defines the gettext interface. Consult with the list if you need to - use gettext.h directly. - - - The C interface is a subset of the normal GNU gettext - interface. We currently export these functions: - - - _() - - Mark and translate a string. E.g.: - - printf(_("HEAD is now at %s"), hex); - - - Q_() - - Mark and translate a plural string. E.g.: - - printf(Q_("%d commit", "%d commits", number_of_commits)); - - This is just a wrapper for the ngettext() function. - - - N_() - - A no-op pass-through macro for marking strings inside static - initializations, e.g.: - - static const char *reset_type_names[] = { - N_("mixed"), N_("soft"), N_("hard"), N_("merge"), N_("keep"), NULL - }; - - And then, later: - - die(_("%s reset is not allowed in a bare repository"), - _(reset_type_names[reset_type])); - - Here _() couldn't have statically determined what the translation - string will be, but since it was already marked for translation - with N_() the look-up in the message catalog will succeed. - -Shell: - - - The Git gettext shell interface is just a wrapper for - gettext.sh. Import it right after git-sh-setup like this: - - . git-sh-setup - . git-sh-i18n - - And then use the gettext or eval_gettext functions: - - # For constant interface messages: - gettext "A message for the user"; echo - - # To interpolate variables: - details="oh noes" - eval_gettext "An error occurred: \$details"; echo - - In addition we have wrappers for messages that end with a trailing - newline. I.e. you could write the above as: - - # For constant interface messages: - gettextln "A message for the user" - - # To interpolate variables: - details="oh noes" - eval_gettextln "An error occurred: \$details" - - More documentation about the interface is available in the GNU info - page: `info '(gettext)sh'`. Looking at git-am.sh (the first shell - command to be translated) for examples is also useful: - - git log --reverse -p --grep=i18n git-am.sh - -Perl: - - - The Git::I18N module provides a limited subset of the - Locale::Messages functionality, e.g.: - - use Git::I18N; - print __("Welcome to Git!\n"); - printf __("The following error occurred: %s\n"), $error; - - Run `perldoc perl/Git/I18N.pm` for more info. - - -Testing marked strings ----------------------- - -Even if you've correctly marked porcelain strings for translation -something in the test suite might still depend on the US English -version of the strings, e.g. to grep some error message or other -output. - -To smoke out issues like these, Git tested with a translation mode that -emits gibberish on every call to gettext. To use it run the test suite -with it, e.g.: - - cd t && GIT_TEST_GETTEXT_POISON=true prove -j 9 ./t[0-9]*.sh - -If tests break with it you should inspect them manually and see if -what you're translating is sane, i.e. that you're not translating -plumbing output. - -If not you should replace calls to grep with test_i18ngrep, or -test_cmp calls with test_i18ncmp. If that's not enough you can skip -the whole test by making it depend on the C_LOCALE_OUTPUT -prerequisite. See existing test files with this prerequisite for -examples. |