diff --git a/ui/goose2/src/features/settings/ui/ModelProviderPanels.tsx b/ui/goose2/src/features/settings/ui/ModelProviderPanels.tsx index 7d046f0e18..624feeadff 100644 --- a/ui/goose2/src/features/settings/ui/ModelProviderPanels.tsx +++ b/ui/goose2/src/features/settings/ui/ModelProviderPanels.tsx @@ -124,8 +124,8 @@ export function ConnectedFieldsPanel({ className="text-muted-foreground" > {resolveFieldValue(field, fieldValueMap).isSet - ? "Edit" - : "Add"} + ? t("common:actions.edit") + : t("common:actions.add")} )} @@ -287,9 +287,9 @@ export function SetupFieldsPanel({ ([]); const [draftValues, setDraftValues] = useState>({}); @@ -114,7 +114,7 @@ export function ModelProviderRow({ setError( nextError instanceof Error ? nextError.message - : "Failed to load provider settings", + : t("providers.errors.loadFailed"), ); } finally { if (showSkeleton) { @@ -122,7 +122,7 @@ export function ModelProviderRow({ } } }, - [fields, hasFields, onGetConfig, provider.id], + [fields, hasFields, onGetConfig, provider.id, t], ); useEffect(() => { @@ -185,7 +185,7 @@ export function ModelProviderRow({ setSetupError( nextError instanceof Error ? nextError.message - : "Failed to complete sign-in", + : t("providers.errors.signInFailed"), ); } finally { unlisten(); @@ -230,7 +230,7 @@ export function ModelProviderRow({ async function handleSaveField(field: ProviderField) { const nextValue = draftValues[field.key]?.trim() ?? ""; if (!nextValue) { - setError(`Enter a value for ${field.label}`); + setError(t("providers.errors.fieldRequired", { label: field.label })); return; } setError(""); @@ -244,7 +244,9 @@ export function ModelProviderRow({ setShowSavedState(true); } catch (nextError) { setError( - nextError instanceof Error ? nextError.message : "Failed to save", + nextError instanceof Error + ? nextError.message + : t("providers.errors.saveFailed"), ); } } @@ -262,7 +264,11 @@ export function ModelProviderRow({ .map((field) => field.label); if (missingLabels.length > 0) { - setError(`Fill in ${missingLabels.join(", ")}`); + setError( + t("providers.errors.fieldsMissing", { + fields: missingLabels.join(", "), + }), + ); return; } @@ -299,7 +305,9 @@ export function ModelProviderRow({ setShowSavedState(false); } catch (nextError) { setError( - nextError instanceof Error ? nextError.message : "Failed to save", + nextError instanceof Error + ? nextError.message + : t("providers.errors.saveFailed"), ); } } @@ -314,7 +322,9 @@ export function ModelProviderRow({ setShowSavedState(false); } catch (nextError) { setError( - nextError instanceof Error ? nextError.message : "Failed to remove", + nextError instanceof Error + ? nextError.message + : t("providers.errors.removeFailed"), ); } } @@ -373,7 +383,9 @@ export function ModelProviderRow({ {authenticating ? ( ) : null} - {setupError ? "Retry" : "Connect"} + {setupError + ? t("common:actions.retry") + : t("common:actions.connect")} ) : ( diff --git a/ui/goose2/src/shared/i18n/locales/en/common.json b/ui/goose2/src/shared/i18n/locales/en/common.json index 3e4494160a..a1cccca157 100644 --- a/ui/goose2/src/shared/i18n/locales/en/common.json +++ b/ui/goose2/src/shared/i18n/locales/en/common.json @@ -20,10 +20,14 @@ "remove": "Remove", "rename": "Rename", "restore": "Restore", + "add": "Add", + "connect": "Connect", "retry": "Retry", "run": "Run", "running": "Running", "save": "Save", + "saved": "Saved", + "saving": "Saving...", "saveChanges": "Save changes", "search": "Search", "select": "Select", diff --git a/ui/goose2/src/shared/i18n/locales/en/settings.json b/ui/goose2/src/shared/i18n/locales/en/settings.json index 6b165d8c0b..b1c3afd4d0 100644 --- a/ui/goose2/src/shared/i18n/locales/en/settings.json +++ b/ui/goose2/src/shared/i18n/locales/en/settings.json @@ -343,6 +343,14 @@ "loading": "Loading provider catalog..." }, "disconnect": "Disconnect", + "errors": { + "fieldRequired": "Enter a value for {{label}}", + "fieldsMissing": "Fill in {{fields}}", + "loadFailed": "Failed to load provider settings", + "removeFailed": "Failed to remove", + "saveFailed": "Failed to save", + "signInFailed": "Failed to complete sign-in" + }, "models": { "description": "AI models power your agents. Goose requires one to work, but some agents bring their own.", "notSet": "Not set", diff --git a/ui/goose2/src/shared/i18n/locales/es/common.json b/ui/goose2/src/shared/i18n/locales/es/common.json index 074e770b93..0eda9d8215 100644 --- a/ui/goose2/src/shared/i18n/locales/es/common.json +++ b/ui/goose2/src/shared/i18n/locales/es/common.json @@ -20,10 +20,14 @@ "remove": "Quitar", "rename": "Renombrar", "restore": "Restaurar", + "add": "Agregar", + "connect": "Conectar", "retry": "Reintentar", "run": "Ejecutar", "running": "Ejecutando", "save": "Guardar", + "saved": "Guardado", + "saving": "Guardando...", "saveChanges": "Guardar cambios", "search": "Buscar", "select": "Seleccionar", diff --git a/ui/goose2/src/shared/i18n/locales/es/settings.json b/ui/goose2/src/shared/i18n/locales/es/settings.json index ff161af140..94d6045582 100644 --- a/ui/goose2/src/shared/i18n/locales/es/settings.json +++ b/ui/goose2/src/shared/i18n/locales/es/settings.json @@ -343,6 +343,14 @@ "loading": "Cargando catálogo de proveedores..." }, "disconnect": "Desconectar", + "errors": { + "fieldRequired": "Ingresa un valor para {{label}}", + "fieldsMissing": "Completa los campos: {{fields}}", + "loadFailed": "No se pudo cargar la configuración del proveedor", + "removeFailed": "Error al eliminar", + "saveFailed": "Error al guardar", + "signInFailed": "No se pudo completar el inicio de sesión" + }, "models": { "description": "Necesitas al menos un proveedor de modelos para usar el agente Goose. Algunos agentes pueden traer sus propias conexiones de modelo.", "notSet": "No configurado",