diff mbox series

l10n: localizable upload progress messages

Message ID 20190621185051.77354-1-dimitriy.ryazantcev@gmail.com
State New, archived
Headers show
Series l10n: localizable upload progress messages | expand

Commit Message

Dimitriy Ryazantcev June 21, 2019, 6:50 p.m. UTC
Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
---
 progress.c | 3 ++-
 strbuf.c   | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

Comments

Junio C Hamano June 21, 2019, 7:18 p.m. UTC | #1
Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com> writes:

> Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
> ---
>  progress.c | 3 ++-
>  strbuf.c   | 8 ++++----
>  2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/progress.c b/progress.c
> index a2e8cf64a8..3d47c06495 100644
> --- a/progress.c
> +++ b/progress.c
> @@ -151,7 +151,8 @@ static void throughput_string(struct strbuf *buf, uint64_t total,
>  	strbuf_humanise_bytes(buf, total);
>  	strbuf_addstr(buf, " | ");
>  	strbuf_humanise_bytes(buf, rate * 1024);
> -	strbuf_addstr(buf, "/s");
> +	/* TRANSLATORS: per second */
> +	strbuf_addstr(buf, _("/s"));
>  }

Hpmh, if it is OK to assume that in all human languages it is OK to
express the reate as <number> followed by translated "per second",
without allowing the order from getting changed, then ...

