From 17e3d704df66c16385b1326a43bb5bd2408e6304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B9=E9=9B=AA?= <2b@yorha.xyz> Date: Thu, 11 Jun 2026 05:48:58 +0900 Subject: [PATCH] feat(ui): i18n for permissions displays --- .../permissions/AgentPermissions.tsx | 13 +++++++---- .../permissions/MCPServerPermissions.tsx | 23 +++++++++++++------ .../permissions/VectorStorePermissions.tsx | 6 +++-- ui/litellm-dashboard/src/locales/en.json | 21 +++++++++++++++++ ui/litellm-dashboard/src/locales/zh-CN.json | 21 +++++++++++++++++ 5 files changed, 71 insertions(+), 13 deletions(-) diff --git a/ui/litellm-dashboard/src/components/permissions/AgentPermissions.tsx b/ui/litellm-dashboard/src/components/permissions/AgentPermissions.tsx index 1517d658bdc..3fa459cf22a 100644 --- a/ui/litellm-dashboard/src/components/permissions/AgentPermissions.tsx +++ b/ui/litellm-dashboard/src/components/permissions/AgentPermissions.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; import { Text, Badge } from "@tremor/react"; import { UserGroupIcon } from "@heroicons/react/outline"; import { Tooltip } from "antd"; +import { useTranslation } from "react-i18next"; import { getAgentsList } from "../networking"; interface Agent { @@ -18,6 +19,7 @@ interface AgentPermissionsProps { } export function AgentPermissions({ agents, agentAccessGroups = [], accessToken }: AgentPermissionsProps) { + const { t } = useTranslation(); const [agentDetails, setAgentDetails] = useState([]); // Fetch agent details when component mounts @@ -58,7 +60,7 @@ export function AgentPermissions({ agents, agentAccessGroups = [], accessToken }
- Agents + {t("permissions.agentPermissions.title")} {totalCount} @@ -71,7 +73,10 @@ export function AgentPermissions({ agents, agentAccessGroups = [], accessToken }
{item.type === "agent" ? ( - +
@@ -84,7 +89,7 @@ export function AgentPermissions({ agents, agentAccessGroups = [], accessToken } {item.value} - Group + {t("permissions.agentPermissions.groupBadge")}
)} @@ -96,7 +101,7 @@ export function AgentPermissions({ agents, agentAccessGroups = [], accessToken } ) : (
- No agents or access groups configured + {t("permissions.agentPermissions.empty")}
)}
diff --git a/ui/litellm-dashboard/src/components/permissions/MCPServerPermissions.tsx b/ui/litellm-dashboard/src/components/permissions/MCPServerPermissions.tsx index b02886ad3fb..d4573fabec6 100644 --- a/ui/litellm-dashboard/src/components/permissions/MCPServerPermissions.tsx +++ b/ui/litellm-dashboard/src/components/permissions/MCPServerPermissions.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; import { Text, Badge } from "@tremor/react"; import { ServerIcon, ChevronDownIcon, ChevronRightIcon } from "@heroicons/react/outline"; import { Tooltip } from "antd"; +import { useTranslation } from "react-i18next"; import { fetchMCPServers, fetchMCPToolsets } from "../networking"; import { MCPServer, MCPToolset } from "../mcp_tools/types"; @@ -20,6 +21,7 @@ export function MCPServerPermissions({ mcpToolsets = [], accessToken, }: MCPServerPermissionsProps) { + const { t } = useTranslation(); const [mcpServerDetails, setMCPServerDetails] = useState([]); const [toolsetDetails, setToolsetDetails] = useState([]); const [expandedServers, setExpandedServers] = useState>(new Set()); @@ -105,7 +107,7 @@ export function MCPServerPermissions({
- MCP Servers + {t("permissions.mcpServerPermissions.title")} {totalCount} @@ -128,7 +130,10 @@ export function MCPServerPermissions({ >
{item.type === "server" ? ( - +
@@ -141,7 +146,7 @@ export function MCPServerPermissions({ {item.value} - Group + {t("permissions.mcpServerPermissions.groupBadge")}
)} @@ -150,7 +155,9 @@ export function MCPServerPermissions({ {hasToolRestrictions && (
{toolsForServer.length} - {toolsForServer.length === 1 ? "tool" : "tools"} + + {t("permissions.mcpServerPermissions.toolCount", { count: toolsForServer.length })} + {isExpanded ? ( ) : ( @@ -200,13 +207,15 @@ export function MCPServerPermissions({ {detail?.toolset_name ?? toolsetId} - Toolset + {t("permissions.mcpServerPermissions.toolsetBadge")}
{toolCount > 0 && (
{toolCount} - {toolCount === 1 ? "tool" : "tools"} + + {t("permissions.mcpServerPermissions.toolCount", { count: toolCount })} + {isExpanded ? ( ) : ( @@ -238,7 +247,7 @@ export function MCPServerPermissions({ ) : (
- No MCP servers, access groups, or toolsets configured + {t("permissions.mcpServerPermissions.empty")}
)}
diff --git a/ui/litellm-dashboard/src/components/permissions/VectorStorePermissions.tsx b/ui/litellm-dashboard/src/components/permissions/VectorStorePermissions.tsx index 8541d65e11f..5dd26e601b4 100644 --- a/ui/litellm-dashboard/src/components/permissions/VectorStorePermissions.tsx +++ b/ui/litellm-dashboard/src/components/permissions/VectorStorePermissions.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react"; import { Text, Badge } from "@tremor/react"; import { DatabaseIcon } from "@heroicons/react/outline"; +import { useTranslation } from "react-i18next"; import { vectorStoreListCall } from "../networking"; interface VectorStoreDetails { @@ -14,6 +15,7 @@ interface VectorStorePermissionsProps { } export function VectorStorePermissions({ vectorStores, accessToken }: VectorStorePermissionsProps) { + const { t } = useTranslation(); const [vectorStoreDetails, setVectorStoreDetails] = useState([]); // Fetch vector store details when component mounts @@ -52,7 +54,7 @@ export function VectorStorePermissions({ vectorStores, accessToken }: VectorStor
- Vector Stores + {t("permissions.vectorStorePermissions.title")} {vectorStores.length} @@ -72,7 +74,7 @@ export function VectorStorePermissions({ vectorStores, accessToken }: VectorStor ) : (
- No vector stores configured + {t("permissions.vectorStorePermissions.empty")}
)}
diff --git a/ui/litellm-dashboard/src/locales/en.json b/ui/litellm-dashboard/src/locales/en.json index dce9b7a21d4..4162fbc08df 100644 --- a/ui/litellm-dashboard/src/locales/en.json +++ b/ui/litellm-dashboard/src/locales/en.json @@ -7708,5 +7708,26 @@ "testConnection": "Test Connection", "saveChanges": "Save Changes" } + }, + "permissions": { + "agentPermissions": { + "title": "Agents", + "fullIdTooltip": "Full ID: {{id}}", + "groupBadge": "Group", + "empty": "No agents or access groups configured" + }, + "mcpServerPermissions": { + "title": "MCP Servers", + "fullIdTooltip": "Full ID: {{id}}", + "groupBadge": "Group", + "toolsetBadge": "Toolset", + "toolCount_one": "tool", + "toolCount_other": "tools", + "empty": "No MCP servers, access groups, or toolsets configured" + }, + "vectorStorePermissions": { + "title": "Vector Stores", + "empty": "No vector stores configured" + } } } diff --git a/ui/litellm-dashboard/src/locales/zh-CN.json b/ui/litellm-dashboard/src/locales/zh-CN.json index 0b670bed35f..db82c024e9a 100644 --- a/ui/litellm-dashboard/src/locales/zh-CN.json +++ b/ui/litellm-dashboard/src/locales/zh-CN.json @@ -7708,5 +7708,26 @@ "testConnection": "测试连接", "saveChanges": "保存更改" } + }, + "permissions": { + "agentPermissions": { + "title": "Agent", + "fullIdTooltip": "完整 ID: {{id}}", + "groupBadge": "Group", + "empty": "未配置任何 Agent 或访问组" + }, + "mcpServerPermissions": { + "title": "MCP 服务器", + "fullIdTooltip": "完整 ID: {{id}}", + "groupBadge": "Group", + "toolsetBadge": "工具集", + "toolCount_one": "个工具", + "toolCount_other": "个工具", + "empty": "未配置任何 MCP 服务器、访问组或工具集" + }, + "vectorStorePermissions": { + "title": "向量存储", + "empty": "未配置任何向量存储" + } } }