/** 内容翻译 fallback:当前语言 → 英文 → 中文 */ export function resolveTranslationFallback( map: Record, locale: string, ): string { const chain = [locale, 'en-US', 'zh-CN']; const seen = new Set(); for (const loc of chain) { if (seen.has(loc)) continue; seen.add(loc); const v = map[loc]; if (v != null && String(v).trim() !== '') return String(v).trim(); } for (const v of Object.values(map)) { if (v != null && String(v).trim() !== '') return String(v).trim(); } return ''; } /** 前台语言显示名(PRD 3.1) */ export const LOCALE_UI_LABELS: Record = { 'zh-CN': '中文', 'ms-MY': 'Bahasa Melayu', 'en-US': 'English', }; /** vue-i18n 缺 key 时:en-US → zh-CN */ export const VUE_I18N_FALLBACK_LOCALES = ['en-US', 'zh-CN'] as const;