feat(i18n): implement internationalization framework and update UI components for language support

This commit is contained in:
HouYunFei
2026-08-05 14:08:03 +08:00
parent 9bccd0ff1a
commit 0f6809251a
116 changed files with 3269 additions and 1870 deletions
+7 -5
View File
@@ -1,5 +1,6 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import { App } from "antd";
import { useTranslation } from "react-i18next";
import { APP_VERSION } from "@/constant/env";
import { parseChangelog, type ReleaseInfo } from "@/lib/release";
@@ -23,6 +24,7 @@ function isNewerVersion(latestVersion: string, currentVersion: string) {
}
export function useVersionCheck() {
const { t } = useTranslation();
const currentVersion = APP_VERSION;
const { message } = App.useApp();
const localReleases = useMemo(readLocalReleases, []);
@@ -49,23 +51,23 @@ export function useVersionCheck() {
setChecking(true);
try {
const [versionResponse, changelogResponse] = await Promise.all([fetch(latestVersionUrl), fetch(latestChangelogUrl)]);
if (!versionResponse.ok) throw new Error("版本读取失败");
if (!changelogResponse.ok) throw new Error("更新日志读取失败");
if (!versionResponse.ok) throw new Error(t("version.readFailed"));
if (!changelogResponse.ok) throw new Error(t("version.changelogFailed"));
const [version, changelog] = await Promise.all([versionResponse.text(), changelogResponse.text()]);
setLatestVersion(version.trim() || currentVersion);
if (changelog.trim()) setReleases(parseChangelog(changelog));
if (showMessage) message.success("已获取最新版本信息");
if (showMessage) message.success(t("version.updated"));
return true;
} catch {
setLatestVersion(currentVersion);
setReleases(localReleases);
if (showMessage) message.error("获取最新版本信息失败");
if (showMessage) message.error(t("version.updateFailed"));
return false;
} finally {
setChecking(false);
}
},
[currentVersion, localReleases, message],
[currentVersion, localReleases, message, t],
);
useEffect(() => {