fix(i18n): add missing config.json locale files (#108)

* fix(i18n): add missing config.json locale files

The config namespace was registered in i18n/index.ts but the actual
JSON files were never created, breaking the UI Docker build (tsc error).

Also fix .gitignore: config.json → /config.json so only the root
gateway config is ignored, not the i18n locale files.

Closes #107

* feat(ui): replace language cycle button with dropdown select

Users can now pick a language directly from a dropdown instead of
cycling through all options on each click.

* fix(i18n): keep "Subagent" in Vietnamese translations

"Agent con" and "sinh sản" sound unnatural; keep the English term.

* chore: align .dockerignore config.json pattern with .gitignore
This commit is contained in:
Duc Nguyen authored and GitHub committed 2026-03-10 09:50:52 +07:00
1 parent d43f4a42ad
commit 7436d6b646
6 files changed
+826 -14

No files matched your search

+1 -1
View File
@@ -5,7 +5,7 @@
*.md
docs/
tests/
config.json
/config.json
openclaw-go
*.exe
tmp/
+1 -1
View File
@@ -19,7 +19,7 @@ app
browser-poc
openclaw-go
goclaw
config.json
/config.json
prompt.md
*.bk.*
+14 -12
View File
@@ -28,10 +28,8 @@ export function Topbar() {
? () => setMobileSidebarOpen(true)
: toggleSidebar;
const cycleLanguage = () => {
const idx = SUPPORTED_LANGUAGES.indexOf(language);
const next = SUPPORTED_LANGUAGES[(idx + 1) % SUPPORTED_LANGUAGES.length] as Language;
setLanguage(next);
const handleLanguageChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
setLanguage(e.target.value as Language);
};
return (
@@ -68,14 +66,18 @@ export function Topbar() {
)}
</button>
<button
onClick={cycleLanguage}
className="cursor-pointer rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-accent-foreground flex items-center gap-1"
title={t("language")}
>
<Globe className="h-4 w-4" />
<span className="text-xs">{LANGUAGE_LABELS[language]}</span>
</button>
<div className="flex items-center gap-1 rounded-md px-2 py-1.5 text-muted-foreground hover:bg-accent hover:text-accent-foreground" title={t("language")}>
<Globe className="h-4 w-4 shrink-0" />
<select
value={language}
onChange={handleLanguageChange}
className="cursor-pointer bg-transparent text-xs outline-none"
>
{SUPPORTED_LANGUAGES.map((lang) => (
<option key={lang} value={lang}>{LANGUAGE_LABELS[lang]}</option>
))}
</select>
</div>
<button
onClick={() => setTheme(isDark ? "light" : "dark")}
+270
View File
@@ -0,0 +1,270 @@
{
"title": "Configuration",
"description": "Manage gateway, agent defaults, tools, and integrations",
"noConfig": "No configuration loaded",
"noConfigDescription": "Could not load the configuration file. The gateway may be unreachable.",
"retry": "Retry",
"warning": "Changes here affect all agents and channels globally. Misconfiguration may break the gateway.",
"save": "Save",
"saving": "Saving...",
"saved": "Saved",
"failedToSave": "Failed to save configuration",
"saveConfig": "Save Config",
"usingGlobalDefaults": "Using global defaults",
"tabs.server": "Server",
"tabs.behavior": "Behavior",
"tabs.aiDefaults": "AI Defaults",
"tabs.quota": "Quota",
"tabs.tools": "Tools",
"tabs.integrations": "Integrations",
"server.title": "Gateway Server",
"server.description": "Network binding, authentication token, and access control",
"gateway.host": "Host",
"gateway.hostTip": "The network interface the gateway listens on. Use 0.0.0.0 to listen on all interfaces.",
"gateway.port": "Port",
"gateway.portTip": "The TCP port the gateway WebSocket and HTTP server binds to.",
"gateway.token": "Auth Token",
"gateway.tokenTip": "Bearer token required for all client connections. Leave empty to disable authentication.",
"gateway.tokenManaged": "Token is managed via environment variable and cannot be edited here.",
"gateway.ownerIds": "Owner IDs",
"gateway.ownerIdsTip": "User IDs granted admin-level access. Separate multiple IDs with Enter.",
"gateway.ownerIdsPlaceholder": "Enter owner ID...",
"gateway.allowedOrigins": "Allowed Origins",
"gateway.allowedOriginsTip": "CORS allowed origins for the HTTP API. Use * to allow all origins.",
"gateway.allowedOriginsPlaceholder": "https://yourdomain.com",
"gateway.toolStatus": "Tool Status Messages",
"gateway.blockReply": "Block on Reply",
"gateway.maxMessageChars": "Max Message Chars",
"gateway.maxMessageCharsTip": "Maximum allowed character count per inbound message. Messages exceeding this limit are rejected.",
"gateway.rateLimitRpm": "Rate Limit (RPM)",
"gateway.rateLimitRpmTip": "Maximum requests per minute per user. Set to 0 to disable rate limiting.",
"gateway.inboundDebounceMs": "Inbound Debounce (ms)",
"gateway.inboundDebounceMsTip": "Delay in milliseconds before processing a new message, to coalesce rapid follow-ups. Set to -1 to disable.",
"gateway.injectionAction": "Injection Detection Action",
"agents.title": "Agent Defaults",
"agents.description": "Default LLM provider, model, and runtime settings applied to all agents unless overridden",
"agents.providerTip": "Default LLM provider used when an agent does not specify one.",
"agents.modelTip": "Default model used when an agent does not specify one.",
"agents.maxTokens": "Max Tokens",
"agents.maxTokensTip": "Maximum tokens the model can generate in a single response.",
"agents.temperature": "Temperature",
"agents.temperatureTip": "Sampling temperature (0-2). Lower values produce more deterministic output.",
"agents.maxToolIterations": "Max Tool Iterations",
"agents.maxToolIterationsTip": "Maximum number of tool-call iterations per agent request.",
"agents.contextWindow": "Context Window",
"agents.contextWindowTip": "Total token budget for the model context window.",
"agents.workspace": "Workspace Path",
"agents.workspaceTip": "Root directory for agent file operations. Per-user subdirectories are created automatically.",
"agents.restrictToWorkspace": "Restrict to Workspace",
"agents.restrictToWorkspaceTip": "Prevent agents from reading or writing files outside the workspace path.",
"agents.intentClassify": "Intent Classification",
"agents.saveError": "Failed to save agent defaults",
"agents.subagents.title": "Subagents",
"agents.subagents.desc": "Sub-agent spawning limits",
"agents.subagents.maxConcurrent": "Max Concurrent",
"agents.subagents.maxConcurrentTip": "Maximum number of sub-agents that can run simultaneously.",
"agents.subagents.maxSpawnDepth": "Max Spawn Depth",
"agents.subagents.maxSpawnDepthTip": "Maximum nesting depth for sub-agent chains.",
"agents.subagents.maxChildrenPerAgent": "Max Children Per Agent",
"agents.subagents.maxChildrenPerAgentTip": "Maximum number of child sub-agents a single agent can spawn.",
"agents.subagents.archiveAfterMin": "Archive After (min)",
"agents.subagents.archiveAfterMinTip": "Minutes of inactivity before a sub-agent session is archived.",
"agents.subagents.modelOverride": "Model Override",
"agents.subagents.modelOverrideTip": "Force all sub-agents to use a specific model. Leave empty to inherit from the parent agent.",
"agents.subagents.modelOverridePlaceholder": "(inherit from agent)",
"agents.memory.title": "Memory",
"agents.memory.desc": "Semantic memory search and embeddings",
"agents.memory.enabled": "Enabled",
"agents.memory.embeddingProvider": "Embedding Provider",
"agents.memory.embeddingModel": "Embedding Model",
"agents.memory.embeddingProviderTip": "Provider used to generate text embeddings for memory storage.",
"agents.memory.embeddingModelTip": "Embedding model name. Leave empty to use the provider default.",
"agents.memory.maxResults": "Max Results",
"agents.memory.maxResultsTip": "Maximum number of memory entries returned per recall query.",
"agents.memory.minScore": "Min Score",
"agents.memory.minScoreTip": "Minimum similarity score (0-1) for a memory entry to be included in results.",
"agents.compaction.title": "Compaction",
"agents.compaction.desc": "Context window compaction settings",
"agents.compaction.reserveTokensFloor": "Reserve Tokens Floor",
"agents.compaction.reserveTokensFloorTip": "Minimum token buffer to reserve for new responses before compacting.",
"agents.compaction.maxHistoryShare": "Max History Share (0-1)",
"agents.compaction.maxHistoryShareTip": "Fraction of the context window that conversation history can occupy.",
"agents.pruning.title": "Context Pruning",
"agents.pruning.desc": "Trim old tool results to free context space",
"agents.pruning.mode": "Mode",
"agents.pruning.keepLastAssistants": "Keep Last Assistants",
"agents.pruning.keepLastAssistantsTip": "Number of recent assistant turns to always preserve during pruning.",
"agents.sandbox.title": "Sandbox",
"agents.sandbox.desc": "Docker sandbox for code execution",
"agents.sandbox.mode": "Mode",
"agents.sandbox.image": "Docker Image",
"agents.sandbox.imageTip": "Docker image used for the sandbox container.",
"agents.sandbox.memoryMb": "Memory (MB)",
"agents.sandbox.memoryMbTip": "Memory limit for the sandbox container in megabytes.",
"agents.sandbox.cpus": "CPUs",
"agents.sandbox.cpusTip": "CPU quota for the sandbox container (e.g. 1.0 = one full core).",
"agents.sandbox.timeoutSec": "Timeout (sec)",
"agents.sandbox.timeoutSecTip": "Maximum execution time in seconds before the sandbox is killed.",
"agents.sandbox.networkEnabled": "Network Enabled",
"behavior.uxTitle": "UX Behavior",
"behavior.uxDescription": "High-impact toggles that change how the gateway interacts with users",
"behavior.toolStatusHint": "Show real-time tool execution status messages to users during agent runs.",
"behavior.toolStatusInfo": "Users will see live updates as the agent reads files, runs commands, and calls APIs.",
"behavior.blockReplyHint": "Wait for the agent to finish before sending intermediate status updates.",
"behavior.blockReplyInfo": "Only the final response is sent. Intermediate tool status messages are suppressed.",
"behavior.intentClassifyHint": "Classify user intent before routing to reduce unnecessary agent invocations.",
"behavior.intentClassifyInfo": "Agent will only be invoked when the classifier detects actionable intent.",
"behavior.rateLimitTitle": "Rate Limiting",
"behavior.rateLimitDescription": "Inbound message size limits and per-user request throttling",
"behavior.sessionsTitle": "Session Scoping",
"behavior.sessionsDescription": "Controls how conversation context is partitioned across users and channels",
"behavior.securityTitle": "Input Security",
"behavior.securityDescription": "Prompt injection detection and credential scrubbing to protect the gateway",
"behavior.injectionActionHint": "What to do when a prompt injection attempt is detected in an inbound message.",
"behavior.injectionBlockInfo": "All messages flagged as injection attempts will be blocked and the user will be notified.",
"behavior.injectionOffInfo": "Injection detection is disabled. Malicious prompts will not be filtered.",
"behavior.scrubCredentialsHint": "Automatically redact API keys, tokens, and passwords found in tool output before returning to the agent.",
"behavior.scrubCredentialsInfo": "Credential patterns in tool responses are masked before the agent sees them.",
"behavior.scrubCredentialsOffInfo": "Credential scrubbing is disabled. Secrets in tool output may be exposed to the agent.",
"sessions.scope": "Session Scope",
"sessions.scopeTip": "Determines how sessions are partitioned. 'Per Sender' gives each user a separate session; 'Global' shares one session across all users.",
"sessions.dmScope": "DM Scope",
"sessions.dmScopeTip": "How direct-message sessions are keyed. 'Per Channel Peer' is the recommended default.",
"quota.title": "Usage Quota",
"quota.description": "Per-user message quota limits with optional per-provider, channel, and group overrides",
"quota.enabled": "Enable Quotas",
"quota.enabledTip": "When enabled, users are limited to the message counts defined below.",
"quota.defaultLimits": "Default Limits",
"quota.defaultLimitsTip": "Fallback quota applied to all users not covered by a specific override.",
"quota.hour": "Per Hour",
"quota.hourTip": "Maximum messages allowed per hour.",
"quota.day": "Per Day",
"quota.dayTip": "Maximum messages allowed per day.",
"quota.week": "Per Week",
"quota.weekTip": "Maximum messages allowed per week.",
"quota.keyLabel": "Key",
"quota.addOverride": "Add Override",
"quota.allOptionsAdded": "All options already added",
"quota.providerOverrides": "Provider Overrides",
"quota.providerOverridesTip": "Custom quota limits per LLM provider. Overrides the default when users interact through a specific provider.",
"quota.channelOverrides": "Channel Overrides",
"quota.channelOverridesTip": "Custom quota limits per channel type (e.g. telegram, discord).",
"quota.groupOverrides": "Group Overrides",
"quota.groupOverridesTip": "Custom quota limits for specific group chats.",
"quota.selectProvider": "Select provider",
"quota.selectChannel": "Select channel",
"quota.selectGroup": "Select group",
"tools.title": "Tool Profile",
"tools.description": "Default tool availability and per-hour call rate limit for all agents",
"tools.profile": "Profile",
"tools.profileTip": "Predefined tool set. 'Minimal' exposes only safe read-only tools; 'Full' enables all tools.",
"tools.profilePlaceholder": "Select profile...",
"tools.rateLimitPerHour": "Rate Limit (per hour)",
"tools.rateLimitPerHourTip": "Maximum tool calls allowed per agent per hour. Set to 0 to disable.",
"tools.allow": "Allow",
"tools.allowTip": "Explicitly allow additional tools not included in the selected profile.",
"tools.allowPlaceholder": "Select tools to allow...",
"tools.deny": "Deny",
"tools.denyTip": "Explicitly block tools even if included in the selected profile.",
"tools.denyPlaceholder": "Select tools to deny...",
"tools.alsoAllow": "Also Allow",
"tools.alsoAllowTip": "Additional tools to allow on top of the profile. Useful when using a restrictive profile.",
"tools.alsoAllowPlaceholder": "Select additional tools...",
"tools.execApproval": "Command Execution",
"tools.execSecurity": "Security Mode",
"tools.execSecurityTip": "Controls which shell commands agents are permitted to run. 'Allowlist' restricts to approved patterns.",
"tools.execAskMode": "Ask Mode",
"tools.execAskModeTip": "When to prompt the user for approval before executing a command.",
"tools.execAllowlistLabel": "Allowed Commands (one pattern per line)",
"tools.webSearch": "Web Search",
"tools.webFetch": "Web fetch and browser automation",
"tools.maxResults": "Max Results",
"tools.webFetchPolicy": "Web Fetch Policy",
"tools.webFetchPolicyTip": "Controls which URLs the agent can fetch. 'Allowlist' restricts to approved domains only.",
"tools.allowedDomains": "Allowed Domains",
"tools.blockedDomains": "Blocked Domains",
"tools.blockedDomainsTip": "Domains always blocked regardless of policy. One entry per line, supports wildcards (*.example.com).",
"tools.browser": "Browser Automation",
"tools.browserEnabled": "Enabled",
"tools.browserHeadless": "Headless",
"tools.scrubCredentials": "Scrub Credentials",
"tts.title": "Text-to-Speech",
"tts.configured": "Configured",
"tts.disabled": "Disabled",
"tts.providerInfo": "Provider: {{provider}} — Auto: {{auto}}",
"tts.noProvider": "No TTS provider configured.",
"tts.manageLink": "Manage TTS settings",
"cron.title": "Cron Scheduler",
"cron.description": "Retry behaviour for failed scheduled tasks",
"cron.maxRetries": "Max Retries",
"cron.maxRetriesTip": "Maximum number of retry attempts for a failed cron task.",
"cron.baseDelay": "Base Delay",
"cron.baseDelayTip": "Initial backoff delay between retries (e.g. 2s, 500ms).",
"cron.maxDelay": "Max Delay",
"cron.maxDelayTip": "Maximum backoff delay between retries (e.g. 30s, 5m).",
"telemetry.title": "Telemetry (OpenTelemetry)",
"telemetry.description": "Export traces and metrics to an OpenTelemetry-compatible backend",
"telemetry.enabled": "Enabled",
"telemetry.enabledTip": "Enable OpenTelemetry trace export. Requires the 'otel' build tag.",
"telemetry.endpoint": "Endpoint",
"telemetry.endpointTip": "OTLP exporter endpoint (host:port). For gRPC default is 4317, HTTP is 4318.",
"telemetry.protocol": "Protocol",
"telemetry.protocolTip": "Transport protocol for the OTLP exporter.",
"telemetry.serviceName": "Service Name",
"telemetry.serviceNameTip": "Service name reported in traces. Useful for filtering in the observability backend.",
"telemetry.insecure": "Insecure",
"telemetry.insecureTip": "Disable TLS for the OTLP connection. Only use in local/dev environments.",
"telemetry.headers": "Export Headers",
"telemetry.headersTip": "Additional HTTP headers sent with each OTLP export request (e.g. API keys for hosted backends).",
"telemetry.headerKeyPlaceholder": "Header name",
"telemetry.headerValuePlaceholder": "Header value",
"telemetry.addHeader": "Add Header",
"bindings.title": "Agent Bindings",
"bindings.description": "Route specific channels, peers, or accounts to a designated agent",
"bindings.add": "Add Binding",
"bindings.noBindings": "No bindings configured. All messages are routed to the default agent.",
"bindings.agentId": "Agent ID",
"bindings.channel": "Channel",
"bindings.peerKind": "Peer Kind",
"bindings.peerId": "Peer ID",
"providers.title": "Provider API Keys",
"providers.description": "Override API keys and base URLs for configured LLM providers",
"providers.noProviders": "No providers found in the configuration file.",
"providers.apiKey": "API Key",
"providers.apiBaseUrl": "Base URL",
"providers.apiBaseUrlPlaceholder": "https://api.example.com/v1",
"providers.managedVia": "Managed via {{envKey}} environment variable.",
"channels.title": "Channel Settings",
"channels.description": "Configure built-in channel integrations (tokens, policies, streaming)",
"channels.noChannels": "No channels found in the configuration file.",
"channels.enabled": "Enabled",
"channels.token": "Token / Secret",
"channels.managedVia": "Managed via {{envKey}} environment variable.",
"channels.dmPolicy": "DM Policy",
"channels.groupPolicy": "Group Policy",
"channels.allowFrom": "Allow From",
"channels.allowFromPlaceholder": "user_id_1, user_id_2, ...",
"channels.dmStreaming": "DM Streaming",
"channels.groupStreaming": "Group Streaming",
"channels.reactionLevel": "Reaction Level",
"channels.connectionMode": "Connection Mode"
}
+270
View File
@@ -0,0 +1,270 @@
{
"title": "Cấu hình",
"description": "Quản lý gateway, mặc định agent, công cụ và tích hợp",
"noConfig": "Chưa tải được cấu hình",
"noConfigDescription": "Không thể tải tệp cấu hình. Gateway có thể không khả dụng.",
"retry": "Thử lại",
"warning": "Thay đổi ở đây ảnh hưởng đến toàn bộ agent và kênh. Cấu hình sai có thể làm hỏng gateway.",
"save": "Lưu",
"saving": "Đang lưu...",
"saved": "Đã lưu",
"failedToSave": "Lưu cấu hình thất bại",
"saveConfig": "Lưu cấu hình",
"usingGlobalDefaults": "Đang dùng cài đặt mặc định",
"tabs.server": "Máy chủ",
"tabs.behavior": "Hành vi",
"tabs.aiDefaults": "Mặc định AI",
"tabs.quota": "Hạn mức",
"tabs.tools": "Công cụ",
"tabs.integrations": "Tích hợp",
"server.title": "Máy chủ Gateway",
"server.description": "Cài đặt mạng, token xác thực và kiểm soát truy cập",
"gateway.host": "Host",
"gateway.hostTip": "Giao diện mạng mà gateway lắng nghe. Dùng 0.0.0.0 để lắng nghe trên tất cả giao diện.",
"gateway.port": "Cổng",
"gateway.portTip": "Cổng TCP mà máy chủ WebSocket và HTTP của gateway ràng buộc.",
"gateway.token": "Token xác thực",
"gateway.tokenTip": "Token Bearer bắt buộc cho tất cả kết nối client. Để trống để tắt xác thực.",
"gateway.tokenManaged": "Token được quản lý qua biến môi trường và không thể chỉnh sửa tại đây.",
"gateway.ownerIds": "ID chủ sở hữu",
"gateway.ownerIdsTip": "ID người dùng được cấp quyền quản trị. Nhấn Enter để thêm nhiều ID.",
"gateway.ownerIdsPlaceholder": "Nhập ID chủ sở hữu...",
"gateway.allowedOrigins": "Nguồn gốc được phép",
"gateway.allowedOriginsTip": "Nguồn gốc CORS được phép cho HTTP API. Dùng * để cho phép mọi nguồn gốc.",
"gateway.allowedOriginsPlaceholder": "https://yourdomain.com",
"gateway.toolStatus": "Thông báo trạng thái công cụ",
"gateway.blockReply": "Chặn khi phản hồi",
"gateway.maxMessageChars": "Ký tự tối đa mỗi tin",
"gateway.maxMessageCharsTip": "Số ký tự tối đa được phép trong mỗi tin nhắn đến. Tin nhắn vượt quá giới hạn sẽ bị từ chối.",
"gateway.rateLimitRpm": "Giới hạn tốc độ (RPM)",
"gateway.rateLimitRpmTip": "Số yêu cầu tối đa mỗi phút mỗi người dùng. Đặt 0 để tắt giới hạn.",
"gateway.inboundDebounceMs": "Debounce đầu vào (ms)",
"gateway.inboundDebounceMsTip": "Độ trễ tính bằng mili giây trước khi xử lý tin nhắn mới, để gộp các tin nhắn nhanh liên tiếp. Đặt -1 để tắt.",
"gateway.injectionAction": "Hành động phát hiện injection",
"agents.title": "Mặc định agent",
"agents.description": "Provider LLM, model và cài đặt runtime mặc định áp dụng cho tất cả agent trừ khi được ghi đè",
"agents.providerTip": "Provider LLM mặc định dùng khi agent không chỉ định provider.",
"agents.modelTip": "Model mặc định dùng khi agent không chỉ định model.",
"agents.maxTokens": "Token tối đa",
"agents.maxTokensTip": "Số token tối đa model có thể tạo ra trong một phản hồi.",
"agents.temperature": "Nhiệt độ",
"agents.temperatureTip": "Nhiệt độ lấy mẫu (0-2). Giá trị thấp hơn tạo đầu ra xác định hơn.",
"agents.maxToolIterations": "Số lần lặp công cụ tối đa",
"agents.maxToolIterationsTip": "Số lần lặp gọi công cụ tối đa cho mỗi yêu cầu agent.",
"agents.contextWindow": "Cửa sổ ngữ cảnh",
"agents.contextWindowTip": "Tổng ngân sách token cho cửa sổ ngữ cảnh model.",
"agents.workspace": "Đường dẫn không gian làm việc",
"agents.workspaceTip": "Thư mục gốc cho các thao tác tệp của agent. Thư mục con theo người dùng được tạo tự động.",
"agents.restrictToWorkspace": "Giới hạn trong không gian làm việc",
"agents.restrictToWorkspaceTip": "Ngăn agent đọc hoặc ghi tệp ngoài đường dẫn không gian làm việc.",
"agents.intentClassify": "Phân loại ý định",
"agents.saveError": "Lưu mặc định agent thất bại",
"agents.subagents.title": "Subagent",
"agents.subagents.desc": "Giới hạn tạo subagent",
"agents.subagents.maxConcurrent": "Tối đa đồng thời",
"agents.subagents.maxConcurrentTip": "Số subagent tối đa có thể chạy đồng thời.",
"agents.subagents.maxSpawnDepth": "Độ sâu tạo tối đa",
"agents.subagents.maxSpawnDepthTip": "Độ sâu lồng nhau tối đa cho chuỗi subagent.",
"agents.subagents.maxChildrenPerAgent": "Subagent tối đa mỗi agent",
"agents.subagents.maxChildrenPerAgentTip": "Số subagent tối đa mà một agent có thể tạo.",
"agents.subagents.archiveAfterMin": "Lưu trữ sau (phút)",
"agents.subagents.archiveAfterMinTip": "Số phút không hoạt động trước khi phiên subagent được lưu trữ.",
"agents.subagents.modelOverride": "Ghi đè model",
"agents.subagents.modelOverrideTip": "Buộc tất cả subagent dùng model cụ thể. Để trống để kế thừa từ agent cha.",
"agents.subagents.modelOverridePlaceholder": "(kế thừa từ agent)",
"agents.memory.title": "Bộ nhớ",
"agents.memory.desc": "Tìm kiếm bộ nhớ ngữ nghĩa và nhúng",
"agents.memory.enabled": "Đã bật",
"agents.memory.embeddingProvider": "Provider nhúng",
"agents.memory.embeddingModel": "Model nhúng",
"agents.memory.embeddingProviderTip": "Provider dùng để tạo nhúng văn bản cho lưu trữ bộ nhớ.",
"agents.memory.embeddingModelTip": "Tên model nhúng. Để trống để dùng mặc định của provider.",
"agents.memory.maxResults": "Kết quả tối đa",
"agents.memory.maxResultsTip": "Số mục bộ nhớ tối đa trả về cho mỗi truy vấn.",
"agents.memory.minScore": "Điểm tối thiểu",
"agents.memory.minScoreTip": "Điểm tương đồng tối thiểu (0-1) để đưa mục bộ nhớ vào kết quả.",
"agents.compaction.title": "Nén ngữ cảnh",
"agents.compaction.desc": "Cài đặt nén cửa sổ ngữ cảnh",
"agents.compaction.reserveTokensFloor": "Sàn token dự trữ",
"agents.compaction.reserveTokensFloorTip": "Bộ đệm token tối thiểu cần dự trữ cho phản hồi mới trước khi nén.",
"agents.compaction.maxHistoryShare": "Phần lịch sử tối đa (0-1)",
"agents.compaction.maxHistoryShareTip": "Tỷ lệ cửa sổ ngữ cảnh mà lịch sử cuộc trò chuyện có thể chiếm.",
"agents.pruning.title": "Cắt bớt ngữ cảnh",
"agents.pruning.desc": "Cắt bỏ kết quả công cụ cũ để giải phóng không gian ngữ cảnh",
"agents.pruning.mode": "Chế độ",
"agents.pruning.keepLastAssistants": "Giữ trợ lý cuối",
"agents.pruning.keepLastAssistantsTip": "Số lượt trợ lý gần nhất luôn được giữ lại trong quá trình cắt bớt.",
"agents.sandbox.title": "Hộp cát",
"agents.sandbox.desc": "Hộp cát Docker để thực thi code",
"agents.sandbox.mode": "Chế độ",
"agents.sandbox.image": "Hình ảnh Docker",
"agents.sandbox.imageTip": "Hình ảnh Docker dùng cho container hộp cát.",
"agents.sandbox.memoryMb": "Bộ nhớ (MB)",
"agents.sandbox.memoryMbTip": "Giới hạn bộ nhớ cho container hộp cát tính bằng megabyte.",
"agents.sandbox.cpus": "CPU",
"agents.sandbox.cpusTip": "Hạn mức CPU cho container hộp cát (vd: 1.0 = một lõi đầy đủ).",
"agents.sandbox.timeoutSec": "Hết giờ (giây)",
"agents.sandbox.timeoutSecTip": "Thời gian thực thi tối đa tính bằng giây trước khi hộp cát bị dừng.",
"agents.sandbox.networkEnabled": "Bật mạng",
"behavior.uxTitle": "Hành vi giao diện",
"behavior.uxDescription": "Các công tắc có tác động lớn thay đổi cách gateway tương tác với người dùng",
"behavior.toolStatusHint": "Hiện thông báo trạng thái thực thi công cụ theo thời gian thực cho người dùng trong quá trình chạy agent.",
"behavior.toolStatusInfo": "Người dùng sẽ thấy cập nhật trực tiếp khi agent đọc tệp, chạy lệnh và gọi API.",
"behavior.blockReplyHint": "Chờ agent hoàn thành trước khi gửi các cập nhật trạng thái trung gian.",
"behavior.blockReplyInfo": "Chỉ phản hồi cuối được gửi. Thông báo trạng thái công cụ trung gian bị ẩn.",
"behavior.intentClassifyHint": "Phân loại ý định người dùng trước khi định tuyến để giảm các lần gọi agent không cần thiết.",
"behavior.intentClassifyInfo": "Agent chỉ được gọi khi bộ phân loại phát hiện ý định có thể thực hiện.",
"behavior.rateLimitTitle": "Giới hạn tốc độ",
"behavior.rateLimitDescription": "Giới hạn kích thước tin nhắn đến và kiểm soát tốc độ yêu cầu mỗi người dùng",
"behavior.sessionsTitle": "Phạm vi phiên",
"behavior.sessionsDescription": "Kiểm soát cách phân vùng ngữ cảnh cuộc trò chuyện theo người dùng và kênh",
"behavior.securityTitle": "Bảo mật đầu vào",
"behavior.securityDescription": "Phát hiện injection prompt và ẩn thông tin xác thực để bảo vệ gateway",
"behavior.injectionActionHint": "Hành động thực hiện khi phát hiện nỗ lực injection prompt trong tin nhắn đến.",
"behavior.injectionBlockInfo": "Tất cả tin nhắn bị đánh dấu là injection sẽ bị chặn và người dùng sẽ được thông báo.",
"behavior.injectionOffInfo": "Tính năng phát hiện injection bị tắt. Các prompt độc hại sẽ không được lọc.",
"behavior.scrubCredentialsHint": "Tự động ẩn khóa API, token và mật khẩu tìm thấy trong đầu ra công cụ trước khi trả về agent.",
"behavior.scrubCredentialsInfo": "Các mẫu thông tin xác thực trong phản hồi công cụ được che đi trước khi agent nhìn thấy.",
"behavior.scrubCredentialsOffInfo": "Tính năng ẩn thông tin xác thực bị tắt. Bí mật trong đầu ra công cụ có thể bị lộ với agent.",
"sessions.scope": "Phạm vi phiên",
"sessions.scopeTip": "Xác định cách phân vùng phiên. 'Theo người gửi' cho mỗi người dùng một phiên riêng; 'Toàn cục' chia sẻ một phiên cho tất cả người dùng.",
"sessions.dmScope": "Phạm vi tin nhắn riêng",
"sessions.dmScopeTip": "Cách đặt khóa phiên tin nhắn riêng. 'Theo kênh và đối tác' là mặc định được khuyến nghị.",
"quota.title": "Hạn mức sử dụng",
"quota.description": "Giới hạn hạn mức tin nhắn mỗi người dùng với tùy chọn ghi đè theo provider, kênh và nhóm",
"quota.enabled": "Bật hạn mức",
"quota.enabledTip": "Khi được bật, người dùng bị giới hạn theo số lượng tin nhắn được định nghĩa bên dưới.",
"quota.defaultLimits": "Giới hạn mặc định",
"quota.defaultLimitsTip": "Hạn mức dự phòng áp dụng cho tất cả người dùng không có ghi đè cụ thể.",
"quota.hour": "Mỗi giờ",
"quota.hourTip": "Số tin nhắn tối đa được phép mỗi giờ.",
"quota.day": "Mỗi ngày",
"quota.dayTip": "Số tin nhắn tối đa được phép mỗi ngày.",
"quota.week": "Mỗi tuần",
"quota.weekTip": "Số tin nhắn tối đa được phép mỗi tuần.",
"quota.keyLabel": "Khóa",
"quota.addOverride": "Thêm ghi đè",
"quota.allOptionsAdded": "Đã thêm tất cả tùy chọn",
"quota.providerOverrides": "Ghi đè theo provider",
"quota.providerOverridesTip": "Giới hạn hạn mức tùy chỉnh theo provider LLM. Ghi đè mặc định khi người dùng tương tác qua provider cụ thể.",
"quota.channelOverrides": "Ghi đè theo kênh",
"quota.channelOverridesTip": "Giới hạn hạn mức tùy chỉnh theo loại kênh (vd: telegram, discord).",
"quota.groupOverrides": "Ghi đè theo nhóm",
"quota.groupOverridesTip": "Giới hạn hạn mức tùy chỉnh cho các cuộc trò chuyện nhóm cụ thể.",
"quota.selectProvider": "Chọn provider",
"quota.selectChannel": "Chọn kênh",
"quota.selectGroup": "Chọn nhóm",
"tools.title": "Hồ sơ công cụ",
"tools.description": "Tính khả dụng công cụ mặc định và giới hạn tốc độ gọi mỗi giờ cho tất cả agent",
"tools.profile": "Hồ sơ",
"tools.profileTip": "Bộ công cụ định sẵn. 'Tối thiểu' chỉ cung cấp công cụ đọc an toàn; 'Đầy đủ' bật tất cả công cụ.",
"tools.profilePlaceholder": "Chọn hồ sơ...",
"tools.rateLimitPerHour": "Giới hạn tốc độ (mỗi giờ)",
"tools.rateLimitPerHourTip": "Số lần gọi công cụ tối đa được phép mỗi agent mỗi giờ. Đặt 0 để tắt.",
"tools.allow": "Cho phép",
"tools.allowTip": "Cho phép thêm các công cụ không có trong hồ sơ được chọn.",
"tools.allowPlaceholder": "Chọn công cụ để cho phép...",
"tools.deny": "Từ chối",
"tools.denyTip": "Chặn công cụ dù có trong hồ sơ được chọn.",
"tools.denyPlaceholder": "Chọn công cụ để từ chối...",
"tools.alsoAllow": "Cũng cho phép",
"tools.alsoAllowTip": "Công cụ bổ sung được phép ngoài hồ sơ. Hữu ích khi dùng hồ sơ hạn chế.",
"tools.alsoAllowPlaceholder": "Chọn công cụ bổ sung...",
"tools.execApproval": "Thực thi lệnh",
"tools.execSecurity": "Chế độ bảo mật",
"tools.execSecurityTip": "Kiểm soát lệnh shell nào agent được phép chạy. 'Danh sách cho phép' giới hạn theo các mẫu được duyệt.",
"tools.execAskMode": "Chế độ hỏi",
"tools.execAskModeTip": "Khi nào nhắc người dùng phê duyệt trước khi thực thi lệnh.",
"tools.execAllowlistLabel": "Lệnh được phép (mỗi dòng một mẫu)",
"tools.webSearch": "Tìm kiếm web",
"tools.webFetch": "Tải web và tự động hóa trình duyệt",
"tools.maxResults": "Kết quả tối đa",
"tools.webFetchPolicy": "Chính sách tải web",
"tools.webFetchPolicyTip": "Kiểm soát URL nào agent có thể tải. 'Danh sách cho phép' giới hạn chỉ các domain được duyệt.",
"tools.allowedDomains": "Domain được phép",
"tools.blockedDomains": "Domain bị chặn",
"tools.blockedDomainsTip": "Các domain luôn bị chặn bất kể chính sách. Mỗi dòng một mục, hỗ trợ ký tự đại diện (*.example.com).",
"tools.browser": "Tự động hóa trình duyệt",
"tools.browserEnabled": "Đã bật",
"tools.browserHeadless": "Không giao diện",
"tools.scrubCredentials": "Ẩn thông tin xác thực",
"tts.title": "Chuyển văn bản thành giọng nói",
"tts.configured": "Đã cấu hình",
"tts.disabled": "Đã tắt",
"tts.providerInfo": "Provider: {{provider}} — Tự động: {{auto}}",
"tts.noProvider": "Chưa cấu hình provider TTS.",
"tts.manageLink": "Quản lý cài đặt TTS",
"cron.title": "Trình lập lịch Cron",
"cron.description": "Hành vi thử lại cho các tác vụ định kỳ thất bại",
"cron.maxRetries": "Số lần thử lại tối đa",
"cron.maxRetriesTip": "Số lần thử lại tối đa cho tác vụ cron thất bại.",
"cron.baseDelay": "Độ trễ cơ bản",
"cron.baseDelayTip": "Độ trễ backoff ban đầu giữa các lần thử lại (vd: 2s, 500ms).",
"cron.maxDelay": "Độ trễ tối đa",
"cron.maxDelayTip": "Độ trễ backoff tối đa giữa các lần thử lại (vd: 30s, 5m).",
"telemetry.title": "Telemetry (OpenTelemetry)",
"telemetry.description": "Xuất trace và metric sang backend tương thích OpenTelemetry",
"telemetry.enabled": "Đã bật",
"telemetry.enabledTip": "Bật xuất trace OpenTelemetry. Yêu cầu build tag 'otel'.",
"telemetry.endpoint": "Điểm cuối",
"telemetry.endpointTip": "Điểm cuối xuất OTLP (host:port). gRPC mặc định là 4317, HTTP là 4318.",
"telemetry.protocol": "Giao thức",
"telemetry.protocolTip": "Giao thức truyền tải cho bộ xuất OTLP.",
"telemetry.serviceName": "Tên dịch vụ",
"telemetry.serviceNameTip": "Tên dịch vụ được báo cáo trong trace. Hữu ích để lọc trong backend quan sát.",
"telemetry.insecure": "Không bảo mật",
"telemetry.insecureTip": "Tắt TLS cho kết nối OTLP. Chỉ dùng trong môi trường local/dev.",
"telemetry.headers": "Header xuất",
"telemetry.headersTip": "HTTP header bổ sung gửi kèm mỗi yêu cầu xuất OTLP (vd: khóa API cho backend lưu trữ).",
"telemetry.headerKeyPlaceholder": "Tên header",
"telemetry.headerValuePlaceholder": "Giá trị header",
"telemetry.addHeader": "Thêm header",
"bindings.title": "Ràng buộc agent",
"bindings.description": "Định tuyến kênh, đối tác hoặc tài khoản cụ thể đến agent được chỉ định",
"bindings.add": "Thêm ràng buộc",
"bindings.noBindings": "Chưa có ràng buộc nào. Tất cả tin nhắn được định tuyến đến agent mặc định.",
"bindings.agentId": "ID agent",
"bindings.channel": "Kênh",
"bindings.peerKind": "Loại đối tác",
"bindings.peerId": "ID đối tác",
"providers.title": "Khóa API provider",
"providers.description": "Ghi đè khóa API và URL cơ sở cho các provider LLM đã cấu hình",
"providers.noProviders": "Không tìm thấy provider nào trong tệp cấu hình.",
"providers.apiKey": "Khóa API",
"providers.apiBaseUrl": "URL cơ sở",
"providers.apiBaseUrlPlaceholder": "https://api.example.com/v1",
"providers.managedVia": "Được quản lý qua biến môi trường {{envKey}}.",
"channels.title": "Cài đặt kênh",
"channels.description": "Cấu hình tích hợp kênh tích hợp sẵn (token, chính sách, streaming)",
"channels.noChannels": "Không tìm thấy kênh nào trong tệp cấu hình.",
"channels.enabled": "Đã bật",
"channels.token": "Token / Bí mật",
"channels.managedVia": "Được quản lý qua biến môi trường {{envKey}}.",
"channels.dmPolicy": "Chính sách tin nhắn riêng",
"channels.groupPolicy": "Chính sách nhóm",
"channels.allowFrom": "Cho phép từ",
"channels.allowFromPlaceholder": "user_id_1, user_id_2, ...",
"channels.dmStreaming": "Streaming tin nhắn riêng",
"channels.groupStreaming": "Streaming nhóm",
"channels.reactionLevel": "Mức phản ứng",
"channels.connectionMode": "Chế độ kết nối"
}
+270
View File
@@ -0,0 +1,270 @@
{
"title": "配置",
"description": "管理网关、Agent 默认值、工具和集成",
"noConfig": "未加载配置",
"noConfigDescription": "无法加载配置文件,网关可能不可达。",
"retry": "重试",
"warning": "此处的更改将全局影响所有 Agent 和频道,配置错误可能导致网关故障。",
"save": "保存",
"saving": "保存中...",
"saved": "已保存",
"failedToSave": "保存配置失败",
"saveConfig": "保存配置",
"usingGlobalDefaults": "使用全局默认值",
"tabs.server": "服务器",
"tabs.behavior": "行为",
"tabs.aiDefaults": "AI 默认值",
"tabs.quota": "配额",
"tabs.tools": "工具",
"tabs.integrations": "集成",
"server.title": "网关服务器",
"server.description": "网络绑定、认证令牌和访问控制",
"gateway.host": "主机",
"gateway.hostTip": "网关监听的网络接口。使用 0.0.0.0 监听所有接口。",
"gateway.port": "端口",
"gateway.portTip": "网关 WebSocket 和 HTTP 服务器绑定的 TCP 端口。",
"gateway.token": "认证令牌",
"gateway.tokenTip": "所有客户端连接所需的 Bearer 令牌。留空则禁用认证。",
"gateway.tokenManaged": "令牌通过环境变量管理,无法在此处编辑。",
"gateway.ownerIds": "所有者 ID",
"gateway.ownerIdsTip": "被授予管理员级别访问权限的用户 ID,按 Enter 分隔多个 ID。",
"gateway.ownerIdsPlaceholder": "输入所有者 ID...",
"gateway.allowedOrigins": "允许的来源",
"gateway.allowedOriginsTip": "HTTP API 的 CORS 允许来源。使用 * 允许所有来源。",
"gateway.allowedOriginsPlaceholder": "https://yourdomain.com",
"gateway.toolStatus": "工具状态消息",
"gateway.blockReply": "阻塞回复",
"gateway.maxMessageChars": "最大消息字符数",
"gateway.maxMessageCharsTip": "每条入站消息允许的最大字符数,超出限制的消息将被拒绝。",
"gateway.rateLimitRpm": "速率限制(RPM)",
"gateway.rateLimitRpmTip": "每用户每分钟最大请求数。设为 0 禁用速率限制。",
"gateway.inboundDebounceMs": "入站防抖(毫秒)",
"gateway.inboundDebounceMsTip": "处理新消息前的延迟毫秒数,用于合并快速连续消息。设为 -1 禁用。",
"gateway.injectionAction": "注入检测动作",
"agents.title": "Agent 默认值",
"agents.description": "默认 LLM 提供商、模型和运行时设置,适用于所有 Agent(除非被覆盖)",
"agents.providerTip": "当 Agent 未指定提供商时使用的默认 LLM 提供商。",
"agents.modelTip": "当 Agent 未指定模型时使用的默认模型。",
"agents.maxTokens": "最大 Token 数",
"agents.maxTokensTip": "模型在单次响应中可生成的最大 Token 数。",
"agents.temperature": "温度",
"agents.temperatureTip": "采样温度(0-2),较低的值产生更确定性的输出。",
"agents.maxToolIterations": "最大工具迭代次数",
"agents.maxToolIterationsTip": "每个 Agent 请求的最大工具调用迭代次数。",
"agents.contextWindow": "上下文窗口",
"agents.contextWindowTip": "模型上下文窗口的总 Token 预算。",
"agents.workspace": "工作区路径",
"agents.workspaceTip": "Agent 文件操作的根目录,运行时自动创建每用户子目录。",
"agents.restrictToWorkspace": "限制在工作区内",
"agents.restrictToWorkspaceTip": "阻止 Agent 读写工作区路径以外的文件。",
"agents.intentClassify": "意图分类",
"agents.saveError": "保存 Agent 默认值失败",
"agents.subagents.title": "子 Agent",
"agents.subagents.desc": "子 Agent 生成限制",
"agents.subagents.maxConcurrent": "最大并发数",
"agents.subagents.maxConcurrentTip": "可同时运行的最大子 Agent 数量。",
"agents.subagents.maxSpawnDepth": "最大生成深度",
"agents.subagents.maxSpawnDepthTip": "子 Agent 链的最大嵌套深度。",
"agents.subagents.maxChildrenPerAgent": "每 Agent 最大子数",
"agents.subagents.maxChildrenPerAgentTip": "单个 Agent 可生成的最大子 Agent 数量。",
"agents.subagents.archiveAfterMin": "归档时间(分钟)",
"agents.subagents.archiveAfterMinTip": "子 Agent 会话在空闲多少分钟后被归档。",
"agents.subagents.modelOverride": "模型覆盖",
"agents.subagents.modelOverrideTip": "强制所有子 Agent 使用特定模型。留空则从父 Agent 继承。",
"agents.subagents.modelOverridePlaceholder": "(从 Agent 继承)",
"agents.memory.title": "记忆",
"agents.memory.desc": "语义记忆搜索和嵌入",
"agents.memory.enabled": "已启用",
"agents.memory.embeddingProvider": "嵌入提供商",
"agents.memory.embeddingModel": "嵌入模型",
"agents.memory.embeddingProviderTip": "用于生成记忆存储文本嵌入的提供商。",
"agents.memory.embeddingModelTip": "嵌入模型名称。留空则使用提供商默认值。",
"agents.memory.maxResults": "最大结果数",
"agents.memory.maxResultsTip": "每次召回查询返回的最大记忆条目数。",
"agents.memory.minScore": "最低分数",
"agents.memory.minScoreTip": "记忆条目被纳入结果的最低相似度分数(0-1)。",
"agents.compaction.title": "上下文压缩",
"agents.compaction.desc": "上下文窗口压缩设置",
"agents.compaction.reserveTokensFloor": "保留 Token 下限",
"agents.compaction.reserveTokensFloorTip": "压缩前为新响应保留的最小 Token 缓冲区。",
"agents.compaction.maxHistoryShare": "最大历史占比(0-1)",
"agents.compaction.maxHistoryShareTip": "对话历史可占用的上下文窗口比例。",
"agents.pruning.title": "上下文裁剪",
"agents.pruning.desc": "裁剪旧工具结果以释放上下文空间",
"agents.pruning.mode": "模式",
"agents.pruning.keepLastAssistants": "保留最后的助手轮次",
"agents.pruning.keepLastAssistantsTip": "裁剪期间始终保留的最近助手轮次数量。",
"agents.sandbox.title": "沙箱",
"agents.sandbox.desc": "用于代码执行的 Docker 沙箱",
"agents.sandbox.mode": "模式",
"agents.sandbox.image": "Docker 镜像",
"agents.sandbox.imageTip": "沙箱容器使用的 Docker 镜像。",
"agents.sandbox.memoryMb": "内存(MB)",
"agents.sandbox.memoryMbTip": "沙箱容器的内存限制(兆字节)。",
"agents.sandbox.cpus": "CPU",
"agents.sandbox.cpusTip": "沙箱容器的 CPU 配额(例如 1.0 = 一个完整核心)。",
"agents.sandbox.timeoutSec": "超时(秒)",
"agents.sandbox.timeoutSecTip": "沙箱被终止前的最大执行时间(秒)。",
"agents.sandbox.networkEnabled": "启用网络",
"behavior.uxTitle": "界面行为",
"behavior.uxDescription": "影响网关与用户交互方式的高影响开关",
"behavior.toolStatusHint": "在 Agent 运行期间向用户显示实时工具执行状态消息。",
"behavior.toolStatusInfo": "当 Agent 读取文件、运行命令和调用 API 时,用户将看到实时更新。",
"behavior.blockReplyHint": "在发送中间状态更新之前等待 Agent 完成。",
"behavior.blockReplyInfo": "仅发送最终响应,中间工具状态消息被抑制。",
"behavior.intentClassifyHint": "在路由之前对用户意图进行分类,以减少不必要的 Agent 调用。",
"behavior.intentClassifyInfo": "仅当分类器检测到可执行意图时才调用 Agent。",
"behavior.rateLimitTitle": "速率限制",
"behavior.rateLimitDescription": "入站消息大小限制和每用户请求限流",
"behavior.sessionsTitle": "会话范围",
"behavior.sessionsDescription": "控制跨用户和频道的对话上下文分区方式",
"behavior.securityTitle": "输入安全",
"behavior.securityDescription": "提示词注入检测和凭证擦除,以保护网关",
"behavior.injectionActionHint": "当入站消息中检测到提示词注入尝试时的处理动作。",
"behavior.injectionBlockInfo": "所有被标记为注入尝试的消息将被阻止,并通知用户。",
"behavior.injectionOffInfo": "注入检测已禁用,恶意提示词将不会被过滤。",
"behavior.scrubCredentialsHint": "在返回给 Agent 之前,自动从工具输出中删除 API 密钥、令牌和密码。",
"behavior.scrubCredentialsInfo": "工具响应中的凭证模式在 Agent 看到之前被屏蔽。",
"behavior.scrubCredentialsOffInfo": "凭证擦除已禁用,工具输出中的密钥可能暴露给 Agent。",
"sessions.scope": "会话范围",
"sessions.scopeTip": "确定会话分区方式。「按发送者」为每个用户提供单独的会话;「全局」在所有用户之间共享一个会话。",
"sessions.dmScope": "私信范围",
"sessions.dmScopeTip": "私信会话的键控方式。推荐默认使用「按频道对等方」。",
"quota.title": "使用配额",
"quota.description": "每用户消息配额限制,可选按提供商、频道和群组覆盖",
"quota.enabled": "启用配额",
"quota.enabledTip": "启用后,用户受以下定义的消息数量限制。",
"quota.defaultLimits": "默认限制",
"quota.defaultLimitsTip": "适用于未被特定覆盖的所有用户的回退配额。",
"quota.hour": "每小时",
"quota.hourTip": "每小时允许的最大消息数。",
"quota.day": "每天",
"quota.dayTip": "每天允许的最大消息数。",
"quota.week": "每周",
"quota.weekTip": "每周允许的最大消息数。",
"quota.keyLabel": "键",
"quota.addOverride": "添加覆盖",
"quota.allOptionsAdded": "所有选项已添加",
"quota.providerOverrides": "按提供商覆盖",
"quota.providerOverridesTip": "每个 LLM 提供商的自定义配额限制,在用户通过特定提供商交互时覆盖默认值。",
"quota.channelOverrides": "按频道覆盖",
"quota.channelOverridesTip": "每种频道类型的自定义配额限制(例如 telegram、discord)。",
"quota.groupOverrides": "按群组覆盖",
"quota.groupOverridesTip": "特定群聊的自定义配额限制。",
"quota.selectProvider": "选择提供商",
"quota.selectChannel": "选择频道",
"quota.selectGroup": "选择群组",
"tools.title": "工具配置文件",
"tools.description": "所有 Agent 的默认工具可用性和每小时调用速率限制",
"tools.profile": "配置文件",
"tools.profileTip": "预定义工具集。\"最小\"仅公开安全的只读工具;\"完整\"启用所有工具。",
"tools.profilePlaceholder": "选择配置文件...",
"tools.rateLimitPerHour": "速率限制(每小时)",
"tools.rateLimitPerHourTip": "每个 Agent 每小时允许的最大工具调用次数。设为 0 禁用。",
"tools.allow": "允许",
"tools.allowTip": "显式允许所选配置文件中未包含的其他工具。",
"tools.allowPlaceholder": "选择要允许的工具...",
"tools.deny": "拒绝",
"tools.denyTip": "显式阻止工具,即使其包含在所选配置文件中。",
"tools.denyPlaceholder": "选择要拒绝的工具...",
"tools.alsoAllow": "同时允许",
"tools.alsoAllowTip": "在配置文件基础上允许的附加工具,在使用限制性配置文件时很有用。",
"tools.alsoAllowPlaceholder": "选择附加工具...",
"tools.execApproval": "命令执行",
"tools.execSecurity": "安全模式",
"tools.execSecurityTip": "控制 Agent 被允许运行哪些 Shell 命令。\"允许列表\"限制为已批准的模式。",
"tools.execAskMode": "询问模式",
"tools.execAskModeTip": "在执行命令之前何时提示用户审批。",
"tools.execAllowlistLabel": "允许的命令(每行一个模式)",
"tools.webSearch": "网页搜索",
"tools.webFetch": "网页抓取和浏览器自动化",
"tools.maxResults": "最大结果数",
"tools.webFetchPolicy": "网页抓取策略",
"tools.webFetchPolicyTip": "控制 Agent 可以抓取哪些 URL。\"允许列表\"仅限已批准的域名。",
"tools.allowedDomains": "允许的域名",
"tools.blockedDomains": "屏蔽的域名",
"tools.blockedDomainsTip": "无论策略如何都始终屏蔽的域名,每行一条,支持通配符(*.example.com)。",
"tools.browser": "浏览器自动化",
"tools.browserEnabled": "已启用",
"tools.browserHeadless": "无界面模式",
"tools.scrubCredentials": "擦除凭证",
"tts.title": "文字转语音",
"tts.configured": "已配置",
"tts.disabled": "已禁用",
"tts.providerInfo": "提供商:{{provider}} — 自动:{{auto}}",
"tts.noProvider": "未配置 TTS 提供商。",
"tts.manageLink": "管理 TTS 设置",
"cron.title": "定时任务调度器",
"cron.description": "失败定时任务的重试行为",
"cron.maxRetries": "最大重试次数",
"cron.maxRetriesTip": "失败 Cron 任务的最大重试尝试次数。",
"cron.baseDelay": "基础延迟",
"cron.baseDelayTip": "重试之间的初始退避延迟(例如 2s、500ms)。",
"cron.maxDelay": "最大延迟",
"cron.maxDelayTip": "重试之间的最大退避延迟(例如 30s、5m)。",
"telemetry.title": "遥测(OpenTelemetry)",
"telemetry.description": "将追踪和指标导出到兼容 OpenTelemetry 的后端",
"telemetry.enabled": "已启用",
"telemetry.enabledTip": "启用 OpenTelemetry 追踪导出,需要 'otel' 构建标签。",
"telemetry.endpoint": "端点",
"telemetry.endpointTip": "OTLP 导出器端点(host:port),gRPC 默认端口为 4317,HTTP 为 4318。",
"telemetry.protocol": "协议",
"telemetry.protocolTip": "OTLP 导出器的传输协议。",
"telemetry.serviceName": "服务名称",
"telemetry.serviceNameTip": "追踪中报告的服务名称,用于在可观测性后端中筛选。",
"telemetry.insecure": "不安全连接",
"telemetry.insecureTip": "禁用 OTLP 连接的 TLS,仅在本地/开发环境中使用。",
"telemetry.headers": "导出请求头",
"telemetry.headersTip": "随每个 OTLP 导出请求发送的附加 HTTP 请求头(例如托管后端的 API 密钥)。",
"telemetry.headerKeyPlaceholder": "请求头名称",
"telemetry.headerValuePlaceholder": "请求头值",
"telemetry.addHeader": "添加请求头",
"bindings.title": "Agent 绑定",
"bindings.description": "将特定频道、对等方或账户路由到指定的 Agent",
"bindings.add": "添加绑定",
"bindings.noBindings": "未配置绑定,所有消息将路由到默认 Agent。",
"bindings.agentId": "Agent ID",
"bindings.channel": "频道",
"bindings.peerKind": "对等方类型",
"bindings.peerId": "对等方 ID",
"providers.title": "提供商 API 密钥",
"providers.description": "覆盖已配置 LLM 提供商的 API 密钥和基础 URL",
"providers.noProviders": "配置文件中未找到任何提供商。",
"providers.apiKey": "API 密钥",
"providers.apiBaseUrl": "基础 URL",
"providers.apiBaseUrlPlaceholder": "https://api.example.com/v1",
"providers.managedVia": "通过 {{envKey}} 环境变量管理。",
"channels.title": "频道设置",
"channels.description": "配置内置频道集成(令牌、策略、流式传输)",
"channels.noChannels": "配置文件中未找到任何频道。",
"channels.enabled": "已启用",
"channels.token": "令牌 / 密钥",
"channels.managedVia": "通过 {{envKey}} 环境变量管理。",
"channels.dmPolicy": "私信策略",
"channels.groupPolicy": "群组策略",
"channels.allowFrom": "允许来自",
"channels.allowFromPlaceholder": "user_id_1, user_id_2, ...",
"channels.dmStreaming": "私信流式传输",
"channels.groupStreaming": "群组流式传输",
"channels.reactionLevel": "反应级别",
"channels.connectionMode": "连接模式"
}