Files
bedolaga-cabinet/src/utils/format.ts
Fringg 2d6815a88e fix: landing page currency symbol not changing with locale
formatPrice() was hardcoded to ru-RU locale and RUB currency.
Now it reads the current language from i18next and maps it to
the appropriate currency (ru→RUB, en→USD, zh→CNY, fa→IRR).

All consumers (QuickPurchase landing, GiftSubscription, admin)
automatically get locale-aware currency formatting without
any component-level changes.
2026-04-23 04:55:36 +03:00

35 lines
1.2 KiB
TypeScript

export function formatUptime(seconds: number): string {
const days = Math.floor(seconds / 86400);
const hours = Math.floor((seconds % 86400) / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
if (days > 0) return `${days}d ${hours}h`;
if (hours > 0) return `${hours}h ${minutes}m`;
return `${minutes}m`;
}
import i18next from 'i18next';
const LANG_CURRENCY_MAP: Record<string, { currency: string; locale: string; symbol: string }> = {
ru: { currency: 'RUB', locale: 'ru-RU', symbol: '₽' },
en: { currency: 'USD', locale: 'en-US', symbol: '$' },
zh: { currency: 'CNY', locale: 'zh-CN', symbol: '¥' },
fa: { currency: 'IRR', locale: 'fa-IR', symbol: '﷼' },
};
const DEFAULT_CURRENCY = { currency: 'RUB', locale: 'ru-RU', symbol: '₽' };
export function formatPrice(kopeks: number, lang?: string): string {
const resolvedLang = lang || i18next.language || 'ru';
const config = LANG_CURRENCY_MAP[resolvedLang] || DEFAULT_CURRENCY;
const rubles = kopeks / 100;
try {
return new Intl.NumberFormat(config.locale, {
style: 'currency',
currency: config.currency,
maximumFractionDigits: 0,
}).format(rubles);
} catch {
return `${Math.round(rubles)} ${config.symbol}`;
}
}