/** Shallow-deep merge for translation fallbacks */ export function mergeTranslations>( base: T, override: Partial ): T { const result = { ...base }; for (const key of Object.keys(override) as (keyof T)[]) { const baseVal = base[key]; const overrideVal = override[key]; if ( overrideVal && typeof overrideVal === 'object' && !Array.isArray(overrideVal) && baseVal && typeof baseVal === 'object' && !Array.isArray(baseVal) ) { result[key] = mergeTranslations( baseVal as Record, overrideVal as Record ) as T[keyof T]; } else if (overrideVal !== undefined) { result[key] = overrideVal as T[keyof T]; } } return result; }