Subject: Re: [PATCH 3 1/1] parse-options: localize mark-up of placeholder text in the short help

From: Junio C Hamano <[email-masked]>
Date: Mon, 15 Jul 2024 08:39:38 -0700

Alexander Shopov <[email-masked]> writes:

> Will the patch for expose substitution hint chars be included in 2.46?
> Should I do anything more?

Sorry, I lost track.  Did we resolve why "<>" is special and but
"[]" is OK to leave out of the translatable text?  IOW, is there
much point in advising the translators that "<>" is something
specifically they are allowed to change?

Stepping back a bit, would translators (especially for languages
without any need for the ability to replace <> with something else)
understand when told

    TRANSLATORS: change `<>' to other characters or leave as is

why anybody would want to change it in the first place?  Stepping
back even a bit more, probably making it clear to them what these
instances of [<%s>], [=<%s>], etc., are doing would be sufficient
to help them making the right decision?

If a translator for a hypothetical language that uses say „%s“
reads

	/* TRANSLATORS: <%s> here stands for an command line argument */
	_("<%s>")

in the comment, wouldn't that be sufficient to tell them they are
allowed to change "<>" to "„“"?

Similarly, explaining [<%s>] as "optional command line argument",
would tell them that it is OK for them to replace not just <> but
also [] if their language requires such a change, no?

Thanks for pinging.

>> diff --git a/parse-options.c b/parse-options.c
>> index 30b9e68f8a..06d962b00e 100644
>> --- a/parse-options.c
>> +++ b/parse-options.c
>> @@ -1070,11 +1070,17 @@ static int usage_argh(const struct option *opts, FILE *outfile)
>>                 !opts->argh || !!strpbrk(opts->argh, "()<>[]|");
>>         if (opts->flags & PARSE_OPT_OPTARG)
>>                 if (opts->long_name)
>> -                       s = literal ? "[=%s]" : "[=<%s>]";
>> +                       s = literal ? "[=%s]" :
>> +                         /* TRANSLATORS: change `<>' to other characters or leave as is */
>> +                         _("[=<%s>]");
>>                 else
>> -                       s = literal ? "[%s]" : "[<%s>]";
>> +                       s = literal ? "[%s]" :
>> +                         /* TRANSLATORS: change `<>' to other characters or leave as is */
>> +                         _("[<%s>]");
>>         else
>> -               s = literal ? " %s" : " <%s>";
>> +               s = literal ? " %s" :
>> +                 /* TRANSLATORS: change `<>' to other characters or leave as is */
>> +                 _(" <%s>");
>>         return utf8_fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
>>  }
>>
>> --
>> 2.45.2
>>