diff mbox series

[v2,9/9] l10n: Document the new l10n workflow

Message ID 20220519081548.3380-10-worldhello.net@gmail.com (mailing list archive)
State New, archived
Headers show
Series None | expand

Commit Message

Jiang Xin May 19, 2022, 8:15 a.m. UTC
From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>

Change the "flow" of how translators interact with the l10n repository
at [1] to adjust it for a new workflow of not having a po/git.pot file
in-tree at all, and to not commit line numbers to the po/*.po files
that we do track in tree.

The current workflow was added in a combination of dce37b66fb0 (l10n:
initial git.pot for 1.7.10 upcoming release, 2012-02-13) and
271ce198cd0 (Update l10n guide, 2012-02-29).

As noted in preceding commits I think that it came about due to
technical debt I'd left behind in how the "po/git.pot" file was
created, and a mis-impression that the file:line comments were needed
as anything more than a transitory translation aid.

As the updated po/README.md shows the new workflow is substantially
the same, the difference is that translators no longer need to
initially pull from the l10n coordinator for a new po/git.pot, they
can simply use git.git's canonical source repository.

The l10n coordinator is still expected to announce a release to
translate, which presumably would always be Junio's latest release
tag. I'm not certain if this part of the process is actually
important. I.e. the delta translation-wise between that tag and
"master" is usually pretty small, so perhaps translators can just work
on "master" instead.

1. https://github.com/git-l10n/git-po/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 po/README.md | 191 ++++++++++++++++++++++++---------------------------
 1 file changed, 88 insertions(+), 103 deletions(-)

Comments

Junio C Hamano May 19, 2022, 5:18 p.m. UTC | #1
Jiang Xin <worldhello.net@gmail.com> writes:

> +## Creating the "po/git.pot" file
> +
> +The "po/git.pot" file, once generated by the the l10n coordinator had

"once generated" -> "used to be generated"

> +been removed from the tree. L10n contributors can generated it at

"can generated it" -> "can generate it"

> +runtime using command:
> +
> +```shell
> +make pot
> +```

Just a minor detail, but I wonder if we want "make po/git.pot" here
rather than "make pot", as the text before this command talks about
"creating the po/git.pot file".  It used to be that the readers of
this document didn't have to worry about po/git.pot and the only
thing they needed to know was stuff starting from "make po-init",
but now they must be more aware of po/git.pot than before, so...

> +Then language contributors use this file to prepare translations for
> +their language, but they are not expected to modify it.

> @@ -115,32 +117,14 @@ If your language XX does not have translated message file "po/XX.po" yet,
> ...
> +make po-init PO_FILE=po/XX.po
>  ```
>  
> -And change references to PACKAGE VERSION in the PO Header Entry to
> -just "Git":
> +Where XX is the locale, e.g. "de", "is", "pt\_BR", "zh\_CN", etc.

"Where" -> "where".

XX was called "the two character language translation codes"
(mouthful isn't it) in much earlier part of the documentation, but
here it stands for more than the language part.  I wonder if that
is confusing and we'd better use something other than XX.

In any case, we should define "locale" and tell the readers that
language "XX" can be followed by territory "_YY" that clarifies the
variant of the language, probably at the same place where we
explained the two-letter language code and to the same degree by
explaining the two-letter country codes and where they come from
(i.e. ISO 3166-1).

> +It will:
>  
> +- Call "make pot" at runtime to generate new "po/git.pot" file

What does "at runtime" mean here?  Would it change the meaning if I
rewrote this line to

	Call "make pot" to generate new "po/git.pot" file

at all?  To put it differently, does it call "make pot" at runtime,
but it does not call "msgmerge --add-location ..." at runtime?

If "at runtime" is truly a noiseword, then remove it.  It is
confusing.

> +- Call "msgmerge --add-location --backup=off -U po/XX.po po/git.pot"
> +  to update your "po/XX.po"
> +- The "--add-location" option for msgmerge will add location lines,
> +  and these location lines will help translation tools to location
> +  translation context easily.

"help translation tools to location" -> "help translation tools to locate"

probably.

> +To save a location-less "po/XX.po" automatically in repository, you
> +can:
> +
> +- Define new attribute for "po/XX.po" by adding new line in
> +  ".git/info/attributes":
> +
> +        /po/XX.po filter=gettext-no-location
> +
> +- Define driver for "gettext-no-location" filter:

"filter" -> "clean filter"?

> +        $ git config --global filter.gettext-no-location.clean \
> +              "msgcat --no-location -"
> +
> +You're now ready to ask the l10n coordinator to pull from you.

Should this part also explain what it is doing, just like we
explained what happens when "make po-update" is run in an earlier
section?

    The above sets up a clean filter for po/XX.po file so that the
    "msgcat --no-location" command is used to strip out the location
    information from the contents when the file is checked in.

or something, perhaps?
Jiang Xin May 21, 2022, 3:06 p.m. UTC | #2
On Fri, May 20, 2022 at 1:18 AM Junio C Hamano <gitster@pobox.com> wrote:
> XX was called "the two character language translation codes"
> (mouthful isn't it) in much earlier part of the documentation, but
> here it stands for more than the language part.  I wonder if that
> is confusing and we'd better use something other than XX.
>
> In any case, we should define "locale" and tell the readers that
> language "XX" can be followed by territory "_YY" that clarifies the
> variant of the language, probably at the same place where we
> explained the two-letter language code and to the same degree by
> explaining the two-letter country codes and where they come from
> (i.e. ISO 3166-1).

May change like this:

-- snip --
@@ -9,8 +9,15 @@

     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.
+We will use XX as an alias to refer to the language translation code in
+the following paragraphs, for example we use "po/XX.po" to refer to a
+translation file for a specific language. But this doesn't mean that
+the language code has only two letters. We should know that the language
+code can be in one of two forms: "ll" or "ll\_CC". Here "ll" is the ISO
+639 two-letter language code and "CC" is the ISO 3166 two-letter code
+for country names and subdivisions. For example, for German, the language
+code is "de", and for Chinese in mainland China, the language code is
+"zh\_CN".
-- snap --
diff mbox series

Patch

diff --git a/po/README.md b/po/README.md
index 19fabb4acf..00c090e7c0 100644
--- a/po/README.md
+++ b/po/README.md
@@ -46,65 +46,67 @@  for a new language translation. Because there are more than 5000 messages
 in the template message file "po/git.pot" that need to be translated,
 this is not a piece of cake for the contributor for a new language.
 
-The core template message file which contains a small set of messages
-will be generated in "po-core/core.pot" automatically by running a helper
-program named "git-po-helper" (described later).
+The "core" set of messages can be generated at "po/git-core.pot" by
+running:
 
 ```shell
-git-po-helper init --core XX.po
+make core-pot
 ```
 
-After translating the generated "po-core/XX.po", you can merge it to
-"po/XX.po" using the following commands:
-
-```shell
-msgcat po-core/XX.po po/XX.po -s -o /tmp/XX.po
-mv /tmp/XX.po po/XX.po
-git-po-helper update XX.po
-```
-
-Edit "po/XX.po" by hand to fix "fuzzy" messages, which may have misplaced
-translated messages and duplicate messages.
+And then proceeding with the rest of these instructions on the new
+generated "po/git-core.pot" file.
 
 
 ## 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 |
-                                     +------------------+
+    +-------------------+             +------------------+
+    | Git source code   | ----(2)---> | L10n coordinator |
+    | repository        | <---(5)---- | repository       |
+    +-------------------+             +------------------+
+                    |                     |    ^
+                   (1)                   (3)  (4)
+                    V                     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).
+- Language teams can start translation iterations at any time, even
+  before the l10n window opens:
+
+  + Pull from the source (1)
+  + Update the message file by running "make po-update PO\_FILE=po/XX.po"
+  + Translate the message file "po/XX.po"
 
+- The L10n coordinator pulls from source and announces the l10n window
+  open (2)
+- Language team pulls from the l10n coordinator, starts another
+  translation iteration against the l10n coordinator's tree (3)
 
-## Maintaining the "po/git.pot" file
+  + Run "git pull --rebase" from the l10n coordinator
+  + Update the message file by running "make po-update PO\_FILE=po/XX.po"
+  + Translate the message file "po/XX.po"
+  + Squash trivial l10n git commits using "git rebase -i"
 
-(This is done by the l10n coordinator).
+- Language team sends pull request to the l10n coordinator (4)
+- L10n coordinator checks and merges
+- L10n coordinator asks the result to be pulled (5).
 
-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.
+## Creating the "po/git.pot" file
+
+The "po/git.pot" file, once generated by the the l10n coordinator had
+been removed from the tree. L10n contributors can generated it at
+runtime using command:
+
+```shell
+make pot
+```
+
+Then language contributors use this file to prepare translations for
+their language, but they are not expected to modify it.
 
 
 ## Initializing a "XX.po" file
@@ -115,32 +117,14 @@  If your language XX does not have translated message file "po/XX.po" yet,
 you add a translation for the first time by running:
 
 ```shell
-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:
-
-```diff
-@@ -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.
+make po-init PO_FILE=po/XX.po
 ```
 
-And change references to PACKAGE VERSION in the PO Header Entry to
-just "Git":
+Where XX is the locale, e.g. "de", "is", "pt\_BR", "zh\_CN", etc.
 
-```shell
-perl -pi -e 's/(?<="Project-Id-Version: )PACKAGE VERSION/Git/' XX.po
-```
+The newly generated message file "po/XX.po" is based on the core pot
+file "po/git-core.pot", so it contains only a minimal set of messages
+and it's a good start for a new language contribution.
 
 Once you are done testing the translation (see below), commit the result
 and ask the l10n coordinator to pull from you.
@@ -153,19 +137,40 @@  and ask the l10n coordinator to pull from you.
 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:
+If you want to find new translatable strings in source files of upstream
+repository and propagate them to your "po/XX.po", run command:
 
 ```shell
-msgmerge --add-location --backup=off -U XX.po git.pot
+make po-update PO_FILE=po/XX.po
 ```
 
-in the "po/" directory, where "XX.po" is the file you want to update.
+It will:
 
-Once you are done testing the translation (see below), commit the result
-and ask the l10n coordinator to pull from you.
+- Call "make pot" at runtime to generate new "po/git.pot" file
+- Call "msgmerge --add-location --backup=off -U po/XX.po po/git.pot"
+  to update your "po/XX.po"
+- The "--add-location" option for msgmerge will add location lines,
+  and these location lines will help translation tools to location
+  translation context easily.
+
+Once you are done testing the translation (see below), it's better
+to commit a location-less "po/XX.po" file to save repository space
+and make a user-friendly patch for review.
+
+To save a location-less "po/XX.po" automatically in repository, you
+can:
+
+- Define new attribute for "po/XX.po" by adding new line in
+  ".git/info/attributes":
+
+        /po/XX.po filter=gettext-no-location
+
+- Define driver for "gettext-no-location" filter:
+
+        $ git config --global filter.gettext-no-location.clean \
+              "msgcat --no-location -"
+
+You're now ready to ask the l10n coordinator to pull from you.
 
 
 ## Fuzzy translation
@@ -196,6 +201,14 @@  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.
 
+L10n coordinator will check your contributions using a helper program
+(see "PO helper" section below):
+
+```shell
+git-po-helper check-po po/XX.po
+git-po-helper check-commits <rev-list-opts>
+```
+
 
 ## Marking strings for translation
 
@@ -370,29 +383,6 @@  l10n workflow.
 To build and install the helper program from source, see
 [git-po-helper/README][].
 
-Usage for git-po-helper:
-
-- To start a new language translation:
-
-  ```shell
-  git-po-helper init XX.po
-  ```
-
-- To update your "XX.po" file:
-
-  ```shell
-  git-po-helper update XX.po
-  ```
-
-- To check commit log and syntax of "XX.po":
-
-  ```shell
-  git-po-helper check-po XX.po
-  git-po-helper check-commits
-  ```
-
-Run "git-po-helper" without arguments to show usage.
-
 
 ## Conventions
 
@@ -436,13 +426,8 @@  additional conventions:
 - Initialize proper filename of the "XX.po" file conforming to
   iso-639 and iso-3166.
 
-- Must complete a minimal translation based on the "po-core/core.pot"
-  template. Using the following command to initialize the minimal
-  "po-core/XX.po" file:
-
-  ```shell
-  git-po-helper init --core <your-language>
-  ```
+- Must complete a minimal translation based on the "Core
+  translation". See that section above.
 
 - Add a new entry in the "po/TEAMS" file with proper format, and check
   the syntax of "po/TEAMS" by running the following command: