diff --git a/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx b/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx index 5f5c240d025..bec1ad14297 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx @@ -8,6 +8,7 @@ import useAuthorized from "@/app/(dashboard)/hooks/useAuthorized"; import { useRouter, useSearchParams, usePathname } from "next/navigation"; import { DebugWarningBanner } from "@/components/DebugWarningBanner"; import { MIGRATED_PAGES, migratedHref, legacyPageHref, legacyKeyForPathname } from "@/utils/migratedPages"; +import i18n from "@/lib/i18n"; function LayoutContent({ children }: { children: React.ReactNode }) { const router = useRouter(); @@ -56,7 +57,9 @@ function LayoutContent({ children }: { children: React.ReactNode }) { export default function Layout({ children }: { children: React.ReactNode }) { return ( - Loading...}> + {i18n.t("common.loading")}} + > {children} ); diff --git a/ui/litellm-dashboard/src/components/AIHub/forms/MakeMCPPublicForm.tsx b/ui/litellm-dashboard/src/components/AIHub/forms/MakeMCPPublicForm.tsx index 53e03ed60f9..9348f2e5e5f 100644 --- a/ui/litellm-dashboard/src/components/AIHub/forms/MakeMCPPublicForm.tsx +++ b/ui/litellm-dashboard/src/components/AIHub/forms/MakeMCPPublicForm.tsx @@ -214,7 +214,7 @@ const MakeMCPPublicForm: React.FC = ({
- Warning:{" "} + {t("aiHub.makeMCPPublicForm.warningLabel")}{" "} }} />
diff --git a/ui/litellm-dashboard/src/components/agents/add_agent_form.tsx b/ui/litellm-dashboard/src/components/agents/add_agent_form.tsx index fb4bfd89107..fa2e87c6a86 100644 --- a/ui/litellm-dashboard/src/components/agents/add_agent_form.tsx +++ b/ui/litellm-dashboard/src/components/agents/add_agent_form.tsx @@ -792,7 +792,9 @@ const AddAgentForm: React.FC = ({ visible, onClose, accessTok {selectedAgentTypeInfo.credential_fields.length > 0 && (

- {selectedAgentTypeInfo.agent_type_display_name} Settings + {t("agentsPage.addAgentForm.agentTypeSettings", { + agentType: selectedAgentTypeInfo.agent_type_display_name, + })}

{selectedAgentTypeInfo.credential_fields.map((field) => ( = ({ visible, onClose, accessTok - {selectedLogo && currentStep < 1 && Agent} + {selectedLogo && currentStep < 1 && ( + {t("agentsPage.addAgentForm.agentLogoAlt")} + )}

{t("agentsPage.addAgentForm.modalTitle")}

} diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx index 9bb3c036526..a8641498665 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx @@ -327,7 +327,11 @@ const AddPluginForm: React.FC = ({ visible, onClose, accessT rules={[{ type: "email", message: t("claudeCodePluginsPage.addPluginForm.authorEmailRule") }]} tooltip={t("claudeCodePluginsPage.addPluginForm.authorEmailTooltip")} > - + {/* Submit Buttons */} diff --git a/ui/litellm-dashboard/src/components/common_components/ModelAliasManager.tsx b/ui/litellm-dashboard/src/components/common_components/ModelAliasManager.tsx index 57c8f13a86f..2e1f21e714e 100644 --- a/ui/litellm-dashboard/src/components/common_components/ModelAliasManager.tsx +++ b/ui/litellm-dashboard/src/components/common_components/ModelAliasManager.tsx @@ -160,7 +160,7 @@ const ModelAliasManager: React.FC = ({ aliasName: e.target.value, }) } - placeholder="e.g., gpt-4o" + placeholder={t("commonComponents.modelAliasManager.aliasNamePlaceholder")} className="w-full px-3 py-2 border border-gray-300 rounded-md text-sm" /> @@ -171,7 +171,7 @@ const ModelAliasManager: React.FC = ({ setNewAlias({ ...newAlias, diff --git a/ui/litellm-dashboard/src/components/general_settings.tsx b/ui/litellm-dashboard/src/components/general_settings.tsx index 40de21843ed..082e3fa8f84 100644 --- a/ui/litellm-dashboard/src/components/general_settings.tsx +++ b/ui/litellm-dashboard/src/components/general_settings.tsx @@ -182,7 +182,7 @@ const GeneralSettings: React.FC = ({ accessToken, user {t("common.update")} handleResetField(value.field_name, index)}> - Reset + {t("common.reset")} diff --git a/ui/litellm-dashboard/src/components/guardrails/guardrail_optional_params.tsx b/ui/litellm-dashboard/src/components/guardrails/guardrail_optional_params.tsx index 0c207eaee2f..238aa007ad7 100644 --- a/ui/litellm-dashboard/src/components/guardrails/guardrail_optional_params.tsx +++ b/ui/litellm-dashboard/src/components/guardrails/guardrail_optional_params.tsx @@ -96,8 +96,8 @@ const DictField: React.FC = ({ field, fieldKey, fullFieldKey, va /> ) : field.dict_value_type === "boolean" ? ( ) : ( @@ -199,8 +199,8 @@ const GuardrailOptionalParams: React.FC = ({ ) : field.type === "bool" || field.type === "boolean" ? ( ) : field.type === "number" ? ( diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx index 82ed4a14810..862abb0d21f 100644 --- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx +++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_server_edit.tsx @@ -162,9 +162,7 @@ const MCPServerEdit: React.FC = ({ form.setFieldsValue({ credentials }); - NotificationsManager.success( - t("mcpTools.mcpServerEdit.oauthAuthSuccess"), - ); + NotificationsManager.success(t("mcpTools.mcpServerEdit.oauthAuthSuccess")); } }, onBeforeRedirect: persistEditUiState, @@ -828,9 +826,7 @@ const MCPServerEdit: React.FC = ({ {isStdioTransport && (
-

- {t("mcpTools.mcpServerEdit.stdioDesc")} -

+

{t("mcpTools.mcpServerEdit.stdioDesc")}

= ({ rules={[{ required: true, message: t("mcpTools.mcpServerEdit.stdioCommandRequired") }]} > @@ -1056,14 +1052,17 @@ const MCPServerEdit: React.FC = ({ } name="token_storage_ttl_seconds" > - + )}
-

- {t("mcpTools.mcpServerEdit.oauthFlowDesc")} -

+

{t("mcpTools.mcpServerEdit.oauthFlowDesc")}

- Cancel - + {t("common.cancel")} +
@@ -1280,8 +1279,8 @@ const MCPServerEdit: React.FC = ({
- Cancel - + {t("common.cancel")} +
diff --git a/ui/litellm-dashboard/src/components/policies/pipeline_flow_builder.tsx b/ui/litellm-dashboard/src/components/policies/pipeline_flow_builder.tsx index b751231bb48..568941910f7 100644 --- a/ui/litellm-dashboard/src/components/policies/pipeline_flow_builder.tsx +++ b/ui/litellm-dashboard/src/components/policies/pipeline_flow_builder.tsx @@ -966,7 +966,11 @@ const PipelineTestPanel: React.FC = ({ pipeline, accessT action: actionLabels[step.action_taken] || step.action_taken, })} {step.duration_seconds != null && ( - ({(step.duration_seconds * 1000).toFixed(0)}ms) + + {t("policies.pipelineFlowBuilder.durationMs", { + ms: (step.duration_seconds * 1000).toFixed(0), + })} + )} {step.error_detail && ( diff --git a/ui/litellm-dashboard/src/components/vector_store_providers.tsx b/ui/litellm-dashboard/src/components/vector_store_providers.tsx index 49ebe492d9c..9e975222ef2 100644 --- a/ui/litellm-dashboard/src/components/vector_store_providers.tsx +++ b/ui/litellm-dashboard/src/components/vector_store_providers.tsx @@ -94,7 +94,7 @@ export const getVectorStoreProviderFields = (t: TFunction): Record }) { + const { t } = useTranslation(); const entries = Object.entries(details).filter( ([, v]) => typeof v === "number" || (typeof v === "object" && v !== null), ); @@ -488,7 +489,7 @@ function TokenBreakdown({ label, details }: { label: string; details: Record - {label} Token Breakdown + {label} {t("viewLogs.realtimePrettyView.tokenBreakdownSuffix")}