git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 05/21] i18n: sequencer: mark entire sentences for translation

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
May 21, 2016, 13:15 UTC
Message-ID
<CACBZZX790=CtGnryUNrc7S1rpV7D75MOnWnXqd=Smdkojx=ymw@mail.gmail.com>
In-Reply-To
<573CD84F.7000207@sapo.pt>
On Wed, May 18, 2016 at 11:02 PM, Vasco Almeida <vascomalmeida@sapo.pt> wrote:
Show 33 quoted lines
> Às 19:28 de 18-05-2016, Eric Sunshine escreveu:
>> On Wed, May 18, 2016 at 11:27 AM, Vasco Almeida <vascomalmeida@sapo.pt> wrote:
>>> Mark entire sentences of error message rather than assembling one using
>>> placeholders (e.g. "Cannot %s during a %s"). That would facilitate
>>> translation work.
>>>
>>> Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
>>> ---
>>> diff --git a/sequencer.c b/sequencer.c
>>> @@ -697,9 +697,14 @@ static struct commit *parse_insn_line(char *bol, char *eol, struct replay_opts *
>>>         if (action != opts->action) {
>>> -               const char *action_str;
>>> -               action_str = action == REPLAY_REVERT ? "revert" : "cherry-pick";
>>> -               error(_("Cannot %s during a %s"), action_str, action_name(opts));
>>> +               if (action == REPLAY_REVERT)
>>> +                     error((opts->action == REPLAY_REVERT)
>>> +                           ? _("Cannot revert during a another revert.")
>>> +                           : _("Cannot revert during a cherry-pick."));
>>> +               else
>>> +                     error((opts->action == REPLAY_REVERT)
>>> +                           ? _("Cannot cherry-pick during a revert.")
>>> +                           : _("Cannot cherry-pick during another cherry-pick."));
>>>                 return NULL;
>>>         }
>>
>> Similar to my comment on patch 3/21, since the "actions" are literal
>> git commands, it's not clear why this change is helpful. Perhaps the
>> commit message needs to do a better job of persuading the reader?
>>
> I agree, I should have explained why this way. As I tried to explain on
> patch 3/21, it concerns a) we can't assume what and how does the
> translator translates into her language, so b) give translations freedom
> to choose.

For what it's worth I agree with you and disagree with Eric here and Junio in the "[PATCH 03/21] i18n: advice: internationalize message for conflicts" thread.

Of course there's a trade-off in source code verbosity when you have to change every occurance of (pseudocode):

    "our %s failed" # %s can be revert or merge
to:
    if (action == "merge")
        gettext("our merge failed")
    elsif (action == "revert")
        gettext("our revert failed")

But forcing the translator to turn every such occurrence that flows naturally in English into "the '%s' command failed" leads to a worse translation.

For example, if I ever get around to doing the Icelandic translation which I've had on my backlog I might translate something like this:

    "You can merge or revert this commit"
    "To merge run 'git merge $commit', to revert run 'git revert $commit'"
    # Subsequently
    "The %s failed" # for %s = merge || revert
As:
    "Þú getur getur framkvæmt samruna á þessari breytingu, eða afturkallað hana"
    "Til að framkvæma samruna keyrðu 'git merge $commit', til að
afturkalla 'git revert $commit'"
    # Subsequently
    "Samruninn mistókst þegar við keyrðum 'merge' skipunina".
    "Afturköllunnin mistókst þegar við keyrðum 'revert' skipunina"

I.e. even though you might be running "git merge" or "git revert" the UI is talking about those terms in the translated using native terms for the action of merging or reverting, but referring to the literal command names in English.

Not accepting changes like these means you have to translate this sort of stuff like:

    # Same as the above
    "Þú getur getur framkvæmt samruna á þessari breytingu, eða
afturkallað hana".
    "Til að framkvæma samruna keyrðu 'git merge $commit', til að
afturkalla 'git revert $commit'"
    # Subsequently
    "Okkur tókst ekki að keyra 'git %s' skipunina" # %s = merge || revert

