export const I18N = { "zh-Hans": { appTitle: "物联网专业在线学习平台", pinnedSubtitle: "置顶内容", designThemeLabel: "设计主题", themeToggleLabel: "切换主题", themeToggleTitle: "切换深色/浅色模式", moonAlt: "月亮", sunAlt: "太阳", languageLabel: "语言", beianIcp: "浙ICP备2023044109号", beianMps: "浙公网安备33100402331786号", }, "zh-Hant": { appTitle: "物聯網專業在線學習平台", pinnedSubtitle: "置頂內容", designThemeLabel: "設計主題", themeToggleLabel: "切換主題", themeToggleTitle: "切換深色/淺色模式", moonAlt: "月亮", sunAlt: "太陽", languageLabel: "語言", beianIcp: "浙ICP備2023044109號", beianMps: "浙公網安備33100402331786號", }, en: { appTitle: "IoT Program Online Learning Hub", pinnedSubtitle: "Pinned", designThemeLabel: "Design theme", themeToggleLabel: "Toggle theme", themeToggleTitle: "Toggle dark/light mode", moonAlt: "Moon", sunAlt: "Sun", languageLabel: "Language", beianIcp: "Zhejiang ICP 2023044109", beianMps: "Zhejiang Public Security 33100402331786", }, ja: { appTitle: "IoT専攻オンライン学習プラットフォーム", pinnedSubtitle: "ピン留め", designThemeLabel: "デザインテーマ", themeToggleLabel: "テーマ切替", themeToggleTitle: "ダーク/ライト切替", moonAlt: "月", sunAlt: "太陽", languageLabel: "言語", beianIcp: "浙江ICP 2023044109", beianMps: "浙江公安 33100402331786", }, ko: { appTitle: "IoT 전공 온라인 학습 플랫폼", pinnedSubtitle: "고정", designThemeLabel: "디자인 테마", themeToggleLabel: "테마 전환", themeToggleTitle: "다크/라이트 전환", moonAlt: "달", sunAlt: "태양", languageLabel: "언어", beianIcp: "저장 ICP 2023044109", beianMps: "저장 공안 33100402331786", }, wenyan: { appTitle: "物联网专业线上学塾", pinnedSubtitle: "置顶", designThemeLabel: "设计之式", themeToggleLabel: "易其主题", themeToggleTitle: "更晦明", moonAlt: "月", sunAlt: "日", languageLabel: "语言", beianIcp: "浙ICP备2023044109号", beianMps: "浙公安备33100402331786号", }, mars: { appTitle: "物↗聯☆網↘專★業☆線★↗上★~學↘塾", pinnedSubtitle: "置↗頂★內→↘容氵", designThemeLabel: "設↗計☆主↘題", themeToggleLabel: "切↗換★主↘…題孒", themeToggleTitle: "切↗換★晦钅↘明~", moonAlt: "月", sunAlt: "日", languageLabel: "語↗言", beianIcp: "浙↗ICP☆★備吖202訁3044109★號", beianMps: "浙↘公★勒安備33氵100勒40孒2★331786號", }, garbled: { appTitle: "糊斤▥烫斤拷▦噪¿ä¢ç”èä", pinnedSubtitle: "¨¢糊◾¬¿", designThemeLabel: "¬æ◽ä◾▩", themeToggleLabel: "ä斤¿è▣拷", themeToggleTitle: "▥¬糊¬烫è拷ç¿", moonAlt: "¥æ½", sunAlt: "¥▤锟", languageLabel: "¿锟屯", beianIcp: "å锟æ¨å屯¥◾▨", beianMps: "¿噪斤ä屯斤½æ”屯ç▩", }, bin: { appTitle: "0101010101010101", pinnedSubtitle: "010101", designThemeLabel: "0101010101", themeToggleLabel: "01010101", themeToggleTitle: "010101010101010101", moonAlt: "0101", sunAlt: "1010", languageLabel: "010101", beianIcp: "01010101010101010101", beianMps: "0101010101010101010101", }, meow: { appTitle: "喵喵喵喵喵喵喵喵喵喵喵喵", pinnedSubtitle: "喵喵喵喵", designThemeLabel: "喵喵喵喵", themeToggleLabel: "喵喵喵喵", themeToggleTitle: "喵喵喵喵喵喵喵喵喵", moonAlt: "喵喵", sunAlt: "喵喵", languageLabel: "喵喵", beianIcp: "喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵", beianMps: "喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵", }, emoji: { appTitle: "📡🎓📚🌐🧠", pinnedSubtitle: "📌", designThemeLabel: "🎨", themeToggleLabel: "🌓", themeToggleTitle: "🌗/🌕", moonAlt: "🌙", sunAlt: "☀️", languageLabel: "🌐", beianIcp: "🧾 ICP 2023044109", beianMps: "🛡️ MPS 33100402331786", }, } export const DESIGN_THEME_LABELS = { "zh-Hans": { fluent: "Fluent", "material-you": "Material You", terminal: "终端", cyberpunk: "赛博朋克", nord: "Nord", }, "zh-Hant": { fluent: "Fluent", "material-you": "Material You", terminal: "終端", cyberpunk: "賽博龐克", nord: "Nord", }, en: { fluent: "Fluent", "material-you": "Material You", terminal: "Terminal", cyberpunk: "Cyberpunk", nord: "Nord", }, ja: { fluent: "Fluent", "material-you": "Material You", terminal: "ターミナル", cyberpunk: "サイバーパンク", nord: "Nord", }, ko: { fluent: "Fluent", "material-you": "Material You", terminal: "터미널", cyberpunk: "사이버펑크", nord: "Nord", }, wenyan: { fluent: "流光", "material-you": "物材", terminal: "终端", cyberpunk: "赛博", nord: "清寒", }, mars: { fluent: "流↗光", "material-you": "材↘質", terminal: "終↗★端", cyberpunk: "賽↘!博", nord: "清↗寒★", }, garbled: { fluent: "◼è▦", "material-you": "拷▤屯ä锟◽", terminal: "¥¬▤▨¿¿", cyberpunk: "◼çæ¥烫¥", nord: "æ◽屯¿", }, bin: { fluent: "0101", "material-you": "010101", terminal: "01010101", cyberpunk: "0101010101", nord: "0101010", }, meow: { fluent: "喵喵", "material-you": "喵喵喵", terminal: "喵喵", cyberpunk: "喵喵喵喵", nord: "喵喵喵", }, emoji: { fluent: "💧", "material-you": "🧱", terminal: "⌨️", cyberpunk: "⚡", nord: "❄️", }, } export const LANGUAGE_NAMES = { "zh-Hans": "简体中文", "zh-Hant": "繁體中文", en: "English", ja: "日本語", ko: "한국어", wenyan: "文言文", mars: "非★主☆流", garbled: "GBK乱码", bin: "计算机语", meow: "喵喵喵", emoji: "😅😅😅", } export const LANGUAGE_KEY = "language" export const SUPPORTED_LANGUAGES = Object.keys(LANGUAGE_NAMES) export function getLocalizedText(value, language) { if (!value) return "" if (typeof value === "object") { return value[language] || value["zh-Hans"] } return value } export function getInitialLanguage() { const saved = localStorage.getItem(LANGUAGE_KEY) if (saved && SUPPORTED_LANGUAGES.includes(saved)) return saved const normalized = (navigator.language || "").toLowerCase() if (normalized.startsWith("zh")) { return normalized.includes("hant") || normalized.includes("tw") ? "zh-Hant" : "zh-Hans" } if (normalized.startsWith("ja")) return "ja" if (normalized.startsWith("ko")) return "ko" return "zh-Hans" } export function t(key, language) { return I18N[language]?.[key] || I18N["zh-Hans"][key] || "" } export function getDesignThemeLabel(designTheme, language) { const labels = DESIGN_THEME_LABELS[language] || DESIGN_THEME_LABELS["zh-Hans"] return labels[designTheme] || labels.fluent }