>  	if (bytes > 1 << 30) {
> -		strbuf_addf(buf, "%u.%2.2u GiB",
> +		strbuf_addf(buf, _("%u.%2.2u GiB"),
>  			    (unsigned)(bytes >> 30),
>  			    (unsigned)(bytes & ((1 << 30) - 1)) / 10737419);

wouldn't it make more sense to split GiB, MiB, KiB and "bytes" units
out of these messages, and ask only these unit names, without the
%u.%2.2u number formats, to get translated by the localization team?

>  	} else if (bytes > 1 << 20) {
>  		unsigned x = bytes + 5243;  /* for rounding */
> -		strbuf_addf(buf, "%u.%2.2u MiB",
> +		strbuf_addf(buf, _("%u.%2.2u MiB"),
>  			    x >> 20, ((x & ((1 << 20) - 1)) * 100) >> 20);
>  	} else if (bytes > 1 << 10) {
>  		unsigned x = bytes + 5;  /* for rounding */
> -		strbuf_addf(buf, "%u.%2.2u KiB",
> +		strbuf_addf(buf, _("%u.%2.2u KiB"),
>  			    x >> 10, ((x & ((1 << 10) - 1)) * 100) >> 10);
>  	} else {
> -		strbuf_addf(buf, "%u bytes", (unsigned)bytes);
> +		strbuf_addf(buf, _("%u bytes"), (unsigned)bytes);

This needs the Q_() to deal with plural (i.e. in en, between "byte"
and "bytes").

>  	}
>  }
Duy Nguyen June 22, 2019, 3:10 a.m. UTC | #2
On Sat, Jun 22, 2019 at 2:18 AM Junio C Hamano <gitster@pobox.com> wrote:
>
> Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com> writes:
>
> > Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
> > ---
> >  progress.c | 3 ++-
> >  strbuf.c   | 8 ++++----
> >  2 files changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/progress.c b/progress.c
> > index a2e8cf64a8..3d47c06495 100644
> > --- a/progress.c
> > +++ b/progress.c
> > @@ -151,7 +151,8 @@ static void throughput_string(struct strbuf *buf, uint64_t total,
> >       strbuf_humanise_bytes(buf, total);
> >       strbuf_addstr(buf, " | ");
> >       strbuf_humanise_bytes(buf, rate * 1024);
> > -     strbuf_addstr(buf, "/s");
> > +     /* TRANSLATORS: per second */
> > +     strbuf_addstr(buf, _("/s"));
> >  }
>
> Hpmh, if it is OK to assume that in all human languages it is OK to
> express the reate as <number> followed by translated "per second",
> without allowing the order from getting changed, then ...

Probably not (but I don't know any language that is not ok with this).
I would just add strbuf_humanise_rate() that prints "GiB/s",
"MiB/s"... Then we probably should print "bytes/second". This will
print "bytes/s" which looks just weird.

> >       if (bytes > 1 << 30) {
> > -             strbuf_addf(buf, "%u.%2.2u GiB",
> > +             strbuf_addf(buf, _("%u.%2.2u GiB"),
> >                           (unsigned)(bytes >> 30),
> >                           (unsigned)(bytes & ((1 << 30) - 1)) / 10737419);
>
> wouldn't it make more sense to split GiB, MiB, KiB and "bytes" units
> out of these messages, and ask only these unit names, without the
> %u.%2.2u number formats, to get translated by the localization team?

That assumes all languages will print the unit after the number. I
guess that is ok and it helps share code if we add
strbuf_humanise_rate() above because only the unit part changes.
Junio C Hamano June 24, 2019, 5:11 p.m. UTC | #3
Duy Nguyen <pclouds@gmail.com> writes:

>> Hpmh, if it is OK to assume that in all human languages it is OK to
>> express the reate as <number> followed by translated "per second",
>> without allowing the order from getting changed, then ...
>
> Probably not (but I don't know any language that is not ok with this).
> I would just add strbuf_humanise_rate() that prints "GiB/s",
> "MiB/s"... Then we probably should print "bytes/second". This will
> print "bytes/s" which looks just weird.
>
>> >       if (bytes > 1 << 30) {
>> > -             strbuf_addf(buf, "%u.%2.2u GiB",
>> > +             strbuf_addf(buf, _("%u.%2.2u GiB"),
>> >                           (unsigned)(bytes >> 30),
>> >                           (unsigned)(bytes & ((1 << 30) - 1)) / 10737419);
>>
>> wouldn't it make more sense to split GiB, MiB, KiB and "bytes" units
>> out of these messages, and ask only these unit names, without the
>> %u.%2.2u number formats, to get translated by the localization team?
>
> That assumes all languages will print the unit after the number. I
> guess that is ok and it helps share code if we add
> strbuf_humanise_rate() above because only the unit part changes.

I think this is the direction I expected the discussion to go in.
It seems that the other subthread went the other way, though.
diff mbox series

Patch

diff --git a/progress.c b/progress.c
index a2e8cf64a8..3d47c06495 100644
--- a/progress.c
+++ b/progress.c
@@ -151,7 +151,8 @@  static void throughput_string(struct strbuf *buf, uint64_t total,
 	strbuf_humanise_bytes(buf, total);
 	strbuf_addstr(buf, " | ");
 	strbuf_humanise_bytes(buf, rate * 1024);
-	strbuf_addstr(buf, "/s");
+	/* TRANSLATORS: per second */
+	strbuf_addstr(buf, _("/s"));
 }
 
 void display_throughput(struct progress *progress, uint64_t total)
diff --git a/strbuf.c b/strbuf.c
index 0e18b259ce..c309df1f5e 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -814,19 +814,19 @@  void strbuf_addstr_urlencode(struct strbuf *sb, const char *s,
 void strbuf_humanise_bytes(struct strbuf *buf, off_t bytes)
 {
 	if (bytes > 1 << 30) {
-		strbuf_addf(buf, "%u.%2.2u GiB",
+		strbuf_addf(buf, _("%u.%2.2u GiB"),
 			    (unsigned)(bytes >> 30),
 			    (unsigned)(bytes & ((1 << 30) - 1)) / 10737419);
 	} else if (bytes > 1 << 20) {
 		unsigned x = bytes + 5243;  /* for rounding */
-		strbuf_addf(buf, "%u.%2.2u MiB",
+		strbuf_addf(buf, _("%u.%2.2u MiB"),
 			    x >> 20, ((x & ((1 << 20) - 1)) * 100) >> 20);
 	} else if (bytes > 1 << 10) {
 		unsigned x = bytes + 5;  /* for rounding */
-		strbuf_addf(buf, "%u.%2.2u KiB",
+		strbuf_addf(buf, _("%u.%2.2u KiB"),
 			    x >> 10, ((x & ((1 << 10) - 1)) * 100) >> 10);
 	} else {
-		strbuf_addf(buf, "%u bytes", (unsigned)bytes);
+		strbuf_addf(buf, _("%u bytes"), (unsigned)bytes);
 	}
 }