fix(ui): i18n audit repair round 1

This commit is contained in:
吹雪 2026-06-11 08:19:26 +09:00
parent 6265b18010
commit 2ed0c0027b
13 changed files with 151 additions and 72 deletions

View file

@ -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 (
<Suspense fallback={<div className="flex items-center justify-center min-h-screen">Loading...</div>}>
<Suspense
fallback={<div className="flex items-center justify-center min-h-screen">{i18n.t("common.loading")}</div>}
>
<LayoutContent>{children}</LayoutContent>
</Suspense>
);

View file

@ -214,7 +214,7 @@ const MakeMCPPublicForm: React.FC<MakeMCPPublicFormProps> = ({
<div className="bg-yellow-50 border border-yellow-200 rounded-lg p-4">
<Text className="text-sm text-yellow-800">
<strong>Warning:</strong>{" "}
<strong>{t("aiHub.makeMCPPublicForm.warningLabel")}</strong>{" "}
<Trans i18nKey="aiHub.makeMCPPublicForm.warningText" components={{ code: <code key="code" /> }} />
</Text>
</div>

View file

@ -792,7 +792,9 @@ const AddAgentForm: React.FC<AddAgentFormProps> = ({ visible, onClose, accessTok
{selectedAgentTypeInfo.credential_fields.length > 0 && (
<div className="mt-4 p-4 border border-gray-200 rounded-lg">
<h4 className="text-sm font-medium text-gray-700 mb-3">
{selectedAgentTypeInfo.agent_type_display_name} Settings
{t("agentsPage.addAgentForm.agentTypeSettings", {
agentType: selectedAgentTypeInfo.agent_type_display_name,
})}
</h4>
{selectedAgentTypeInfo.credential_fields.map((field) => (
<Form.Item
@ -1001,7 +1003,13 @@ const AddAgentForm: React.FC<AddAgentFormProps> = ({ visible, onClose, accessTok
<Modal
title={
<div className="flex items-center space-x-3 pb-4 border-b border-gray-100">
{selectedLogo && currentStep < 1 && <img src={selectedLogo} alt="Agent" className="w-6 h-6 object-contain" />}
{selectedLogo && currentStep < 1 && (
<img
src={selectedLogo}
alt={t("agentsPage.addAgentForm.agentLogoAlt")}
className="w-6 h-6 object-contain"
/>
)}
<h2 className="text-xl font-semibold text-gray-900">{t("agentsPage.addAgentForm.modalTitle")}</h2>
</div>
}

View file

@ -327,7 +327,11 @@ const AddPluginForm: React.FC<AddPluginFormProps> = ({ visible, onClose, accessT
rules={[{ type: "email", message: t("claudeCodePluginsPage.addPluginForm.authorEmailRule") }]}
tooltip={t("claudeCodePluginsPage.addPluginForm.authorEmailTooltip")}
>
<Input type="email" placeholder="author@example.com" className="rounded-lg" />
<Input
type="email"
placeholder={t("claudeCodePluginsPage.addPluginForm.authorEmailPlaceholder")}
className="rounded-lg"
/>
</Form.Item>
{/* Submit Buttons */}

View file

@ -160,7 +160,7 @@ const ModelAliasManager: React.FC<ModelAliasManagerProps> = ({
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"
/>
</div>
@ -171,7 +171,7 @@ const ModelAliasManager: React.FC<ModelAliasManagerProps> = ({
<ModelSelector
accessToken={accessToken}
value={newAlias.targetModel}
placeholder="Select target model"
placeholder={t("commonComponents.modelAliasManager.selectTargetModelPlaceholder")}
onChange={(value) =>
setNewAlias({
...newAlias,

View file

@ -182,7 +182,7 @@ const GeneralSettings: React.FC<GeneralSettingsPageProps> = ({ accessToken, user
{t("common.update")}
</Button>
<Icon icon={TrashIcon} color="red" onClick={() => handleResetField(value.field_name, index)}>
Reset
{t("common.reset")}
</Icon>
</TableCell>
</TableRow>

View file

@ -96,8 +96,8 @@ const DictField: React.FC<DictFieldProps> = ({ field, fieldKey, fullFieldKey, va
/>
) : field.dict_value_type === "boolean" ? (
<Select placeholder={t("guardrails.guardrailOptionalParams.selectValue", { key: entry.key })}>
<Select.Option value={true}>True</Select.Option>
<Select.Option value={false}>False</Select.Option>
<Select.Option value={true}>{t("guardrails.guardrailOptionalParams.boolTrue")}</Select.Option>
<Select.Option value={false}>{t("guardrails.guardrailOptionalParams.boolFalse")}</Select.Option>
</Select>
) : (
<Input placeholder={t("guardrails.guardrailOptionalParams.enterValue", { key: entry.key })} />
@ -199,8 +199,8 @@ const GuardrailOptionalParams: React.FC<GuardrailOptionalParamsProps> = ({
</Select>
) : field.type === "bool" || field.type === "boolean" ? (
<Select placeholder={field.description}>
<Select.Option value={true}>True</Select.Option>
<Select.Option value={false}>False</Select.Option>
<Select.Option value={true}>{t("guardrails.guardrailOptionalParams.boolTrue")}</Select.Option>
<Select.Option value={false}>{t("guardrails.guardrailOptionalParams.boolFalse")}</Select.Option>
</Select>
) : field.type === "number" ? (
<NumericalInput step={1} width={400} placeholder={field.description} />

View file

@ -162,9 +162,7 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
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<MCPServerEditProps> = ({
{isStdioTransport && (
<div className="rounded-lg border border-gray-200 p-4 space-y-4">
<p className="text-sm text-gray-600">
{t("mcpTools.mcpServerEdit.stdioDesc")}
</p>
<p className="text-sm text-gray-600">{t("mcpTools.mcpServerEdit.stdioDesc")}</p>
<Form.Item
label={t("mcpTools.mcpServerEdit.stdioCommandLabel")}
@ -838,7 +834,7 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
rules={[{ required: true, message: t("mcpTools.mcpServerEdit.stdioCommandRequired") }]}
>
<Input
placeholder="e.g., npx"
placeholder={t("mcpTools.mcpServerEdit.stdioCommandPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
@ -1056,14 +1052,17 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
}
name="token_storage_ttl_seconds"
>
<InputNumber min={1} placeholder={t("mcpTools.mcpServerEdit.tokenStorageTtlPlaceholder")} style={{ width: "100%" }} className="rounded-lg" />
<InputNumber
min={1}
placeholder={t("mcpTools.mcpServerEdit.tokenStorageTtlPlaceholder")}
style={{ width: "100%" }}
className="rounded-lg"
/>
</Form.Item>
</>
)}
<div className="rounded-lg border border-dashed border-gray-300 p-4 space-y-2">
<p className="text-sm text-gray-600">
{t("mcpTools.mcpServerEdit.oauthFlowDesc")}
</p>
<p className="text-sm text-gray-600">{t("mcpTools.mcpServerEdit.oauthFlowDesc")}</p>
<Button
variant="secondary"
onClick={startOAuthFlow}
@ -1118,8 +1117,8 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Service Name
<Tooltip title="AWS service name for SigV4 signing. Defaults to 'bedrock-agentcore'.">
{t("mcpTools.mcpServerEdit.awsServiceNameLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsServiceNameTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1127,15 +1126,15 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
name={["credentials", "aws_service_name"]}
>
<Input
placeholder="bedrock-agentcore (leave blank to keep existing)"
placeholder={t("mcpTools.mcpServerEdit.awsServiceNamePlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Access Key ID
<Tooltip title="Optional. If not provided, falls back to the boto3 credential chain (IAM role, env vars, etc.).">
{t("mcpTools.mcpServerEdit.awsAccessKeyIdLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsAccessKeyIdTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1144,15 +1143,15 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
rules={[]}
>
<Input.Password
placeholder="Leave blank to keep existing"
placeholder={t("mcpTools.mcpServerEdit.leaveBlankPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Secret Access Key
<Tooltip title="Optional. Required if AWS Access Key ID is provided.">
{t("mcpTools.mcpServerEdit.awsSecretAccessKeyLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsSecretAccessKeyTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1161,15 +1160,15 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
rules={[]}
>
<Input.Password
placeholder="Leave blank to keep existing"
placeholder={t("mcpTools.mcpServerEdit.leaveBlankPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Session Token
<Tooltip title="Optional. Only needed for temporary STS credentials.">
{t("mcpTools.mcpServerEdit.awsSessionTokenLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsSessionTokenTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1177,15 +1176,15 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
name={["credentials", "aws_session_token"]}
>
<Input.Password
placeholder="Leave blank to keep existing"
placeholder={t("mcpTools.mcpServerEdit.leaveBlankPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Role ARN
<Tooltip title="Optional. IAM role ARN to assume via STS before signing. If set, LiteLLM calls sts:AssumeRole to get temporary credentials.">
{t("mcpTools.mcpServerEdit.awsRoleArnLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsRoleArnTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1193,15 +1192,15 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
name={["credentials", "aws_role_name"]}
>
<Input
placeholder="Leave blank to keep existing"
placeholder={t("mcpTools.mcpServerEdit.leaveBlankPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
<Form.Item
label={
<span className="text-sm font-medium text-gray-700 flex items-center">
AWS Session Name
<Tooltip title="Optional. Session name for the AssumeRole call — appears in CloudTrail logs. Auto-generated if omitted.">
{t("mcpTools.mcpServerEdit.awsSessionNameLabel")}
<Tooltip title={t("mcpTools.mcpServerEdit.awsSessionNameTooltip")}>
<InfoCircleOutlined className="ml-2 text-blue-400 hover:text-blue-600 cursor-help" />
</Tooltip>
</span>
@ -1209,7 +1208,7 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
name={["credentials", "aws_session_name"]}
>
<Input
placeholder="Leave blank to keep existing"
placeholder={t("mcpTools.mcpServerEdit.leaveBlankPlaceholder")}
className="rounded-lg border-gray-300 focus:border-blue-500 focus:ring-blue-500"
/>
</Form.Item>
@ -1269,8 +1268,8 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
</div>
<div className="flex justify-end gap-2">
<AntdButton onClick={onCancel}>Cancel</AntdButton>
<Button type="submit">Save Changes</Button>
<AntdButton onClick={onCancel}>{t("common.cancel")}</AntdButton>
<Button type="submit">{t("mcpTools.mcpServerEdit.saveChanges")}</Button>
</div>
</Form>
</TabPanel>
@ -1280,8 +1279,8 @@ const MCPServerEdit: React.FC<MCPServerEditProps> = ({
<MCPServerCostConfig value={costConfig} onChange={setCostConfig} tools={tools} disabled={isLoadingTools} />
<div className="flex justify-end gap-2">
<AntdButton onClick={onCancel}>Cancel</AntdButton>
<Button onClick={() => form.submit()}>Save Changes</Button>
<AntdButton onClick={onCancel}>{t("common.cancel")}</AntdButton>
<Button onClick={() => form.submit()}>{t("mcpTools.mcpServerEdit.saveChanges")}</Button>
</div>
</div>
</TabPanel>

View file

@ -966,7 +966,11 @@ const PipelineTestPanel: React.FC<PipelineTestPanelProps> = ({ pipeline, accessT
action: actionLabels[step.action_taken] || step.action_taken,
})}
{step.duration_seconds != null && (
<span style={{ marginLeft: 8 }}>({(step.duration_seconds * 1000).toFixed(0)}ms)</span>
<span style={{ marginLeft: 8 }}>
{t("policies.pipelineFlowBuilder.durationMs", {
ms: (step.duration_seconds * 1000).toFixed(0),
})}
</span>
)}
</div>
{step.error_detail && (

View file

@ -94,7 +94,7 @@ export const getVectorStoreProviderFields = (t: TFunction): Record<string, Vecto
name: "vertex_collection_id",
label: t("vectorStoreProviders.vertexAiSearch.vertexCollectionIdLabel"),
tooltip: t("vectorStoreProviders.vertexAiSearch.vertexCollectionIdTooltip"),
placeholder: "e.g. my-custom-collection",
placeholder: t("vectorStoreProviders.vertexAiSearch.vertexCollectionIdPlaceholder"),
required: false,
type: "text",
},
@ -102,7 +102,7 @@ export const getVectorStoreProviderFields = (t: TFunction): Record<string, Vecto
name: "vertex_engine_id",
label: t("vectorStoreProviders.vertexAiSearch.vertexEngineIdLabel"),
tooltip: t("vectorStoreProviders.vertexAiSearch.vertexEngineIdTooltip"),
placeholder: "e.g. my-search-app_1234567890",
placeholder: t("vectorStoreProviders.vertexAiSearch.vertexEngineIdPlaceholder"),
required: false,
type: "text",
},
@ -140,7 +140,7 @@ export const getVectorStoreProviderFields = (t: TFunction): Record<string, Vecto
name: "api_key",
label: t("vectorStoreProviders.milvus.apiKeyLabel"),
tooltip: t("vectorStoreProviders.milvus.apiKeyTooltip"),
placeholder: "username:password or api key",
placeholder: t("vectorStoreProviders.milvus.apiKeyPlaceholder"),
required: true,
type: "password",
},

View file

@ -479,6 +479,7 @@ function OutputMessage({ output }: { output: RealtimeOutputItem }) {
}
function TokenBreakdown({ label, details }: { label: string; details: Record<string, any> }) {
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<str
return (
<div style={{ marginTop: 4 }}>
<Text type="secondary" style={{ fontSize: 10, letterSpacing: "0.5px", textTransform: "uppercase" }}>
{label} Token Breakdown
{label} {t("viewLogs.realtimePrettyView.tokenBreakdownSuffix")}
</Text>
<div
style={{

View file

@ -282,7 +282,9 @@
"manageExisting": "Manage Existing Aliases",
"noAliases": "No aliases added yet. Add a new alias above.",
"configExample": "Configuration Example",
"configExampleDesc": "Here's how your current aliases would look in the config:"
"configExampleDesc": "Here's how your current aliases would look in the config:",
"aliasNamePlaceholder": "e.g., gpt-4o",
"selectTargetModelPlaceholder": "Select target model"
},
"modelSelector": {
"placeholder": "Select a Model",
@ -1202,7 +1204,8 @@
"authorEmailRule": "Please enter a valid email",
"authorEmailTooltip": "Contact email for the skill author",
"adding": "Adding...",
"addSkill": "Add Skill"
"addSkill": "Add Skill",
"authorEmailPlaceholder": "author@example.com"
},
"pluginTable": {
"copiedToClipboard": "Copied to clipboard!",
@ -1863,7 +1866,9 @@
"selectValue": "Select {{key}} value",
"selectCategoryPlaceholder": "Select category to configure",
"selectCategoryHint": "Select a category to add threshold configuration",
"fieldRequired": "{{fieldKey}} is required"
"fieldRequired": "{{fieldKey}} is required",
"boolTrue": "True",
"boolFalse": "False"
},
"guardrailProviderFields": {
"loadFailed": "Failed to load provider parameters",
@ -2941,7 +2946,8 @@
"turnCount_one": "{{count}} turn",
"turnCount_other": "{{count}} turns",
"inputTokenBreakdown": "Input Token Breakdown",
"outputTokenBreakdown": "Output Token Breakdown"
"outputTokenBreakdown": "Output Token Breakdown",
"tokenBreakdownSuffix": "Token Breakdown"
},
"sectionHeader": {
"labelInput": "Input",
@ -3897,7 +3903,23 @@
"awsSigv4ViewDocs": "View docs",
"awsRegionLabel": "AWS Region",
"awsRegionTooltip": "AWS region for SigV4 signing (e.g., us-east-1)",
"awsRegionPlaceholder": "us-east-1 (leave blank to keep existing)"
"awsRegionPlaceholder": "us-east-1 (leave blank to keep existing)",
"stdioCommandPlaceholder": "e.g., npx",
"awsServiceNameLabel": "AWS Service Name",
"awsServiceNameTooltip": "AWS service name for SigV4 signing. Defaults to 'bedrock-agentcore'.",
"awsServiceNamePlaceholder": "bedrock-agentcore (leave blank to keep existing)",
"awsAccessKeyIdLabel": "AWS Access Key ID",
"awsAccessKeyIdTooltip": "Optional. If not provided, falls back to the boto3 credential chain (IAM role, env vars, etc.).",
"awsSecretAccessKeyLabel": "AWS Secret Access Key",
"awsSecretAccessKeyTooltip": "Optional. Required if AWS Access Key ID is provided.",
"awsSessionTokenLabel": "AWS Session Token",
"awsSessionTokenTooltip": "Optional. Only needed for temporary STS credentials.",
"awsRoleArnLabel": "AWS Role ARN",
"awsRoleArnTooltip": "Optional. IAM role ARN to assume via STS before signing. If set, LiteLLM calls sts:AssumeRole to get temporary credentials.",
"awsSessionNameLabel": "AWS Session Name",
"awsSessionNameTooltip": "Optional. Session name for the AssumeRole call — appears in CloudTrail logs. Auto-generated if omitted.",
"leaveBlankPlaceholder": "Leave blank to keep existing",
"saveChanges": "Save Changes"
},
"mcpServerView": {
"backToAllServers": "Back to All Servers",
@ -5167,7 +5189,8 @@
"testPipeline": "Test Pipeline",
"updatePolicy": "Update Policy",
"savePolicy": "Save Policy",
"addDescriptionPlaceholder": "Add a description (optional)..."
"addDescriptionPlaceholder": "Add a description (optional)...",
"durationMs": "({{ms}}ms)"
},
"policyInfo": {
"notFound": "Policy not found",
@ -5913,7 +5936,9 @@
"vertexCollectionIdLabel": "Collection ID (optional)",
"vertexCollectionIdTooltip": "Discovery Engine collection ID. Leave blank to use the default collection.",
"vertexEngineIdLabel": "Engine ID (optional)",
"vertexEngineIdTooltip": "Search app (engine) ID. Required for website, healthcare, and connector-based data stores (Workspace, Slack, Jira, etc.) because these sources route search through an engine. Leave blank to query the data store directly."
"vertexEngineIdTooltip": "Search app (engine) ID. Required for website, healthcare, and connector-based data stores (Workspace, Slack, Jira, etc.) because these sources route search through an engine. Leave blank to query the data store directly.",
"vertexCollectionIdPlaceholder": "e.g. my-custom-collection",
"vertexEngineIdPlaceholder": "e.g. my-search-app_1234567890"
},
"openai": {
"apiKeyLabel": "API Key",
@ -5931,7 +5956,8 @@
"apiBaseLabel": "API Base",
"apiBaseTooltip": "Enter your Milvus endpoint (e.g., https://your-milvus-endpoint.com/)",
"embeddingModelLabel": "Embedding Model",
"embeddingModelTooltip": "Select the embedding model to use"
"embeddingModelTooltip": "Select the embedding model to use",
"apiKeyPlaceholder": "username:password or api key"
},
"s3Vectors": {
"vectorBucketNameLabel": "Vector Bucket Name",
@ -6217,7 +6243,9 @@
"nextButton": "Next →",
"createAgentButton": "Create Agent →",
"creatingButton": "Creating...",
"credentialFieldRequired": "Please enter {{label}}"
"credentialFieldRequired": "Please enter {{label}}",
"agentTypeSettings": "{{agentType}} Settings",
"agentLogoAlt": "Agent"
},
"agentCard": {
"noDescription": "No description",
@ -6861,7 +6889,8 @@
"selectAtLeastOne": "Please select at least one MCP server to make public",
"successCount_one": "Successfully made {{count}} MCP server public!",
"successCount_other": "Successfully made {{count}} MCP servers public!",
"failedToMakePublic": "Failed to make MCP servers public. Please try again."
"failedToMakePublic": "Failed to make MCP servers public. Please try again.",
"warningLabel": "Warning:"
},
"makeModelPublicForm": {
"modalTitle": "Make Models Public",
@ -8628,6 +8657,7 @@
"passwordRequired": "password required to sign up",
"passwordHelpReset": "Enter your new password",
"passwordHelpSignup": "Create a password for your account"
}
},
"loading": "Loading..."
}
}

View file

@ -282,7 +282,9 @@
"manageExisting": "管理现有别名",
"noAliases": "暂无别名。请在上方添加新别名。",
"configExample": "配置示例",
"configExampleDesc": "以下是您当前别名在配置中的样子:"
"configExampleDesc": "以下是您当前别名在配置中的样子:",
"aliasNamePlaceholder": "例如:gpt-4o",
"selectTargetModelPlaceholder": "选择目标模型"
},
"modelSelector": {
"placeholder": "选择模型",
@ -1202,7 +1204,8 @@
"authorEmailRule": "请输入有效的邮箱地址",
"authorEmailTooltip": "技能作者的联系邮箱",
"adding": "添加中...",
"addSkill": "添加技能"
"addSkill": "添加技能",
"authorEmailPlaceholder": "author@example.com"
},
"pluginTable": {
"copiedToClipboard": "已复制到剪贴板!",
@ -1863,7 +1866,9 @@
"selectValue": "选择 {{key}} 的值",
"selectCategoryPlaceholder": "选择要配置的类别",
"selectCategoryHint": "选择类别以添加阈值配置",
"fieldRequired": "{{fieldKey}} 为必填项"
"fieldRequired": "{{fieldKey}} 为必填项",
"boolTrue": "True",
"boolFalse": "False"
},
"guardrailProviderFields": {
"loadFailed": "加载提供商参数失败",
@ -2941,7 +2946,8 @@
"turnCount_one": "{{count}} 轮",
"turnCount_other": "{{count}} 轮",
"inputTokenBreakdown": "输入 Token 明细",
"outputTokenBreakdown": "输出 Token 明细"
"outputTokenBreakdown": "输出 Token 明细",
"tokenBreakdownSuffix": "Token 分布"
},
"sectionHeader": {
"labelInput": "输入",
@ -3897,7 +3903,23 @@
"awsSigv4ViewDocs": "查看文档",
"awsRegionLabel": "AWS 区域",
"awsRegionTooltip": "用于 SigV4 签名的 AWS 区域(例如 us-east-1)",
"awsRegionPlaceholder": "us-east-1(留空则保留现有值)"
"awsRegionPlaceholder": "us-east-1(留空则保留现有值)",
"stdioCommandPlaceholder": "例如:npx",
"awsServiceNameLabel": "AWS 服务名称",
"awsServiceNameTooltip": "用于 SigV4 签名的 AWS 服务名称。默认为 'bedrock-agentcore'。",
"awsServiceNamePlaceholder": "bedrock-agentcore(留空保留现有值)",
"awsAccessKeyIdLabel": "AWS Access Key ID",
"awsAccessKeyIdTooltip": "可选。若未提供,则回退到 boto3 凭证链(IAM 角色、环境变量等)。",
"awsSecretAccessKeyLabel": "AWS Secret Access Key",
"awsSecretAccessKeyTooltip": "可选。若提供了 AWS Access Key ID,则此项必填。",
"awsSessionTokenLabel": "AWS Session Token",
"awsSessionTokenTooltip": "可选。仅在使用临时 STS 凭证时需要。",
"awsRoleArnLabel": "AWS Role ARN",
"awsRoleArnTooltip": "可选。签名前通过 STS 代入的 IAM 角色 ARN。若设置,LiteLLM 将调用 sts:AssumeRole 获取临时凭证。",
"awsSessionNameLabel": "AWS 会话名称",
"awsSessionNameTooltip": "可选。AssumeRole 调用的会话名称,会出现在 CloudTrail 日志中。若省略则自动生成。",
"leaveBlankPlaceholder": "留空保留现有值",
"saveChanges": "保存更改"
},
"mcpServerView": {
"backToAllServers": "返回所有服务器",
@ -5167,7 +5189,8 @@
"testPipeline": "测试流水线",
"updatePolicy": "更新策略",
"savePolicy": "保存策略",
"addDescriptionPlaceholder": "添加描述(可选)..."
"addDescriptionPlaceholder": "添加描述(可选)...",
"durationMs": "({{ms}}ms)"
},
"policyInfo": {
"notFound": "未找到策略",
@ -5913,7 +5936,9 @@
"vertexCollectionIdLabel": "集合 ID(可选)",
"vertexCollectionIdTooltip": "Discovery Engine 集合 ID。留空则使用默认集合。",
"vertexEngineIdLabel": "引擎 ID(可选)",
"vertexEngineIdTooltip": "搜索应用(引擎)ID。对于网站、医疗和基于连接器的数据存储(Workspace、Slack、Jira 等)为必填,因为这些来源通过引擎路由搜索。留空则直接查询数据存储。"
"vertexEngineIdTooltip": "搜索应用(引擎)ID。对于网站、医疗和基于连接器的数据存储(Workspace、Slack、Jira 等)为必填,因为这些来源通过引擎路由搜索。留空则直接查询数据存储。",
"vertexCollectionIdPlaceholder": "例如:my-custom-collection",
"vertexEngineIdPlaceholder": "例如:my-search-app_1234567890"
},
"openai": {
"apiKeyLabel": "API 密钥",
@ -5931,7 +5956,8 @@
"apiBaseLabel": "API 基础 URL",
"apiBaseTooltip": "输入您的 Milvus 端点(例如:https://your-milvus-endpoint.com/)",
"embeddingModelLabel": "嵌入模型",
"embeddingModelTooltip": "选择要使用的嵌入模型"
"embeddingModelTooltip": "选择要使用的嵌入模型",
"apiKeyPlaceholder": "用户名:密码 或 API 密钥"
},
"s3Vectors": {
"vectorBucketNameLabel": "向量存储桶名称",
@ -6217,7 +6243,9 @@
"nextButton": "下一步 →",
"createAgentButton": "创建 Agent →",
"creatingButton": "创建中...",
"credentialFieldRequired": "请输入 {{label}}"
"credentialFieldRequired": "请输入 {{label}}",
"agentTypeSettings": "{{agentType}} 设置",
"agentLogoAlt": "Agent"
},
"agentCard": {
"noDescription": "无描述",
@ -6861,7 +6889,8 @@
"selectAtLeastOne": "请至少选择一个 MCP 服务器以设为公开",
"successCount_one": "成功将 {{count}} 个 MCP 服务器设为公开!",
"successCount_other": "成功将 {{count}} 个 MCP 服务器设为公开!",
"failedToMakePublic": "将 MCP 服务器设为公开失败,请重试。"
"failedToMakePublic": "将 MCP 服务器设为公开失败,请重试。",
"warningLabel": "警告:"
},
"makeModelPublicForm": {
"modalTitle": "将模型设为公开",
@ -8628,6 +8657,7 @@
"passwordRequired": "注册时需要填写密码",
"passwordHelpReset": "请输入新密码",
"passwordHelpSignup": "为您的账户创建密码"
}
},
"loading": "加载中..."
}
}