/* * Copyright 2012-2024, Haiku Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #include "StringForRate.h" #include #include #include #include #include using BPrivate::gSystemCatalog; #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "StringForRate" namespace BPrivate { const char* string_for_rate(double rate, char* string, size_t stringSize) { const char* kFormats[] = { B_TRANSLATE_MARK_COMMENT("{0, plural, one{%s byte/s} other{%s bytes/s}}", "units per second"), B_TRANSLATE_MARK_COMMENT("%s KiB/s", "units per second"), B_TRANSLATE_MARK_COMMENT("%s MiB/s", "units per second"), B_TRANSLATE_MARK_COMMENT("%s GiB/s", "units per second"), B_TRANSLATE_MARK_COMMENT("%s TiB/s", "units per second") }; size_t index = 0; while (index < B_COUNT_OF(kFormats) - 1 && rate >= 1024.0) { rate /= 1024.0; index++; } BString format; BStringFormat formatter( gSystemCatalog.GetString(kFormats[index], B_TRANSLATION_CONTEXT, "units per second")); formatter.Format(format, rate); BString printedRate; BNumberFormat numberFormat; numberFormat.SetPrecision(index == 0 ? 0 : 2); numberFormat.Format(printedRate, rate); snprintf(string, stringSize, format.String(), printedRate.String()); return string; } } // namespace BPrivate