Re: [PATCH 12/12] fsck: mark strings for translation
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Oct 29, 2018, 17:43 UTC
- Message-ID
- <87efc8lkcd.fsf@evledraar.gmail.com>
- In-Reply-To
- <87ftwolkl4.fsf@evledraar.gmail.com>
On Mon, Oct 29 2018, Ævar Arnfjörð Bjarmason wrote:
Show 49 quoted lines
> On Mon, Oct 29 2018, Duy Nguyen wrote:
>
>> On Mon, Oct 29, 2018 at 3:09 PM Junio C Hamano <gitster@pobox.com> wrote:
>>>
>>> SZEDER Gábor <szeder.dev@gmail.com> writes:
>>>
>>> >> - fprintf(stderr, "%s in %s %s: %s\n",
>>> >> - msg_type, printable_type(obj), describe_object(obj), err);
>>> >> + fprintf_ln(stderr, _("%s in %s %s: %s"),
>>> >
>>> > Are the (f)printf() -> (f)printf_ln() changes all over
>>> > 'builtin/fsck.c' really necessary to mark strings for translation?
>>>
>>> It is beyond absolute minimum but I saw it argued here that this
>>> makes it easier to manage the .po and .pot files if your message
>>> strings do not end with LF, a you are much less likely to _add_
>>> unneeded LF to the translated string than _lose_ LF at the end of
>>> translated string.
>>
>> Especially when \n plays an important role and we don't trust
>> translators to keep it [1] [2]. It's probably a too defensive stance
>> and often does not apply, so nowadays I do it just to keep a
>> consistent pattern in the code.
>>
>> [1] https://public-inbox.org/git/20120308220131.GA10122@burratino/#t
>> [2] but then translators can crash programs anyway (e.g. changing %d
>> to %s...) we just trust gettext tools to catch problems early.
>
> As Jonathan pointed out in the follow-up message[1] this sort of thing
> is checked for in msgfmt, so sure, let's strip the \n, but it's really
> not something we need to worry about. Likewise with translators turning
> "%s" into "%d" (or "% s") or whatever.
>
> $ git diff -U0
> diff --git a/po/de.po b/po/de.po
> index 47986814c9..62de46c63d 100644
> --- a/po/de.po
> +++ b/po/de.po
> @@ -23 +23 @@ msgid "%shint: %.*s%s\n"
> -msgstr "%sHinweis: %.*s%s\n"
> +msgstr "%sHinweis: %.*s%s"
> $ make [...]
> [...]
> po/de.po:23: 'msgid' and 'msgstr' entries do not both end with '\n'
> msgfmt: found 1 fatal error
> 3470 translated messages.
> make: *** [Makefile:2488: po/build/locale/de/LC_MESSAGES/git.mo] Error 1
>
> 1. https://public-inbox.org/git/CACsJy8AcUy9FZiiehGc7mEL4i+XP6u0pmH1rGoR-WZnhYT1UMQ@mail.gmail.com/...to add to that, if there *are* formatting errors that --check doesn't spot let's hear about it so we can just patch gettext upstream: https://github.com/autotools-mirror/gettext/blob/master/gettext-tools/src/msgl-check.c#L572-L756
Unlike the rest of our stack where we need to support however many years old tools we can freely rely on bleeding-edge gettext features, since the only person we need to convince to upgrade is Jiang. I.e. he accepts the PRs from translators, (presumably) runs msgfmt --check and then submits the result to Junio.
See the "Usually..." paragraph in my 66f5f6dca9 ("C style: use standard style for "TRANSLATORS" comments", 2017-05-11) for an example. We already rely on a fairly recent gettext toolchain.