UNPKG

@ooopenlab/quiz-shared

Version:

Shared utilities and components for SuperQuiz modules

94 lines (85 loc) 2.76 kB
// Message loader that automatically merges split translation files import { I18nConfig } from '../i18n'; // Import structured message files directly import zhFields from '../../messages/zh/fields.json'; import zhValidation from '../../messages/zh/validation.json'; import zhClassic from '../../messages/zh/modules/classic.json'; import zhMeasure from '../../messages/zh/modules/measure.json'; import enFields from '../../messages/en/fields.json'; import enValidation from '../../messages/en/validation.json'; import enClassic from '../../messages/en/modules/classic.json'; import enMeasure from '../../messages/en/modules/measure.json'; import thFields from '../../messages/th/fields.json'; import thValidation from '../../messages/th/validation.json'; import thClassic from '../../messages/th/modules/classic.json'; import thMeasure from '../../messages/th/modules/measure.json'; // Merge messages manually with proper namespace structure const mergedMessages = { zh: { fields: zhFields, validation: zhValidation, modules: { classic: zhClassic, measure: zhMeasure } }, en: { fields: enFields, validation: enValidation, modules: { classic: enClassic, measure: enMeasure } }, th: { fields: thFields, validation: thValidation, modules: { classic: thClassic, measure: thMeasure } } }; /** * Get merged messages for a specific locale * @param locale Target locale (zh, en, th) * @returns Merged messages object */ export function getMessages(locale: string): Record<string, any> { return mergedMessages[locale as keyof typeof mergedMessages] || mergedMessages.zh; } /** * Get all available locales * @returns Array of supported locale codes */ export function getSupportedLocales(): string[] { return Object.keys(mergedMessages); } /** * Create I18n config for a specific locale * @param locale Target locale * @returns I18nConfig object */ export function createI18nConfig(locale: string): I18nConfig { return { locale, messages: getMessages(locale) }; } /** * Register new module messages (for future extensibility) * This allows new modules to register their own translations * @param moduleName Name of the module * @param messages Module messages for all locales */ export function registerModuleMessages( moduleName: string, messages: Record<string, any> ): void { Object.keys(messages).forEach(locale => { const localeMessages = mergedMessages[locale as keyof typeof mergedMessages]; if (localeMessages && localeMessages.modules) { (localeMessages.modules as any)[moduleName] = messages[locale]; } }); }