diff --git a/headers/private/shared/StringForRate.h b/headers/private/shared/StringForRate.h index 65e17407da..33a86b8c91 100644 --- a/headers/private/shared/StringForRate.h +++ b/headers/private/shared/StringForRate.h @@ -11,8 +11,7 @@ namespace BPrivate { -const char* string_for_rate(double rate, char* string, size_t stringSize, - double base = 1000.0f); +const char* string_for_rate(double rate, char* string, size_t stringSize); } // namespace BPrivate diff --git a/src/kits/shared/StringForRate.cpp b/src/kits/shared/StringForRate.cpp index a2d3f57a6f..5d27c8f2bd 100644 --- a/src/kits/shared/StringForRate.cpp +++ b/src/kits/shared/StringForRate.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2012 Haiku Inc. All rights reserved. + * Copyright 2012-2018, Haiku Inc. All rights reserved. * Distributed under the terms of the MIT License. */ @@ -7,6 +7,7 @@ #include +#include #include using BPrivate::gSystemCatalog; @@ -20,42 +21,46 @@ namespace BPrivate { const char* -string_for_rate(double rate, char* string, size_t stringSize, double base) +string_for_rate(double rate, char* string, size_t stringSize) { - double kbps = rate / base; - if (kbps < 10.0) { - const char* trKey = B_TRANSLATE_MARK("%d bps"); - snprintf(string, stringSize, gSystemCatalog.GetString(trKey, - B_TRANSLATION_CONTEXT), (int)rate); + double kib = rate / 1024.0; + if (kib < 1.0) { + BString tmp; + BStringFormat format( + gSystemCatalog.GetString(B_TRANSLATE_MARK( + "{0, plural, one{# byte/s} other{# bytes/s}}"), + B_TRANSLATION_CONTEXT, "bytes per second")); + format.Format(tmp, (int)rate); + + strlcpy(string, tmp.String(), stringSize); return string; } - double mbps = kbps / base; - if (mbps < 10.0) { - const char* trKey = B_TRANSLATE_MARK("%.0f Kbps"); + double mib = kib / 1024.0; + if (mib < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%3.2f KiB/s"); snprintf(string, stringSize, gSystemCatalog.GetString(trKey, - B_TRANSLATION_CONTEXT), kbps); + B_TRANSLATION_CONTEXT, "KiB per second"), kib); return string; } - double gbps = mbps / base; - if (gbps < 10.0) { - const char* trKey = B_TRANSLATE_MARK("%.0f Mbps"); + double gib = mib / 1024.0; + if (gib < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%3.2f MiB/s"); snprintf(string, stringSize, gSystemCatalog.GetString(trKey, - B_TRANSLATION_CONTEXT), mbps); + B_TRANSLATION_CONTEXT, "MiB per second"), mib); return string; } - double tbps = gbps / base; - if (tbps < 10.0) { - const char* trKey = B_TRANSLATE_MARK("%.0f Gbps"); + double tib = gib / 1024.0; + if (tib < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%3.2f GiB/s"); snprintf(string, stringSize, gSystemCatalog.GetString(trKey, - B_TRANSLATION_CONTEXT), gbps); + B_TRANSLATION_CONTEXT, "GiB per second"), gib); return string; } - const char* trKey = B_TRANSLATE_MARK("%.0f Tbps"); + const char* trKey = B_TRANSLATE_MARK("%.2f TiB/s"); snprintf(string, stringSize, gSystemCatalog.GetString(trKey, - B_TRANSLATION_CONTEXT), tbps); + B_TRANSLATION_CONTEXT, "TiB per second"), tib); return string; } - } // namespace BPrivate