import type { Language } from '@/contexts/language'; const loaded = new Set(); /** * Lazy-load the script-specific display font for the active locale (CJK + * Devanagari). * * The Thai (Kanit), Japanese (Noto Sans JP), Korean (Noto Sans KR) and Hindi * (Noto Sans Devanagari) font families are large and only needed for users on * those locales — but they were imported statically in main.tsx, so every * visitor downloaded them. They are now loaded on demand, once per locale, and * other users never fetch them. Text briefly falls back to a system font until * the stylesheet resolves. */ export function loadLocaleFont(language: Language): void { if (loaded.has(language)) return; loaded.add(language); if (language === 'ja') { void Promise.all([ import('@fontsource/noto-sans-jp/400.css'), import('@fontsource/noto-sans-jp/500.css'), import('@fontsource/noto-sans-jp/700.css'), ]).catch(() => {}); } else if (language === 'ko') { void Promise.all([ import('@fontsource/noto-sans-kr/400.css'), import('@fontsource/noto-sans-kr/500.css'), import('@fontsource/noto-sans-kr/700.css'), ]).catch(() => {}); } else if (language === 'th') { void Promise.all([ import('@fontsource/kanit/400.css'), import('@fontsource/kanit/500.css'), import('@fontsource/kanit/600.css'), import('@fontsource/kanit/700.css'), ]).catch(() => {}); } else if (language === 'hi') { void Promise.all([ import('@fontsource/noto-sans-devanagari/400.css'), import('@fontsource/noto-sans-devanagari/500.css'), import('@fontsource/noto-sans-devanagari/700.css'), ]).catch(() => {}); } }