UNPKG

@shelchin/svelte-i18n

Version:

The last Svelte i18n library you'll ever need. Type-safe, AI-powered, zero-config.

106 lines (105 loc) 3.83 kB
/** * Built-in translations loader * Loads translations that are bundled with the application */ // Global registry for built-in translations let globalRegistry = {}; /** * Clear all registered translations (for testing) */ export function clearRegisteredTranslations() { globalRegistry = {}; } /** * Register built-in translations * This should be called during app initialization */ export function registerBuiltInTranslations(translations) { globalRegistry = { ...globalRegistry, ...translations }; } /** * Load built-in translations into the store synchronously * Used during SSR to ensure translations are available immediately */ export function loadBuiltInTranslationsSync(store) { const storeNamespace = store.getNamespace(); // Determine which translations to load based on namespace if (storeNamespace === 'app') { // App instance: load only app translations if (globalRegistry.app) { for (const [locale, translation] of Object.entries(globalRegistry.app)) { store.loadLanguageSync(locale, translation); } } } else if (storeNamespace && globalRegistry[storeNamespace]) { // Package instance: load only that package's translations for (const [locale, translation] of Object.entries(globalRegistry[storeNamespace])) { store.loadLanguageSync(locale, translation); } } } /** * Load built-in translations into the store */ export async function loadBuiltInTranslations(store, options) { const storeNamespace = store.getNamespace(); const loadedLocales = new Set(); // Determine which translations to load based on namespace // Handle 'app' namespace consistently if (storeNamespace === 'app') { // App instance: load only app translations if (globalRegistry.app) { for (const locale of Object.keys(globalRegistry.app)) { loadedLocales.add(locale); } } } else if (storeNamespace && globalRegistry[storeNamespace]) { // Package instance: load only that package's translations for (const locale of Object.keys(globalRegistry[storeNamespace])) { loadedLocales.add(locale); } } // Load translations for each locale for (const locale of loadedLocales) { try { let translations = {}; if (!storeNamespace || storeNamespace === 'app') { // App instance: load app translations const appTranslation = globalRegistry.app?.[locale]; if (appTranslation) { translations = appTranslation; } } else { // Package instance: load package-specific translations const packageTranslation = globalRegistry[storeNamespace]?.[locale]; if (packageTranslation) { translations = packageTranslation; } } // Add to store if we have translations if (Object.keys(translations).length > 0) { await store.loadLanguage(locale, translations); options?.onLoaded?.(locale); } } catch (error) { console.error(`Failed to load built-in translations for ${locale}:`, error); options?.onError?.(locale, error); } } } /** * Auto-discover and register package translations * Packages can call this during their initialization */ export function registerPackageTranslations(packageName, translations) { if (!globalRegistry[packageName]) { globalRegistry[packageName] = {}; } for (const [locale, translation] of Object.entries(translations)) { globalRegistry[packageName][locale] = translation; } }