mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-04 02:31:27 +00:00
fix(ui): i18n audit repair round 1
This commit is contained in:
parent
6265b18010
commit
2ed0c0027b
13 changed files with 151 additions and 72 deletions
|
|
@ -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>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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} />
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 && (
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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={{
|
||||
|
|
|
|||
|
|
@ -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..."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": "加载中..."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue