On Mon, Oct 29 2018, Duy Nguyen wrote: > On Mon, Oct 29, 2018 at 3:09 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: >> >> SZEDER Gábor <szeder.dev@xxxxxxxxx> 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@xxxxxxxxxxxxxx/