From 42e7e66997af947dc8f5ffd189f322c9d956ebaa Mon Sep 17 00:00:00 2001 From: xintaofei Date: Mon, 23 Mar 2026 17:55:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=B3=BB=E7=BB=9F=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=9A=84=E5=B8=83=E5=B1=80=E5=92=8C=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/system-network-settings.tsx | 316 +++++++++--------- src/i18n/messages/ar.json | 1 + src/i18n/messages/de.json | 1 + src/i18n/messages/en.json | 1 + src/i18n/messages/es.json | 1 + src/i18n/messages/fr.json | 1 + src/i18n/messages/ja.json | 1 + src/i18n/messages/ko.json | 1 + src/i18n/messages/pt.json | 1 + src/i18n/messages/zh-CN.json | 1 + src/i18n/messages/zh-TW.json | 1 + 11 files changed, 164 insertions(+), 162 deletions(-) diff --git a/src/components/settings/system-network-settings.tsx b/src/components/settings/system-network-settings.tsx index b1a73e8..db5d930 100644 --- a/src/components/settings/system-network-settings.tsx +++ b/src/components/settings/system-network-settings.tsx @@ -3,10 +3,10 @@ import { useCallback, useEffect, useMemo, useState } from "react" import { ArrowUpCircle, + CheckCircle2, Languages, Loader2, RefreshCw, - Save, Wifi, } from "lucide-react" import type { Update } from "@tauri-apps/plugin-updater" @@ -153,7 +153,11 @@ export function SystemNetworkSettings() { loadSettings().catch((err) => { console.error("[Settings] load system settings failed:", err) }) - }, [loadSettings]) + checkForUpdates().catch((err) => { + console.error("[Settings] auto check update failed:", err) + }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) useEffect(() => { return () => { @@ -164,48 +168,49 @@ export function SystemNetworkSettings() { } }, [availableUpdate]) - const saveSettings = useCallback(async () => { - if (enabled && !proxyUrl.trim()) { - toast.error(t("proxyRequired")) - return - } + const saveProxySettings = useCallback( + async (nextEnabled: boolean, nextProxyUrl: string) => { + if (nextEnabled && !nextProxyUrl.trim()) return - setSaving(true) - try { - const next = await updateSystemProxySettings({ - enabled, - proxy_url: proxyUrl.trim() || null, - }) - setEnabled(next.enabled) - setProxyUrl(next.proxy_url ?? "") - toast.success(t("saveSuccess")) - } catch (err) { - const message = err instanceof Error ? err.message : String(err) - toast.error(t("saveFailed", { message })) - } finally { - setSaving(false) - } - }, [enabled, proxyUrl, t]) + setSaving(true) + try { + const next = await updateSystemProxySettings({ + enabled: nextEnabled, + proxy_url: nextProxyUrl.trim() || null, + }) + setEnabled(next.enabled) + setProxyUrl(next.proxy_url ?? "") + } catch (err) { + const message = err instanceof Error ? err.message : String(err) + toast.error(t("saveFailed", { message })) + } finally { + setSaving(false) + } + }, + [t] + ) - const saveLanguage = useCallback(async () => { - setSavingLanguage(true) + const saveLanguage = useCallback( + async (lang: LanguageSelectValue) => { + setSavingLanguage(true) - try { - const next = await updateSystemLanguageSettings({ - mode: appLanguage === "system" ? "system" : "manual", - language: - appLanguage === "system" ? languageSettings.language : appLanguage, - }) + try { + const next = await updateSystemLanguageSettings({ + mode: lang === "system" ? "system" : "manual", + language: + lang === "system" ? languageSettings.language : lang, + }) - setLanguageSettings(next) - toast.success(t("languageSaveSuccess")) - } catch (err) { - const message = err instanceof Error ? err.message : String(err) - toast.error(t("languageSaveFailed", { message })) - } finally { - setSavingLanguage(false) - } - }, [appLanguage, languageSettings.language, setLanguageSettings, t]) + setLanguageSettings(next) + } catch (err) { + const message = err instanceof Error ? err.message : String(err) + toast.error(t("languageSaveFailed", { message })) + } finally { + setSavingLanguage(false) + } + }, + [languageSettings.language, setLanguageSettings, t] + ) const formatUpdateError = useCallback( (error: unknown, action: UpdateAction): string => { @@ -302,128 +307,16 @@ export function SystemNetworkSettings() {
- -

{t("proxyTitle")}

-
- -

- {t("proxyDescription")} -

- - {loadError && ( -
- {t("loadFailed", { message: loadError })} -
- )} - - - -
- - setProxyUrl(event.target.value)} - placeholder={PROXY_EXAMPLE} - /> -

- {t("proxyHint", { example: PROXY_EXAMPLE })} -

-
- -
- -
-
- -
-
- -

{t("languageTitle")}

-
- -

- {t("languageDescription")} -

- -
- - -
- -
- -
-
- -
-
- -

{t("updateTitle")}

+ {checkingUpdate ? ( + + ) : availableUpdate ? ( + + ) : lastCheckedAt ? ( + + ) : ( + + )} +

{t("versionTitle")}

@@ -514,6 +407,105 @@ export function SystemNetworkSettings() { )}

+ +
+
+ +

{t("proxyTitle")}

+
+ +

+ {t("proxyDescription")} +

+ + {loadError && ( +
+ {t("loadFailed", { message: loadError })} +
+ )} + + + +
+ + setProxyUrl(event.target.value)} + onBlur={() => saveProxySettings(enabled, proxyUrl)} + placeholder={PROXY_EXAMPLE} + disabled={saving} + /> +

+ {t("proxyHint", { example: PROXY_EXAMPLE })} +

+
+
+ +
+
+ +

{t("languageTitle")}

+
+ +

+ {t("languageDescription")} +

+ +
+ + +
+
) diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index ee6cac5..4c63714 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "تم حفظ إعدادات اللغة", "languageSaveFailed": "فشل حفظ إعدادات اللغة: {message}", "updateTitle": "تحديث التطبيق", + "versionTitle": "تحديث البرنامج", "updateDescription": "تحقق من المصدر المهيأ للإصدارات الأحدث وثبّت التحديث مباشرة عند توفره.", "currentVersion": "الإصدار الحالي", "upgradableVersion": "أحدث إصدار", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index abee042..89ed30b 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "Spracheinstellungen wurden gespeichert", "languageSaveFailed": "Spracheinstellungen konnten nicht gespeichert werden: {message}", "updateTitle": "App-Update", + "versionTitle": "Softwareupdate", "updateDescription": "Prüft die konfigurierte Release-Quelle auf neue Versionen und installiert sie bei Verfügbarkeit direkt.", "currentVersion": "Aktuelle Version", "upgradableVersion": "Neueste Version", diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 89459b3..6c61fa8 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "Language settings saved", "languageSaveFailed": "Failed to save language settings: {message}", "updateTitle": "App Update", + "versionTitle": "Software Update", "updateDescription": "Check the configured release source for newer versions and install directly when available.", "currentVersion": "Current version", "upgradableVersion": "Latest version", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 749dc4d..058d3ad 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "La configuración de idioma se guardó", "languageSaveFailed": "No se pudo guardar la configuración de idioma: {message}", "updateTitle": "Actualización de la app", + "versionTitle": "Actualización de software", "updateDescription": "Comprueba versiones más nuevas en la fuente de versiones configurada e instálalas directamente cuando estén disponibles.", "currentVersion": "Versión actual", "upgradableVersion": "Última versión", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 409a3b0..bba8263 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "Les paramètres de langue ont été enregistrés", "languageSaveFailed": "Échec de l’enregistrement des paramètres de langue : {message}", "updateTitle": "Mise à jour de l’app", + "versionTitle": "Mise à jour logicielle", "updateDescription": "Vérifiez les nouvelles versions depuis la source de publication configurée et installez-les directement si disponibles.", "currentVersion": "Version actuelle", "upgradableVersion": "Dernière version", diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 48434ef..331378d 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "言語設定を保存しました", "languageSaveFailed": "言語設定の保存に失敗しました: {message}", "updateTitle": "アプリ更新", + "versionTitle": "ソフトウェアアップデート", "updateDescription": "設定されたリリースソースで新しいバージョンを確認し、利用可能なら直接インストールします。", "currentVersion": "現在のバージョン", "upgradableVersion": "最新バージョン", diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index b22ffe1..735f9e0 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "언어 설정이 저장되었습니다", "languageSaveFailed": "언어 설정 저장 실패: {message}", "updateTitle": "앱 업데이트", + "versionTitle": "소프트웨어 업데이트", "updateDescription": "설정된 릴리스 소스에서 새 버전을 확인하고 가능하면 바로 설치합니다.", "currentVersion": "현재 버전", "upgradableVersion": "최신 버전", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 9a9c6d8..cdfb423 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "As configurações de idioma foram salvas", "languageSaveFailed": "Falha ao salvar as configurações de idioma: {message}", "updateTitle": "Atualização do app", + "versionTitle": "Atualização de software", "updateDescription": "Verifique versões mais novas na fonte de releases configurada e instale diretamente quando disponíveis.", "currentVersion": "Versão atual", "upgradableVersion": "Versão mais recente", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index dd08e45..dac0998 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "语言设置已保存", "languageSaveFailed": "语言设置保存失败:{message}", "updateTitle": "应用升级", + "versionTitle": "软件更新", "updateDescription": "点击检查后会从配置的发布源拉取最新版本信息,有新版本时可直接下载并安装。", "currentVersion": "当前版本", "upgradableVersion": "最新版本", diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index b416cc7..5a9af96 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -127,6 +127,7 @@ "languageSaveSuccess": "語言設定已儲存", "languageSaveFailed": "語言設定儲存失敗:{message}", "updateTitle": "應用升級", + "versionTitle": "軟體更新", "updateDescription": "點擊檢查後會從設定的發佈來源拉取最新版本資訊,有新版本時可直接下載並安裝。", "currentVersion": "目前版本", "upgradableVersion": "最新版本",