From e2eba05e5cf4ea0b796d67d5efed9530df6182a9 Mon Sep 17 00:00:00 2001 From: Alex Jordan <60003097+alex-jordan547@users.noreply.github.com> Date: Sun, 2 Aug 2026 21:23:12 +0200 Subject: [PATCH] fix(i18n): localize hardcoded web UI copy --- .../(dashboard)/dashboard/BootstrapBanner.tsx | 23 +- .../(dashboard)/dashboard/HomePageClient.tsx | 136 ++- .../analytics/AutoRoutingAnalyticsTab.tsx | 14 +- .../analytics/SearchAnalyticsTab.tsx | 37 +- .../dashboard/audit/McpAuditTab.tsx | 8 +- .../dashboard/batch/BatchDetailModal.tsx | 128 +- .../dashboard/batch/FileDetailModal.tsx | 62 +- .../(dashboard)/dashboard/chaos/chaosI18n.ts | 16 + .../components/ChaosConfigActionsBar.tsx | 5 +- .../components/ChaosTestResultsPanel.tsx | 25 +- src/app/(dashboard)/dashboard/chaos/page.tsx | 8 +- .../chaos/useChaosConfigPersistence.ts | 22 +- .../dashboard/chaos/useChaosTestRun.ts | 20 +- .../components/CliproxyapiToolCard.tsx | 70 +- .../combos/IntelligentComboPanel.tsx | 15 +- .../(dashboard)/dashboard/combos/error.tsx | 16 +- .../dashboard/compression/page.tsx | 12 +- .../dashboard/endpoint/EndpointPageClient.tsx | 33 +- .../endpoint/components/A2ADashboard.tsx | 2 +- .../endpoint/components/NotionSourceCard.tsx | 71 +- .../[id]/components/ConnectionRow.tsx | 32 +- .../components/CoolingConnectionsPanel.tsx | 18 +- .../[id]/components/CustomModelsSection.tsx | 30 +- .../components/KimiCodeAuthMethodModal.tsx | 6 +- .../[id]/components/ModelCompatPopover.tsx | 15 +- .../providers/[id]/components/ModelRow.tsx | 2 +- .../components/NoAuthProviderControls.tsx | 6 +- .../[id]/components/PassthroughModelRow.tsx | 2 +- .../components/ProviderPlaygroundPanel.tsx | 8 +- .../modals/EditCompatibleNodeModal.tsx | 14 +- .../[id]/hooks/useCommandCodeAuth.ts | 75 +- .../[id]/hooks/useConnectionDeleteConfirm.ts | 11 +- .../[id]/hooks/useModelVisibilityHandlers.ts | 6 +- .../[id]/hooks/useProviderConnections.ts | 91 +- .../providers/[id]/hooks/useProviderModels.ts | 21 +- .../[id]/hooks/useProviderSettings.ts | 42 +- .../components/AddCompatibleProviderModal.tsx | 14 +- .../providers/components/ProviderCard.tsx | 32 +- .../components/ProviderSummaryCard.tsx | 41 +- .../(dashboard)/dashboard/providers/error.tsx | 38 +- .../providers/hooks/useProviderModels.ts | 6 +- .../(dashboard)/dashboard/providers/page.tsx | 52 +- .../CliproxyProviderExposureCard.tsx | 68 +- src/app/(dashboard)/dashboard/relay/page.tsx | 12 +- .../settings/components/AuthzSection.tsx | 2 +- .../settings/components/AutoDisableCard.tsx | 2 +- .../components/BackgroundDegradationTab.tsx | 41 +- .../components/CliproxyapiSettingsTab.tsx | 97 +- .../settings/components/MemorySkillsTab.tsx | 31 +- .../settings/components/ModelAliasesTab.tsx | 21 +- .../settings/components/ModelsDevSyncTab.tsx | 6 +- .../settings/components/OneproxyTab.tsx | 67 +- .../settings/components/ProxyStatusBadge.tsx | 5 +- .../settings/components/ResilienceTab.tsx | 35 +- .../settings/components/RoutingTab.tsx | 117 +- .../settings/components/SecurityTab.tsx | 12 +- .../settings/components/SystemStorageTab.tsx | 18 +- .../components/proxy/DocumentationTab.tsx | 11 +- .../components/proxy/FreeProxyRow.tsx | 11 +- .../components/proxy/SubscriptionTab.tsx | 320 ++--- .../(dashboard)/dashboard/settings/error.tsx | 16 +- .../tools/traffic-inspector/page.tsx | 12 +- .../components/advanced/PipelineView.tsx | 27 +- src/app/400/page.tsx | 20 +- src/app/401/page.tsx | 20 +- src/app/403/page.tsx | 17 +- src/app/408/page.tsx | 17 +- src/app/429/page.tsx | 17 +- src/app/500/page.tsx | 17 +- src/app/502/page.tsx | 20 +- src/app/503/page.tsx | 17 +- src/app/authorize/route.ts | 27 +- .../codex/[token]/CodexConnectClient.tsx | 62 +- src/app/docs/[...slug]/page.tsx | 6 +- src/app/docs/api-explorer/page.tsx | 21 +- src/app/docs/components/ApiExplorerClient.tsx | 33 +- src/app/docs/components/FeedbackWidget.tsx | 11 +- src/app/docs/layout.tsx | 72 +- src/app/docs/page.tsx | 99 +- src/app/error.tsx | 26 +- src/app/forgot-password/page.tsx | 24 +- src/app/global-error.tsx | 141 ++- src/app/login/page.tsx | 2 +- src/app/maintenance/page.tsx | 18 +- src/app/not-found.tsx | 16 +- src/app/offline/page.tsx | 16 +- src/app/status/page.tsx | 73 +- src/i18n/messages/en.json | 994 +++++++++++++++- src/i18n/messages/fr.json | 994 +++++++++++++++- src/i18n/messages/pt-BR.json | 1036 ++++++++++++++++- src/i18n/messages/vi.json | 994 +++++++++++++++- src/shared/components/CommandPalette.tsx | 16 +- src/shared/components/DegradationBadge.tsx | 2 +- .../components/DistributeProxiesButton.tsx | 16 +- src/shared/components/Footer.tsx | 48 +- src/shared/components/KiroAuthModal.tsx | 111 +- .../components/KiroSocialOAuthModal.tsx | 40 +- src/shared/components/ModelRoutingSection.tsx | 7 +- src/shared/components/ModelSelectField.tsx | 8 +- .../components/NoAuthProviderToggle.tsx | 8 +- src/shared/components/OAuthModal.tsx | 110 +- .../components/ProviderTestSlideOver.tsx | 92 +- src/shared/components/ProxyLogDetail.tsx | 44 +- src/shared/components/RequestLoggerDetail.tsx | 172 +-- src/shared/components/RequestLoggerV2.tsx | 34 +- src/shared/components/RequestTimeline.tsx | 59 +- src/shared/components/SystemMonitor.tsx | 40 +- src/shared/components/TokenHealthBadge.tsx | 10 +- src/shared/components/TraeAuthModal.tsx | 65 +- src/shared/components/UsageStats.tsx | 78 +- .../ComboCompressionModeSelect.tsx | 26 +- src/shared/components/docs/APIReference.tsx | 14 +- .../components/docs/DocsBreadcrumbs.tsx | 6 +- .../components/oauthModal/GheConfigStep.tsx | 16 +- .../oauthModal/GitlabDuoSetupStep.tsx | 30 +- 115 files changed, 6305 insertions(+), 1773 deletions(-) create mode 100644 src/app/(dashboard)/dashboard/chaos/chaosI18n.ts diff --git a/src/app/(dashboard)/dashboard/BootstrapBanner.tsx b/src/app/(dashboard)/dashboard/BootstrapBanner.tsx index a819d82d1d..f771ae34a7 100644 --- a/src/app/(dashboard)/dashboard/BootstrapBanner.tsx +++ b/src/app/(dashboard)/dashboard/BootstrapBanner.tsx @@ -27,22 +27,17 @@ export default function BootstrapBanner() { ⚠️
- Running in zero-config mode + {t("zeroConfigBannerTitle")}
- OmniRoute auto-generated secure encryption keys on first launch. They are persisted to{" "}
-
- {dataDir}
-
- . No action is required — your data is encrypted and safe. To use custom keys, add{" "}
-
- JWT_SECRET
- {" "}
- and{" "}
-
- STORAGE_ENCRYPTION_KEY
- {" "}
- to that file.
+ {t.rich("zeroConfigBannerBody", {
+ dataDir,
+ code: (chunks) => (
+
+ {chunks}
+
+ ),
+ })}
- Update Available: v{versionInfo.latest} {isElectron && "(Desktop App)"} + {t("updateAvailableTitle", { + version: versionInfo.latest, + desktop: isElectron ? ` ${t("desktopAppLabel")}` : "", + })}
{isElectron ? ( <> - {electronUpdateStatus.status === "checking" && "Checking for updates..."} + {electronUpdateStatus.status === "checking" && t("checkingForUpdates")} {electronUpdateStatus.status === "available" && - `Version v${versionInfo.latest} is available for download.`} + t("versionAvailableForDownload", { version: versionInfo.latest })} {electronUpdateStatus.status === "downloading" && - `Downloading update... ${electronUpdateStatus.percent || 0}% complete.`} - {electronUpdateStatus.status === "downloaded" && - "Update downloaded successfully! Click Restart & Install to apply."} + t("downloadingUpdate", { percent: electronUpdateStatus.percent || 0 })} + {electronUpdateStatus.status === "downloaded" && t("updateDownloaded")} {electronUpdateStatus.status === "error" && - `Auto-update failed: ${electronUpdateStatus.message || "Unknown error"}.`} + t("autoUpdateFailed", { + reason: electronUpdateStatus.message || t("unknownUpdateError"), + })} {(electronUpdateStatus.status === "idle" || electronUpdateStatus.status === "not-available") && - `Version v${versionInfo.latest} is available for the desktop app.`} + t("versionAvailableDesktop", { version: versionInfo.latest })} > ) : versionInfo.autoUpdateSupported ? ( - t("updateAvailableDesc") || - `You are currently using v${versionInfo.current}. Update to access the latest features and bug fixes.` + t("updateAvailableDesc") ) : ( - versionInfo.autoUpdateError || - "Manual update required for this installation type." + versionInfo.autoUpdateError || t("manualUpdateRequired") )}
- Or download the respective installer format directly: -
+{t("directDownloadHint")}