src/lib/format.ts
Rama main · réplica de lectura del repositorio original.
// Форматирование байтов для отображения трафика.
import { currentLanguage, translate, type Language } from "./i18n";
import { useAppStore } from "../store/useAppStore";
const UNIT_KEYS = ["units.byte", "units.kilobyte", "units.megabyte", "units.gigabyte", "units.terabyte"];
function humanBytes(bytes: number, language: Language): string {
if (!Number.isFinite(bytes) || bytes <= 0) return `0 ${translate(language, UNIT_KEYS[0])}`;
const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), UNIT_KEYS.length - 1);
const value = bytes / 1024 ** i;
return `${value.toFixed(i === 0 ? 0 : 1)} ${translate(language, UNIT_KEYS[i])}`;
}
/** Скорость: байт/с → "1.2 МБ/с". */
export function formatSpeed(bytesPerSec: number): string {
const language = currentLanguage(useAppStore.getState().settings?.language);
return translate(language, "units.perSecond", { value: humanBytes(bytesPerSec, language) });
}
/** Объём: байт → "345 МБ". */
export function formatBytes(bytes: number): string {
return humanBytes(bytes, currentLanguage(useAppStore.getState().settings?.language));
}