It just doesn't flow as well, and leads to a more verbose translation. Now instead of referring to the translated verb I'd already established I have to just refer to literal command names.

Both this change and the change you submitted in <1463585274-9027-4-git-send-email-vascomalmeida@sapo.pt> and Junio didn't like in <xmqqd1ojqciz.fsf@gitster.mtv.corp.google.com> are actual examples of cases where if I was (finally getting of my ass to) doing the Icelandic translation I'd take advantage of this.

Previous: Vasco AlmeidaNext: Junio C Hamano
Message 12 of 42 in “i18n and tests updates”
  1. 00/21 i18n and tests updatesVasco Almeida, May 18, 2016
  2. 01/21 i18n: builtin/remote.c: fix mark for translationVasco Almeida, May 18, 2016
  3. 02/21 i18n: advice: mark string about detached head for translationVasco Almeida, May 18, 2016
  4. 03/21 i18n: advice: internationalize message for conflictsVasco Almeida, May 18, 2016
  5. Eric SunshineMay 18, 2016
  6. Vasco AlmeidaMay 18, 2016
  7. Junio C HamanoMay 18, 2016
  8. 04/21 i18n: transport: mark strings for translationVasco Almeida, May 18, 2016
  9. 05/21 i18n: sequencer: mark entire sentences for translationVasco Almeida, May 18, 2016
  10. Eric SunshineMay 18, 2016
  11. Vasco AlmeidaMay 18, 2016
  12. Ævar Arnfjörð BjarmasonMay 21, 2016
  13. Junio C HamanoMay 23, 2016
  14. Eric SunshineMay 23, 2016
  15. 06/21 i18n: sequencer: mark string for translationVasco Almeida, May 18, 2016
  16. 07/21 i18n: merge-octopus: mark messages for translationVasco Almeida, May 18, 2016
  17. 08/21 merge-octupus: use die shell function from git-sh-setup.shVasco Almeida, May 18, 2016
  18. 09/21 i18n: rebase: fix marked string to use eval_gettext variantVasco Almeida, May 18, 2016
  19. 10/21 i18n: rebase: mark placeholder for translationVasco Almeida, May 18, 2016
  20. 11/21 i18n: bisect: simplify error message for i18nVasco Almeida, May 18, 2016
  21. 12/21 t6030: update to use test_i18ncmpVasco Almeida, May 18, 2016
  22. 13/21 i18n: git-sh-setup.sh: mark strings for translationVasco Almeida, May 18, 2016
  23. 14/21 i18n: rebase-interactive: mark strings for translationVasco Almeida, May 18, 2016
  24. Eric SunshineMay 19, 2016
  25. Ævar Arnfjörð BjarmasonMay 21, 2016
  26. Vasco AlmeidaMay 21, 2016
  27. 15/21 i18n: rebase-interactive: mark here-doc strings for translationVasco Almeida, May 18, 2016
  28. 16/21 i18n: rebase-interactive: mark comments of squash for translationVasco Almeida, May 18, 2016
  29. 17/21 tests: use test_i18n* functions to suppress false positivesVasco Almeida, May 18, 2016
  30. 18/21 tests: unpack-trees: update to use test_i18n* functionsVasco Almeida, May 18, 2016
  31. 19/21 t9003: become resilient to GETTEXT_POISONVasco Almeida, May 18, 2016
  32. Eric SunshineMay 19, 2016
  33. Vasco AlmeidaMay 19, 2016
  34. Eric SunshineMay 20, 2016
  35. Junio C HamanoMay 20, 2016
  36. Eric SunshineMay 20, 2016
  37. Vasco AlmeidaMay 20, 2016
  38. Junio C HamanoMay 20, 2016
  39. Junio C HamanoMay 20, 2016
  40. Vasco AlmeidaMay 20, 2016
  41. 20/21 t4153: fix negated test_i18ngrep callVasco Almeida, May 18, 2016
  42. 21/21 t5523: use test_i18ngrep for negationVasco Almeida, May 18, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.