Subject: Re: [PATCH 12/12] fsck: mark strings for translation

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Mon, 29 Oct 2018 18:38:15 +0100

On Mon, Oct 29 2018, Duy Nguyen wrote:

> On Mon, Oct 29, 2018 at 3:09 PM Junio C Hamano <[email-masked]> wrote:
>>
>> SZEDER Gábor <[email-masked]> 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/[email-masked]/