UNPKG

amount-to-words-multilang

Version:

Convert numbers to words in multiple languages (EN, TH, FR, JA, DE, ET, ES, FA, ZH)

59 lines (51 loc) 1.94 kB
import { enConverter } from './locales/en'; import { thConverter } from './locales/th'; import { frConverter } from './locales/fr'; import { jaConverter } from './locales/ja'; import { deConverter } from './locales/de'; import { EstonianConverter } from './locales/et'; import { SpanishConverter } from './locales/es'; import { PersianConverter } from './locales/fa'; import { zhConverter } from './locales/zh'; import { SupportedLocale, ConversionOptions } from './types'; const etConverter = new EstonianConverter(); const esConverter = new SpanishConverter(); const faConverter = new PersianConverter(); const converters = { en: enConverter, th: thConverter, fr: frConverter, ja: jaConverter, de: deConverter, et: etConverter, es: esConverter, fa: faConverter, zh: zhConverter, } as const; export function amountToWords(amount: number, locale?: SupportedLocale): string; export function amountToWords(amount: number, options: ConversionOptions): string; export function amountToWords( amount: number, localeOrOptions: SupportedLocale | ConversionOptions = 'en' ): string { // Validate amount input if (typeof amount !== 'number') { throw new Error('Amount must be a number'); } // Determine locale and options const locale = typeof localeOrOptions === 'string' ? localeOrOptions : localeOrOptions.locale ?? 'en'; const converter = converters[locale]; if (!converter) { throw new Error(`Unsupported locale: ${locale}. Supported locales: ${Object.keys(converters).join(', ')}`); } try { return converter.convert(amount); } catch (error) { throw new Error(`Failed to convert amount for locale '${locale}': ${error instanceof Error ? error.message : String(error)}`); } } // Export locales for direct access export { enConverter, thConverter, frConverter, jaConverter, deConverter, etConverter, esConverter, faConverter, zhConverter }; export * from './types';