Re: [PATCH v2 2/7] strbuf: split out logic to humanise byte values
- From
Justin Tobler <jltobler@gmail.com>
- Date
- Dec 16, 2025, 14:41 UTC
- Message-ID
- <z7fuww4wnfpt5m7rojixyp3atejopjr623bi7o7snplas7dgsg@yktwdifek23m>
- In-Reply-To
- <CANYiYbExjGoCw4n92a75xtREE_EhjEySVSmk=NwJd3GoMAoVLg@mail.gmail.com>
On 25/12/16 02:18PM, Jiang Xin wrote:
Show 66 quoted lines
> On Tue, Dec 16, 2025 at 12:37 PM Junio C Hamano <gitster@pobox.com> wrote:
> >
> > Jiang Xin <worldhello.net@gmail.com> writes:
> >
> > > On Sat, Dec 13, 2025 at 6:37 AM Justin Tobler <jltobler@gmail.com> wrote:
> > >> + return humanise_rate ?
> > >> + /* TRANSLATORS: IEC 80000-13:2008 byte/second */
> > >> + xstrfmt(Q_("byte/s", "bytes/s", bytes)) :
> > >> + /* TRANSLATORS: IEC 80000-13:2008 byte */
> > >> + xstrfmt(Q_("byte", "bytes", bytes));
> > >
> > > We have already defined "byte" as a 10n string without plural forms in the
> > > file "t/helper/test-simple-ipc.c" via commit 36a7eb6876 (t0052: add simple-ipc
> > > tests and t/helper/test-simple-ipc tool, 2021-03-22 10:29:48 +0000).
> > >
> > > OPT_STRING(0, "byte", &bytevalue, N_("byte"), N_("ballast character")),
> > >
> > > The newly introduced usage of "byte" is now marked as having a plural form
> > > (via Q_("byte", "bytes", bytes)), which causes a conflict. This results in make
> > > pot failing with the following error:
> > >
> > > msgcat: msgid 'byte' is used without plural and with plural.
> > >
> > > This happens because gettext requires that a given msgid be treated
> > > consistently—either exclusively as a singular string or as part of a plural
> > > construct—but not both.
> > >
> > > To resolve this conflict, we can unmark the singular "byte" in
> > > t/helper/test-simple-ipc.c, allowing it to reuse the translation from the
> > > plural-form definition of "byte".
> >
> > I learned a new thing today and am happy :).
> >
> > But how does one "unmark" the singular "byte" there, exactly?
> >
> > Would something like this ...
> >
> > OPT_STRING(0, "byte", &bytevalue, Q_("byte", "bytes", 1), N_("ballast character")),
> >
> > ... a good idea, to "mark" it as a countable noun that has a plural
> > form?
> >
> > Or did you mean that we can simply drop N_() around it, i.e.,
> > N_("byte") -> "byte", to discard the i18n, because it merely is a
> > test helper?
>
> I prefer dropping N_() for "byte" in "t/helper/test-simple-ipc.c", and
> the i18n for the test helper will continue to work as before if we also
> mark the plural-form of "byte" in this patch series. (i.e., drop the N_()
> for "byte" in the test helper in this patch.)
>
> This is because N_() is a macro that does not invoke any gettext
> function, only returns msgid as in gettext.h:
>
> #define N_(msgid) msgid
>
> And the actual translation for the msgid (the argh field of an option)
> occurs later by calling:
>
> opts->argh ? _(opts->argh) : _("...")
>
> in "parse-options.c".
>
> However, replacing N_() with Q_() would cause the string to be
> processed by gettext twice: once at runtime via Q_(), and again
> when _(opts->argh) is evaluated.Thanks both! This thread has been very informative. In the version I'll go ahead and drop the N_() here for this patch. :)
-Justin