@shelchin/svelte-i18n
Version:
The last Svelte i18n library you'll ever need. Type-safe, AI-powered, zero-config.
64 lines (63 loc) • 2.09 kB
JavaScript
/**
* Global configuration manager for i18n
* Allows packages to inherit configuration from the main app
*/
class ConfigManager {
configs = new Map();
mainConfig = null;
/**
* Register a configuration
* @param namespace - The namespace (use 'app' for main application)
* @param config - The i18n configuration
* @param isMain - Whether this is the main app configuration
*/
register(namespace, config, isMain = false) {
this.configs.set(namespace, config);
if (isMain || namespace === 'app') {
this.mainConfig = config;
}
}
/**
* Get configuration for a namespace
* Packages will inherit from main app config if available
*/
getConfig(namespace) {
// If requesting package config and main app exists, merge configs
if (namespace !== 'app' && this.mainConfig) {
const packageConfig = this.configs.get(namespace);
if (packageConfig) {
// Merge with main config (main config takes precedence for shared settings)
return {
...packageConfig,
defaultLocale: this.mainConfig.defaultLocale,
fallbackLocale: this.mainConfig.fallbackLocale,
interpolation: this.mainConfig.interpolation || packageConfig.interpolation,
formats: this.mainConfig.formats || packageConfig.formats,
// Keep package namespace
namespace: packageConfig.namespace
};
}
}
return this.configs.get(namespace) || null;
}
/**
* Get the main app configuration
*/
getMainConfig() {
return this.mainConfig;
}
/**
* Check if a namespace is registered
*/
has(namespace) {
return this.configs.has(namespace);
}
/**
* Clear all configurations (useful for testing)
*/
clear() {
this.configs.clear();
this.mainConfig = null;
}
}
export const configManager = new ConfigManager();