brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > > On 2019-06-22 at 21:42:33, Johannes Sixt wrote: > > Am 22.06.19 um 11:36 schrieb Dimitriy Ryazantcev: > > > diff --git a/strbuf.c b/strbuf.c > > > index 0e18b259ce..0a3ebc3749 100644 > > > --- a/strbuf.c > > > +++ b/strbuf.c > > > @@ -814,20 +814,28 @@ 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 ", > > > (unsigned)(bytes >> 30), > > > (unsigned)(bytes & ((1 << 30) - 1)) / 10737419); > > > + /* TRANSLATORS: ISO/IEC 80000-13:2008, clause 4: gibi */ > > > + strbuf_addstr(buf, _("Gi")); > > > } else if (bytes > 1 << 20) { > > > unsigned x = bytes + 5243; /* for rounding */ > > > - strbuf_addf(buf, "%u.%2.2u MiB", > > > + strbuf_addf(buf, "%u.%2.2u ", > > > x >> 20, ((x & ((1 << 20) - 1)) * 100) >> 20); > > > + /* TRANSLATORS: ISO/IEC 80000-13:2008, clause 4: mebi */ > > > + strbuf_addstr(buf, _("Mi")); > > > } else if (bytes > 1 << 10) { > > > unsigned x = bytes + 5; /* for rounding */ > > > - strbuf_addf(buf, "%u.%2.2u KiB", > > > + strbuf_addf(buf, "%u.%2.2u ", > > > x >> 10, ((x & ((1 << 10) - 1)) * 100) >> 10); > > > + /* TRANSLATORS: ISO/IEC 80000-13:2008, clause 4: kibi */ > > > + strbuf_addstr(buf, _("Ki")); > > > } else { > > > - strbuf_addf(buf, "%u bytes", (unsigned)bytes); > > > + strbuf_addf(buf, "%u ", (unsigned)bytes); > > > } > > > + /* TRANSLATORS: ISO/IEC 80000-13:2008, subclause 13-9.c: byte */ > > > + strbuf_addstr(buf, _("B")); > > > } > > > > > > void strbuf_add_absolute_path(struct strbuf *sb, const char *path) > > > > > > > All of the prefixes are in ISO/IEC, i.e., standardized. Why do they have > > to be translated? > > > > Isn't the way of presentation of magnitudes with a unit also > > standardized, and should not need to be translated? > > In my view, the translation is less important for the prefixes and more > important for the unit: at least French prefers the term "octet" over > "byte"[0], so instead of writing "MB", you'd write "Mo". Localization according to local rules is important for every unit part. There is a Russian adoption of IEC 80000-13:2008 called GOST R IEC 80000-13-2016[0]. And in this document there is national translations for these units\prefixes. So 'KiB' should become 'КиБ' according to this national standard. Same story with Ukrainian adoption called DSTU IEC 80000-13:2016[1]: 'KiB' -> 'КіБ'. Also according to ISO website seems that there is French version of IEC 80000-13:2008 exist. Not sure about French translation through. > In general, I think it's better to keep the prefixes and units together, > since trying to translate a single letter runs the risk of collisions > with other places in the code. It's likely to be easier for translators > as well. I agree with you in this part. I searched for similar code in other codebases and found such in KDE codebase[2]. I'll update patch if there is no objections. > [0] Technically, as in English, they have different meanings, but I've > always seen French units written with "o" for "octet", not "B" for > "byte". To solve this ambiguity IEC standard in subclause 13-9.с says that 'byte' implies 'octet' (8-bit byte). > -- > brian m. carlson: Houston, Texas, US > OpenPGP: https://keybase.io/bk2204 [0] http://docs.cntd.ru/document/1200143231 [1] http://online.budstandart.com/ua/catalog/doc-page.html?id_doc=69033 [1] https://cgit.kde.org/kcoreaddons.git/tree/src/lib/util/kformatprivate.cpp#n254 -- Sincerely, Dimitriy Ryazantcev