diff --git a/src/components/providers/forms/hooks/useCodexConfigState.ts b/src/components/providers/forms/hooks/useCodexConfigState.ts index a4271c067..509c8345e 100644 --- a/src/components/providers/forms/hooks/useCodexConfigState.ts +++ b/src/components/providers/forms/hooks/useCodexConfigState.ts @@ -1,4 +1,5 @@ import { useState, useCallback, useEffect, useRef } from "react"; +import { useTranslation } from "react-i18next"; import { extractCodexBaseUrl, setCodexBaseUrl as setCodexBaseUrlInConfig, @@ -18,6 +19,7 @@ interface UseCodexConfigStateProps { * Codex 配置包含两部分:auth.json (JSON) 和 config.toml (TOML 字符串) */ export function useCodexConfigState({ initialData }: UseCodexConfigStateProps) { + const { t } = useTranslation(); const [codexAuth, setCodexAuthState] = useState(""); const [codexConfig, setCodexConfigState] = useState(""); const [codexApiKey, setCodexApiKey] = useState(""); @@ -109,18 +111,21 @@ export function useCodexConfigState({ initialData }: UseCodexConfigStateProps) { }, [codexAuth, codexApiKey]); // 验证 Codex Auth JSON - const validateCodexAuth = useCallback((value: string): string => { - if (!value.trim()) return ""; - try { - const parsed = JSON.parse(value); - if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { - return "Auth JSON must be an object"; + const validateCodexAuth = useCallback( + (value: string): string => { + if (!value.trim()) return ""; + try { + const parsed = JSON.parse(value); + if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { + return t("providerForm.authJsonRequired"); + } + return ""; + } catch { + return t("providerForm.authJsonError"); } - return ""; - } catch { - return "Invalid JSON format"; - } - }, []); + }, + [t], + ); // 设置 auth 并验证 const setCodexAuth = useCallback( diff --git a/src/components/providers/forms/hooks/useGeminiConfigState.ts b/src/components/providers/forms/hooks/useGeminiConfigState.ts index a5ede5e07..b19adbd58 100644 --- a/src/components/providers/forms/hooks/useGeminiConfigState.ts +++ b/src/components/providers/forms/hooks/useGeminiConfigState.ts @@ -1,4 +1,5 @@ import { useState, useCallback, useEffect } from "react"; +import { useTranslation } from "react-i18next"; interface UseGeminiConfigStateProps { initialData?: { @@ -13,6 +14,7 @@ interface UseGeminiConfigStateProps { export function useGeminiConfigState({ initialData, }: UseGeminiConfigStateProps) { + const { t } = useTranslation(); const [geminiEnv, setGeminiEnvState] = useState(""); const [geminiConfig, setGeminiConfigState] = useState(""); const [geminiApiKey, setGeminiApiKey] = useState(""); @@ -119,18 +121,21 @@ export function useGeminiConfigState({ }, [geminiEnv, envStringToObj, geminiApiKey, geminiBaseUrl, geminiModel]); // 验证 Gemini Config JSON - const validateGeminiConfig = useCallback((value: string): string => { - if (!value.trim()) return ""; // 空值允许 - try { - const parsed = JSON.parse(value); - if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { - return ""; + const validateGeminiConfig = useCallback( + (value: string): string => { + if (!value.trim()) return ""; // 空值允许 + try { + const parsed = JSON.parse(value); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + return ""; + } + return t("providerForm.configJsonError"); + } catch { + return t("providerForm.configJsonError"); } - return "Config must be a JSON object"; - } catch { - return "Invalid JSON format"; - } - }, []); + }, + [t], + ); // 设置 env const setGeminiEnv = useCallback((value: string) => {