"use client"; import { useState, useEffect } from "react"; import { useTranslations } from "next-intl"; import { Letter, SupportedAlphabets } from "@/lib/interfaces"; import Container from "@/components/ui/Container"; import { LightButton } from "@/components/ui/buttons"; import AlphabetCard from "./AlphabetCard"; export default function Alphabet() { const t = useTranslations("alphabet"); const [chosenAlphabet, setChosenAlphabet] = useState(null); const [alphabetData, setAlphabetData] = useState(null); const [loadingState, setLoadingState] = useState<"idle" | "loading" | "success" | "error">("idle"); useEffect(() => { const loadAlphabetData = async () => { if (chosenAlphabet && !alphabetData) { try { setLoadingState("loading"); const res = await fetch("/alphabets/" + chosenAlphabet + ".json"); if (!res.ok) throw new Error("Network response was not ok"); const obj = await res.json(); setAlphabetData(obj as Letter[]); setLoadingState("success"); } catch (error) { setLoadingState("error"); } } }; loadAlphabetData(); }, [chosenAlphabet, alphabetData]); useEffect(() => { if (loadingState === "error") { const timer = setTimeout(() => { setLoadingState("idle"); setChosenAlphabet(null); setAlphabetData(null); }, 2000); return () => clearTimeout(timer); } }, [loadingState]); // 语言选择界面 if (!chosenAlphabet) { return (
{/* 页面标题 */}

{t("chooseCharacters")}

{/* 副标题说明 */}

选择一种语言的字母表开始学习

{/* 语言选择按钮网格 */}
{/* 日语假名选项 */} setChosenAlphabet("japanese")} className="p-6 text-lg font-medium hover:scale-105 transition-transform" >
あいうえお {t("japanese")}
{/* 英语字母选项 */} setChosenAlphabet("english")} className="p-6 text-lg font-medium hover:scale-105 transition-transform" >
ABC {t("english")}
{/* 维吾尔语字母选项 */} setChosenAlphabet("uyghur")} className="p-6 text-lg font-medium hover:scale-105 transition-transform" >
ئۇيغۇر {t("uyghur")}
{/* 世界语字母选项 */} setChosenAlphabet("esperanto")} className="p-6 text-lg font-medium hover:scale-105 transition-transform" >
ABCĜĤ {t("esperanto")}
); } // 加载状态 if (loadingState === "loading") { return (
{t("loading")}
); } // 错误状态 if (loadingState === "error") { return (
{t("loadFailed")}
); } // 字母卡片界面 if (loadingState === "success" && alphabetData) { return ( { setChosenAlphabet(null); setAlphabetData(null); setLoadingState("idle"); }} /> ); } return null; }