feat: add Russian localization and independent STT languages
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import { localeTag, type Language } from "@/src/core";
|
||||
/**
|
||||
* Money/token presentation helpers (wave-4 observability UI) — shared by the
|
||||
* activity dock and the stats bar. Pure; exported for tests.
|
||||
*/
|
||||
|
||||
/** USD for cent-scale money: >= $1 keeps two decimals, smaller keeps four. */
|
||||
export function formatUsd(c: number): string {
|
||||
export function formatUsd(c: number, language: Language = "en"): string {
|
||||
if (language === "ru") return `${new Intl.NumberFormat(localeTag(language), { minimumFractionDigits: c >= 1 ? 2 : 4, maximumFractionDigits: c >= 1 ? 2 : 4 }).format(c)} $`;
|
||||
return c >= 1 ? `$${c.toFixed(2)}` : `$${c.toFixed(4)}`;
|
||||
}
|
||||
|
||||
@@ -14,7 +16,8 @@ export function planCostLabel(dollars: number | null, subscription: boolean | st
|
||||
}
|
||||
|
||||
/** 38000 → "38k", 1234567 → "1.2M" — trimmed, never "38.0k". */
|
||||
export function formatTokens(n: number): string {
|
||||
export function formatTokens(n: number, language: Language = "en"): string {
|
||||
if (language === "ru") return new Intl.NumberFormat("ru-RU", { notation: "compact", maximumFractionDigits: 1 }).format(n);
|
||||
if (n >= 1e6) return `${+(n / 1e6).toFixed(1)}M`;
|
||||
if (n >= 1e3) return `${+(n / 1e3).toFixed(1)}k`;
|
||||
return String(n);
|
||||
|
||||
Reference in New Issue
Block a user