import { i18n } from "@lingui/core"; import type { Locale } from "~/locales"; import { defaultLocale } from "~/locales"; import { messages as enMessages } from "~/locales/en/messages"; import { messages as zhCNMessages } from "~/locales/zh-CN/messages"; const loadMessages = async (locale: Locale) => { switch (locale) { case "en": return enMessages; case "fr": return (await import("~/locales/fr/messages")).messages; case "de": return (await import("~/locales/de/messages")).messages; case "es": return (await import("~/locales/es/messages")).messages; case "it": return (await import("~/locales/it/messages")).messages; case "nl": return (await import("~/locales/nl/messages")).messages; case "ru": return (await import("~/locales/ru/messages")).messages; case "pl": return (await import("~/locales/pl/messages")).messages; case "ptbr": return (await import("~/locales/ptbr/messages")).messages; case "zh-CN": return (await import("~/locales/zh-CN/messages")).messages; default: return enMessages; } }; let isInitialized = false; const loadedLocales = new Set(); export function initializeI18n() { if (!isInitialized) { // 首屏同步加载中英文,避免默认语言激活前出现中英混排。 i18n.load("en", enMessages); i18n.load("zh-CN", zhCNMessages); i18n.activate(defaultLocale); loadedLocales.add(defaultLocale); loadedLocales.add("en"); loadedLocales.add("zh-CN"); isInitialized = true; } return i18n; } export async function activateLocale(locale: Locale) { if (!loadedLocales.has(locale)) { const messages = await loadMessages(locale); i18n.load(locale, messages); loadedLocales.add(locale); } i18n.activate(locale); return i18n; } initializeI18n(); export { i18n };