"use strict"; /** * Internationalization (i18n) utilities for StartOS packages. * * @example * ```typescript * // In package's i18n/index.ts: * import { setupI18n } from '@start9labs/start-sdk' * import defaultDict, { DEFAULT_LANG } from './dictionaries/default' * import translations from './dictionaries/translations' * * export const i18n = setupI18n(defaultDict, translations, DEFAULT_LANG) * ``` */ Object.defineProperty(exports, "__esModule", { value: true }); exports.setupI18n = setupI18n; /** * Creates a typed i18n function for a package. * * @param defaultDict - The default language dictionary mapping strings to numeric indices * @param translations - Translation dictionaries for each supported locale * @param defaultLang - The default language code (e.g., 'en_US') * @returns A typed i18n function that accepts dictionary keys and optional parameters */ function setupI18n(defaultDict, translations, defaultLang) { const lang = process.env.LANG?.replace(/\.UTF-8$/, '') || defaultLang; // Convert locale format from en_US to en-US for Intl APIs const intlLocale = lang.replace('_', '-'); function getTranslation() { if (lang === defaultLang) return null; const availableLangs = Object.keys(translations); const match = availableLangs.find((l) => l === lang) ?? availableLangs.find((l) => String(l).startsWith(lang.split('_')[0] + '_')); return match ? translations[match] : null; } const translation = getTranslation(); function formatValue(value) { if (typeof value === 'number') { return new Intl.NumberFormat(intlLocale).format(value); } if (value instanceof Date) { return new Intl.DateTimeFormat(intlLocale).format(value); } return value; } return function i18n(key, params) { let result = translation ? translation[defaultDict[key]] : key; if (params) { for (const [paramName, value] of Object.entries(params)) { result = result.replace(`\${${paramName}}`, formatValue(value)); } } return result; }; } //# sourceMappingURL=index.js.map