961 lines
48 KiB
JSON
961 lines
48 KiB
JSON
{
|
|
"navigation": {
|
|
"chat": "Chat",
|
|
"model_group": "Models",
|
|
"models": "Models",
|
|
"credentials": "Credentials",
|
|
"agent_group": "Agent",
|
|
"hub": "Hub",
|
|
"skills": "Skills",
|
|
"tools": "Tools",
|
|
"services": "Services",
|
|
"channels_group": "Channels",
|
|
"show_more_channels": "More",
|
|
"show_less_channels": "Less",
|
|
"config": "Config",
|
|
"logs": "Logs"
|
|
},
|
|
"launcherLogin": {
|
|
"title": "Sign in",
|
|
"description": "Enter the dashboard password to continue.",
|
|
"passwordLabel": "Password",
|
|
"passwordPlaceholder": "Enter password",
|
|
"submit": "Sign in",
|
|
"errorInvalid": "Incorrect password. Please try again.",
|
|
"errorNetwork": "Network error. Please try again."
|
|
},
|
|
"launcherSetup": {
|
|
"title": "Set dashboard password",
|
|
"description": "Choose a password to protect access to this dashboard. You will use it every time you sign in.",
|
|
"passwordLabel": "Password",
|
|
"passwordPlaceholder": "At least 8 characters",
|
|
"confirmLabel": "Confirm password",
|
|
"confirmPlaceholder": "Repeat password",
|
|
"submit": "Set password",
|
|
"errorMismatch": "Passwords do not match.",
|
|
"errorNetwork": "Network error. Please try again."
|
|
},
|
|
"chat": {
|
|
"welcome": "How can I help you today?",
|
|
"welcomeDesc": "Ask me about weather, settings, or any other tasks. I'm here to assist you.",
|
|
"placeholder": "Start a new message...",
|
|
"disabledPlaceholder": {
|
|
"gatewayUnknown": "Unable to chat: Gateway status is still being checked. Please wait, then refresh the page or restart Launcher if needed.",
|
|
"gatewayStarting": "Unable to chat: Gateway is starting. Wait for startup to complete, then try again.",
|
|
"gatewayRestarting": "Unable to chat: Gateway is restarting. Please wait for restart to finish.",
|
|
"gatewayStopping": "Unable to chat: Gateway is stopping. Wait for it to stop, then start Gateway again.",
|
|
"gatewayStopped": "Unable to chat: Gateway is not started. Click Start Gateway in the top bar, then retry.",
|
|
"gatewayError": "Unable to chat: Gateway is in an error state. Check logs, then restart Gateway or Launcher.",
|
|
"websocketConnecting": "Connecting to chat service... Please wait.",
|
|
"websocketDisconnected": "Unable to chat: WebSocket connection is disconnected. Check network and gateway status, then refresh the page or restart Launcher.",
|
|
"websocketError": "Unable to chat: WebSocket connection failed. Check network and gateway status, then retry.",
|
|
"noDefaultModel": "Unable to chat: No default model is selected. Set a default model on the Models page."
|
|
},
|
|
"newChat": "New Chat",
|
|
"notConnected": "Gateway is not running. Start it to chat.",
|
|
"thinking": {
|
|
"step1": "Thinking...",
|
|
"step2": "Analyzing your request...",
|
|
"step3": "Preparing response...",
|
|
"step4": "Almost there..."
|
|
},
|
|
"reasoningLabel": "Reasoning",
|
|
"toolCallsLabel": "Tool calls",
|
|
"toolCallExplanationLabel": "Call note",
|
|
"toolCallFunctionLabel": "Call summary",
|
|
"toolCallArgumentsLabel": "Arguments",
|
|
"showAssistantDetails": "Reasoning and tool calls",
|
|
"assistantDetailVisibility": {
|
|
"none": "Show neither",
|
|
"thought": "Show reasoning only",
|
|
"toolCalls": "Show tool calls only",
|
|
"all": "Show both"
|
|
},
|
|
"toolLabel": "Tool",
|
|
"codeLabel": "Code",
|
|
"copyMessage": "Copy message",
|
|
"copyCode": "Copy code",
|
|
"copiedLabel": "Copied",
|
|
"enableCodeWrap": "Wrap lines",
|
|
"disableCodeWrap": "Disable wrap",
|
|
"expandCode": "Expand code",
|
|
"collapseCode": "Collapse code",
|
|
"history": "History",
|
|
"noHistory": "No chat history yet",
|
|
"historyLoadFailed": "Failed to load chat history",
|
|
"historyOpenFailed": "Failed to open this chat history",
|
|
"loadingMore": "Loading more...",
|
|
"deleteSession": "Delete session",
|
|
"messagesCount": "{{count}} messages",
|
|
"noModel": "Select model",
|
|
"inputDisabled": {
|
|
"notConnected": "Gateway is not running. Start it to chat.",
|
|
"noModel": "No default model configured. Go to Models page to set one."
|
|
},
|
|
"sendMessage": "Send message",
|
|
"sendHint": "Press Enter to send\nShift + Enter for a new line",
|
|
"contextTitle": "Context",
|
|
"contextDetail": "View Details",
|
|
"attachImage": "Add images",
|
|
"dropImagesActive": "Release to add images",
|
|
"removeImage": "Remove image",
|
|
"uploadedImage": "Attached image",
|
|
"invalidImage": "\"{{name}}\" is not a supported image file.",
|
|
"imageTooLarge": "\"{{name}}\" exceeds the {{size}} limit.",
|
|
"imageReadFailed": "Failed to read \"{{name}}\".",
|
|
"empty": {
|
|
"noConfiguredModel": "No Model Configured",
|
|
"noConfiguredModelDescription": "You need to configure at least one AI model with an API key before you can start chatting.",
|
|
"goToModels": "Go to Models",
|
|
"noSelectedModel": "No Model Selected",
|
|
"noSelectedModelDescription": "You have configured models, but none is set as default. Select a model before starting chat.",
|
|
"notRunning": "Gateway Not Running",
|
|
"notRunningDescription": "Start the gateway service to begin chatting. Use the Start Gateway button in the top bar."
|
|
},
|
|
"modelGroup": {
|
|
"apikey": "API Key",
|
|
"oauth": "OAuth",
|
|
"local": "Local"
|
|
}
|
|
},
|
|
"header": {
|
|
"logout": {
|
|
"tooltip": "Sign out",
|
|
"confirm": "Sign out",
|
|
"description": "Are you sure you want to sign out of the dashboard?"
|
|
},
|
|
"gateway": {
|
|
"stopDialog": {
|
|
"title": "Stop Gateway Service?",
|
|
"description": "Are you sure you want to stop the gateway? This will disconnect your active chat sessions and halt inference.",
|
|
"confirm": "Stop Gateway"
|
|
},
|
|
"action": {
|
|
"start": "Start Gateway",
|
|
"stop": "Stop Gateway",
|
|
"restart": "Restart Gateway"
|
|
},
|
|
"status": {
|
|
"starting": "Starting Gateway...",
|
|
"restarting": "Restarting Gateway...",
|
|
"stopping": "Stopping Gateway..."
|
|
},
|
|
"restartRequired": "Configuration changes require a gateway restart to take effect."
|
|
}
|
|
},
|
|
"common": {
|
|
"cancel": "Cancel",
|
|
"close": "Close",
|
|
"save": "Save",
|
|
"saving": "Saving...",
|
|
"reset": "Reset",
|
|
"confirm": "Confirm",
|
|
"fix": "Fix",
|
|
"saveChangesTitle": "You have unsaved configuration changes",
|
|
"restartRequiredTitle": "Gateway restart required",
|
|
"restartRequiredDesc": "The latest {{name}} configuration has been saved. Restart the gateway for it to take effect."
|
|
},
|
|
"labels": {
|
|
"loading": "Loading..."
|
|
},
|
|
"footer": {
|
|
"version": "Version",
|
|
"commit": "Commit",
|
|
"build": "Build",
|
|
"version_unknown": "Unknown"
|
|
},
|
|
"credentials": {
|
|
"description": "Manage OAuth and token-based credentials for supported providers.",
|
|
"loading": "Loading credentials...",
|
|
"providers": {
|
|
"openai": {
|
|
"description": "Supports browser OAuth, device code, and token login."
|
|
},
|
|
"anthropic": {
|
|
"description": "Uses token login for Claude access."
|
|
},
|
|
"antigravity": {
|
|
"description": "Uses browser OAuth for Google Cloud Code Assist."
|
|
}
|
|
},
|
|
"status": {
|
|
"connected": "Connected",
|
|
"needsRefresh": "Needs refresh",
|
|
"expired": "Expired",
|
|
"notLoggedIn": "Not logged in"
|
|
},
|
|
"actions": {
|
|
"browser": "Browser OAuth",
|
|
"deviceCode": "Device Code",
|
|
"stopLoading": "Stop Loading",
|
|
"saveToken": "Save",
|
|
"logout": "Logout"
|
|
},
|
|
"logoutDialog": {
|
|
"title": "Logout provider?",
|
|
"description": "This will remove your saved credential for {{provider}}."
|
|
},
|
|
"fields": {
|
|
"openaiToken": "OpenAI token",
|
|
"anthropicToken": "Anthropic token"
|
|
},
|
|
"labels": {
|
|
"account": "Account",
|
|
"email": "Email",
|
|
"project": "Project"
|
|
},
|
|
"errors": {
|
|
"loadFailed": "Failed to load credentials",
|
|
"flowFailed": "Failed to check authentication flow",
|
|
"loginFailed": "Login failed",
|
|
"logoutFailed": "Logout failed",
|
|
"invalidBrowserResponse": "Invalid browser login response",
|
|
"invalidDeviceResponse": "Invalid device code response",
|
|
"popupBlocked": "Unable to open a new tab. Please allow popups and try again."
|
|
},
|
|
"flow": {
|
|
"current": "Current authentication status",
|
|
"pending": "Waiting for authorization...",
|
|
"success": "Authentication successful",
|
|
"error": "Authentication failed",
|
|
"expired": "Authentication session expired"
|
|
},
|
|
"device": {
|
|
"title": "OpenAI Device Login",
|
|
"description": "Open the verification page and enter the code below. This page will refresh automatically.",
|
|
"code": "User Code",
|
|
"url": "Verification URL",
|
|
"polling": "Polling login status...",
|
|
"open": "Open Verification Page"
|
|
}
|
|
},
|
|
"models": {
|
|
"description": "Configure API keys for AI providers. Only configured models are available for chat.",
|
|
"defaultChangeSuccess": "Default model updated.",
|
|
"unsavedPrompt": "This change has not been saved yet. Save to write it into the model configuration.",
|
|
"restartHint": "Model configuration changes take effect after the gateway restarts.",
|
|
"loadError": "Failed to load models",
|
|
"retry": "Retry",
|
|
"providerCatalogUnavailable": "The backend provider catalog is unavailable. New provider selections are disabled until the Models API loads successfully.",
|
|
"noDefaultHintPrefix": "No default model set yet. Click",
|
|
"noDefaultHintSuffix": "to set one.",
|
|
"status": {
|
|
"available": "Available",
|
|
"unconfigured": "Not configured",
|
|
"unreachable": "Service unreachable"
|
|
},
|
|
"badge": {
|
|
"default": "Default",
|
|
"virtual": "Virtual"
|
|
},
|
|
"action": {
|
|
"edit": "Edit API key",
|
|
"setDefault": "Set as default",
|
|
"delete": "Delete model",
|
|
"setDefaultDisabled": {
|
|
"setting": "Setting as default...",
|
|
"unavailable": "Cannot set unavailable model as default",
|
|
"isDefault": "Already the default model",
|
|
"isVirtual": "Cannot set virtual model as default",
|
|
"unsupportedProvider": "This provider cannot be used as the default chat model."
|
|
},
|
|
"deleteDisabled": {
|
|
"isDefault": "Cannot delete the default model"
|
|
}
|
|
},
|
|
"defaultOnSave": {
|
|
"label": "Default Model",
|
|
"description": "Automatically set this model as default after saving.",
|
|
"unsupportedProvider": "This provider can be saved in the model list but cannot be used as the default chat model."
|
|
},
|
|
"add": {
|
|
"button": "Add Model",
|
|
"title": "Add Custom Model",
|
|
"description": "Add an OpenAI-compatible or native model endpoint.",
|
|
"modelName": "Model Alias",
|
|
"modelNamePlaceholder": "e.g. my-gpt4",
|
|
"modelNameHint": "A short name used to identify this model in conversations.",
|
|
"modelId": "Model Identifier",
|
|
"modelIdPlaceholder": "e.g. gpt-4o or openai/gpt-4o",
|
|
"modelIdHint": "This field is treated as the canonical model ID for the selected provider. If the identifier itself contains a slash (for example openai/gpt-5.4), it is preserved as-is and not split again.",
|
|
"errorRequired": "This field is required.",
|
|
"errorDuplicateModelName": "Model alias already exists. Please use a different name.",
|
|
"saveError": "Failed to add model",
|
|
"saveSuccess": "Model added.",
|
|
"confirm": "Add Model"
|
|
},
|
|
"delete": {
|
|
"title": "Delete Model?",
|
|
"description": "\"{{name}}\" will be permanently removed from your model list. This cannot be undone.",
|
|
"confirm": "Delete"
|
|
},
|
|
"advanced": {
|
|
"toggle": "Advanced options"
|
|
},
|
|
"field": {
|
|
"provider": "Provider",
|
|
"providerPlaceholder": "Select a provider",
|
|
"providerHint": "Choose a provider from the backend catalog; Model Identifier will be interpreted as that provider's canonical model ID.",
|
|
"providerInvalid": "The current provider is invalid. Please choose a supported provider.",
|
|
"selectProviderFirst": "Select a provider first",
|
|
"apiBase": "API Base URL",
|
|
"apiKey": "API Key",
|
|
"apiKeyPlaceholder": "Enter your API key",
|
|
"apiKeyPlaceholderSet": "Leave blank to keep existing key",
|
|
"proxy": "HTTP Proxy",
|
|
"proxyHint": "Optional. e.g. http://127.0.0.1:7890",
|
|
"authMethod": "Auth Method",
|
|
"authMethodHint": "Authentication method: oauth, token. Leave blank for API key auth.",
|
|
"authMethodManagedHint": "This provider's auth method is managed by the system.",
|
|
"connectMode": "Connect Mode",
|
|
"connectModeHint": "Connection mode for CLI-based providers: stdio or grpc.",
|
|
"workspace": "Workspace Path",
|
|
"workspaceHint": "Working directory for CLI-based providers (e.g. GitHub Copilot).",
|
|
"requestTimeout": "Request Timeout (s)",
|
|
"requestTimeoutHint": "Maximum seconds to wait for a response. 0 = use default.",
|
|
"rpm": "Rate Limit (RPM)",
|
|
"rpmHint": "Maximum requests per minute. 0 = no limit.",
|
|
"thinkingLevel": "Thinking Level",
|
|
"thinkingLevelHint": "Leave blank to omit thinking_level and use the provider default. Values: off, low, medium, high, xhigh, adaptive.",
|
|
"providerDefault": "provider default",
|
|
"maxTokensField": "Max Tokens Field",
|
|
"maxTokensFieldHint": "Override the request field name for max tokens, e.g. max_completion_tokens.",
|
|
"toolSchemaTransform": "Tool Schema Transform",
|
|
"toolSchemaTransformHint": "Optional compatibility transform for tool JSON schemas. Leave blank for native behavior. Supported values: simple.",
|
|
"streamingEnabled": "Streaming Output",
|
|
"streamingEnabledHint": "Allow this model entry to try provider streaming requests. The current channel streaming switch must also be enabled.",
|
|
"extraBody": "Extra Body",
|
|
"extraBodyHint": "Additional JSON fields to inject into the request body, e.g. {\"reasoning_split\": true}.",
|
|
"customHeaders": "Custom Headers",
|
|
"customHeadersHint": "Additional HTTP headers to inject into every request, e.g. {\"X-Source\": \"coding-plan\"}.",
|
|
"invalidJson": "Invalid JSON format"
|
|
},
|
|
"edit": {
|
|
"title": "Configure {{name}}",
|
|
"apiKeyHint": "A key is already set. Leave blank to keep it unchanged.",
|
|
"oauthNote": "This provider uses OAuth — no API key required.",
|
|
"saveError": "Failed to save",
|
|
"saveSuccess": "Model configuration saved."
|
|
},
|
|
"fetch": {
|
|
"title": "Fetch Available Models",
|
|
"description": "Fetch model list from the upstream provider.",
|
|
"providerLabel": "Provider:",
|
|
"needApiKey": "Please enter an API Key first to fetch models.",
|
|
"fetching": "Fetching models...",
|
|
"retry": "Retry",
|
|
"filterPlaceholder": "Filter models...",
|
|
"found": "Found {{count}} model",
|
|
"found_plural": "Found {{count}} models",
|
|
"shown": "({{count}} shown)",
|
|
"selectAll": "Select All",
|
|
"deselectAll": "Deselect All",
|
|
"fill": "Fill {{count}} Selected Model",
|
|
"fill_plural": "Fill {{count}} Selected Models",
|
|
"failed": "Failed to fetch models"
|
|
},
|
|
"catalog": {
|
|
"button": "Saved Catalogs",
|
|
"title": "Saved Model Catalogs",
|
|
"description": "Previously fetched model lists, stored per API key. Select models to add to your configuration.",
|
|
"loading": "Loading catalogs...",
|
|
"empty": "No saved catalogs yet. Fetch models from a provider to save a catalog.",
|
|
"filterPlaceholder": "Filter models...",
|
|
"models": "models",
|
|
"fetchedAt": "Fetched",
|
|
"delete": "Delete catalog",
|
|
"refresh": "Refresh from upstream",
|
|
"found": "Found {{count}} model",
|
|
"found_plural": "Found {{count}} models",
|
|
"selectAll": "Select All",
|
|
"deselectAll": "Deselect All",
|
|
"addSelected": "Add {{count}} Selected",
|
|
"addSuccess": "Added {{count}} model(s) to configuration.",
|
|
"needApiKey": "These models require an API key. You'll need to configure credentials after import."
|
|
},
|
|
"test": {
|
|
"title": "Test Model Connectivity",
|
|
"description": "Verify that the model endpoint is reachable and configured correctly.",
|
|
"modelLabel": "Model:",
|
|
"identifierLabel": "Identifier:",
|
|
"endpointLabel": "Endpoint:",
|
|
"testConnection": "Test Connection",
|
|
"testing": "Testing connection...",
|
|
"success": "Connection successful",
|
|
"responseTime": "Response time: {{ms}}ms",
|
|
"failed": "Connection failed",
|
|
"status": "Status: {{status}}",
|
|
"testFailed": "Test failed",
|
|
"testAgain": "Test Again"
|
|
},
|
|
"validation": {
|
|
"whitespace": "Model identifier cannot contain whitespace",
|
|
"leadingSlash": "Should not start with /",
|
|
"consecutiveSlash": "Should not contain consecutive /",
|
|
"useProvider": "Will use \"{{provider}}\" as provider",
|
|
"defaultToOpenAI": "No provider specified, defaults to OpenAI",
|
|
"emptyModel": "Model name cannot be empty",
|
|
"shouldUse": "\"{{provider}}\" should use \"{{alias}}\"",
|
|
"didYouMean": "Did you mean \"{{closest}}\"?",
|
|
"unknownProvider": "Unknown provider \"{{provider}}\"",
|
|
"parsed": "provider={{provider}}, model={{model}}"
|
|
},
|
|
"combobox": {
|
|
"selectProvider": "Select provider...",
|
|
"searchProvider": "Search provider...",
|
|
"noProvider": "No provider found.",
|
|
"noCatalog": "Provider catalog unavailable.",
|
|
"local": "local"
|
|
}
|
|
},
|
|
"channels": {
|
|
"loadError": "Failed to load channels",
|
|
"name": {
|
|
"telegram": "Telegram",
|
|
"discord": "Discord",
|
|
"slack": "Slack",
|
|
"feishu": "Feishu",
|
|
"dingtalk": "DingTalk",
|
|
"line": "LINE",
|
|
"qq": "QQ",
|
|
"onebot": "OneBot",
|
|
"wecom": "WeCom",
|
|
"whatsapp": "WhatsApp",
|
|
"whatsapp_native": "WhatsApp Native",
|
|
"pico": "Web",
|
|
"maixcam": "MaixCam",
|
|
"matrix": "Matrix",
|
|
"irc": "IRC",
|
|
"weixin": "WeChat",
|
|
"mqtt": "MQTT"
|
|
},
|
|
"weixin": {
|
|
"bindTitle": "WeChat Account Binding",
|
|
"bindDesc": "Scan the QR code with WeChat to bind your personal account.",
|
|
"bind": "Bind WeChat",
|
|
"rebind": "Re-bind",
|
|
"bound": "WeChat Bound",
|
|
"notBound": "WeChat account not bound yet.",
|
|
"generating": "Generating QR code...",
|
|
"scanHint": "Open WeChat and scan the QR code",
|
|
"scanned": "Scanned — please confirm in WeChat",
|
|
"expired": "QR code expired",
|
|
"retry": "Try Again",
|
|
"refresh": "Refresh QR",
|
|
"errorGeneric": "An error occurred. Please try again."
|
|
},
|
|
"wecom": {
|
|
"bindTitle": "WeCom Binding",
|
|
"bindDesc": "Scan the QR code with WeCom to bind your AI Bot.",
|
|
"bind": "Bind WeCom",
|
|
"rebind": "Re-bind",
|
|
"bound": "WeCom Bound",
|
|
"notBound": "WeCom AI Bot not bound yet.",
|
|
"generating": "Generating QR code...",
|
|
"scanHint": "Open WeCom and scan the QR code",
|
|
"scanned": "Scanned, please confirm in WeCom",
|
|
"expired": "QR code expired",
|
|
"retry": "Try Again",
|
|
"refresh": "Refresh QR",
|
|
"errorGeneric": "An error occurred. Please try again."
|
|
},
|
|
"field": {
|
|
"token": "Bot Token",
|
|
"tokenPlaceholder": "Enter bot token",
|
|
"botToken": "Bot Token",
|
|
"appToken": "App Token",
|
|
"appId": "App ID",
|
|
"appSecret": "App Secret",
|
|
"verificationToken": "Verification Token",
|
|
"encryptKey": "Encrypt Key",
|
|
"baseUrl": "API Base URL",
|
|
"proxy": "HTTP Proxy",
|
|
"mentionOnly": "Mention Only",
|
|
"typingEnabled": "Typing Indicator",
|
|
"placeholderEnabled": "Placeholder Message",
|
|
"placeholderText": "Placeholder Text",
|
|
"streamingEnabled": "Streaming Output",
|
|
"streamingThrottleSeconds": "Update Interval (s)",
|
|
"streamingMinGrowthChars": "Minimum Growth Characters",
|
|
"groupTriggerMentionOnly": "Group Mention Only",
|
|
"groupTriggerPrefixes": "Group Trigger Prefixes",
|
|
"groupTriggerPrefixesPlaceholder": "e.g. /, !, ?",
|
|
"randomReactionEmoji": "Random Reaction Emoji",
|
|
"randomReactionEmojiPlaceholder": "e.g. THUMBSUP, HEART, SMILE",
|
|
"isLark": "Lark (International)",
|
|
"allowFrom": "Allow From",
|
|
"allowFromPlaceholder": "e.g. 123456, 789012",
|
|
"allowOrigins": "Allow Origins",
|
|
"allowOriginsPlaceholder": "e.g. https://example.com, http://localhost:5173",
|
|
"removeListItem": "Remove {{value}}",
|
|
"secretPlaceholder": "Enter secret",
|
|
"secretHintSet": "A value is already set. Leave blank to keep it unchanged."
|
|
},
|
|
"page": {
|
|
"notFound": "Channel \"{{name}}\" is not supported.",
|
|
"saveSuccess": "Channel configuration saved.",
|
|
"saveError": "Failed to save channel configuration",
|
|
"savePrompt": "This change has not been saved yet. Save to write it into the channel configuration.",
|
|
"docLink": "Documentation",
|
|
"enableLabel": "Enable channel",
|
|
"restartRequiredTitle": "Gateway restart required",
|
|
"restartRequiredDesc": "The latest {{name}} configuration has been saved. Restart the gateway for it to take effect."
|
|
},
|
|
"form": {
|
|
"desc": {
|
|
"token": "Bot access token used to connect to the platform API.",
|
|
"botToken": "Bot token used to send and receive messages.",
|
|
"appToken": "App token used for Socket Mode connections.",
|
|
"appId": "Unique application ID used for authentication.",
|
|
"appSecret": "Application secret used for signing and authentication.",
|
|
"verificationToken": "Verification token for event callbacks.",
|
|
"encryptKey": "Encryption key used to decrypt callback payloads.",
|
|
"baseUrl": "Platform API base URL. Official endpoint is used by default.",
|
|
"proxy": "HTTP proxy address for outbound network access.",
|
|
"mentionOnly": "Only respond when the bot is explicitly mentioned in group chats.",
|
|
"typingEnabled": "Display typing status while the assistant is generating a response.",
|
|
"placeholderEnabled": "Enable temporary placeholder messages before the final reply is sent.",
|
|
"streamingEnabled": "Allow this channel to display provider streaming output. The current model entry streaming switch must also be enabled.",
|
|
"streamingThrottleSeconds": "Minimum interval between intermediate streaming updates. 0 means use the default. Final replies are not throttled.",
|
|
"streamingMinGrowthChars": "Minimum text growth before sending another intermediate streaming update. 0 means use the default. Final replies are not throttled.",
|
|
"groupTriggerMentionOnly": "In group chats, respond only when the bot is mentioned.",
|
|
"groupTriggerPrefixes": "Custom group-chat trigger prefixes. Add items one by one, or paste multiple values at once.",
|
|
"randomReactionEmoji": "PicoClaw adds emoji reactions to user messages to confirm receipt. Example: \"THUMBSUP\", \"HEART\", \"SMILE\". Leave empty to use the default \"Pin\" emoji.",
|
|
"isLark": "Use Lark international domain (open.larksuite.com) instead of Feishu domain (open.feishu.cn).",
|
|
"allowFrom": "Allowed user or group IDs. Add items one by one, or paste multiple values at once.",
|
|
"allowOrigins": "Allowed origin domains. Add items one by one, or paste multiple values at once.",
|
|
"wsUrl": "WebSocket service URL.",
|
|
"reconnectInterval": "Reconnect interval after disconnection (seconds).",
|
|
"bridgeUrl": "Bridge service URL.",
|
|
"sessionStorePath": "Local path for session storage.",
|
|
"useNative": "Whether to use native client mode.",
|
|
"host": "Service host address.",
|
|
"port": "Service port.",
|
|
"homeserver": "Matrix homeserver URL.",
|
|
"userId": "Account user ID.",
|
|
"deviceId": "Device ID.",
|
|
"joinOnInvite": "Automatically join rooms when invited.",
|
|
"clientId": "Client ID used for platform authentication.",
|
|
"corpId": "Enterprise Corp ID.",
|
|
"agentId": "Enterprise application Agent ID.",
|
|
"webhookUrl": "Full webhook URL.",
|
|
"webhookHost": "Webhook listening host.",
|
|
"webhookPort": "Webhook listening port.",
|
|
"webhookPath": "Webhook route path.",
|
|
"replyTimeout": "Reply timeout in seconds.",
|
|
"maxSteps": "Maximum number of processing steps.",
|
|
"welcomeMessage": "Welcome message content for new sessions.",
|
|
"allowTokenQuery": "Allow token in URL query parameters.",
|
|
"pingInterval": "Connection heartbeat interval in seconds.",
|
|
"readTimeout": "Read timeout in seconds.",
|
|
"writeTimeout": "Write timeout in seconds.",
|
|
"maxConnections": "Maximum number of concurrent connections.",
|
|
"server": "IRC server address.",
|
|
"tls": "Whether to enable TLS.",
|
|
"nick": "Bot nickname.",
|
|
"user": "IRC username.",
|
|
"realName": "Displayed real name.",
|
|
"channels": "IRC channels to join.",
|
|
"requestCaps": "IRC capability list requested on connect.",
|
|
"maxBase64FileSizeMiB": "Maximum size in MiB for converting local files to base64 before upload. 0 means unlimited. Applies only to local files, not URL uploads.",
|
|
"genericField": "Used to configure {{field}}.",
|
|
"broker": "MQTT broker address.",
|
|
"mqttAgentId": "Unique identifier for this instance, used to build the topic path.",
|
|
"topicPrefix": "Topic prefix. Defaults to /picoclaw.",
|
|
"mqttUsername": "Broker authentication username (optional).",
|
|
"mqttPassword": "Broker authentication password (optional).",
|
|
"mqttClientId": "MQTT client ID. Leave blank to auto-generate.",
|
|
"keepAlive": "Keepalive interval in seconds. Defaults to 60.",
|
|
"qos": "Message quality of service level: 0 = at most once, 1 = at least once, 2 = exactly once."
|
|
}
|
|
},
|
|
"validation": {
|
|
"requiredField": "This field is required."
|
|
},
|
|
"mqtt": {
|
|
"protocolTitle": "Protocol Reference",
|
|
"protocolDesc": "Clients send and receive messages using the following topic and payload format.",
|
|
"uplink": "Uplink (Client → Agent)",
|
|
"downlink": "Downlink (Agent → Client)",
|
|
"topicParams": "Topic Parameters",
|
|
"fieldText": "text",
|
|
"uplinkTextDesc": "Natural language instruction from the user (required).",
|
|
"downlinkTextDesc": "Agent reply text. In streaming mode, concatenate multiple messages in order for the full response.",
|
|
"topicPrefixDesc": "Topic prefix, matches the configuration above.",
|
|
"agentIdDesc": "Agent ID, matches the configuration above.",
|
|
"clientIdDesc": "Client-defined identifier. Recommended: generate a UUID on first launch and persist it so the same device always uses the same ID.",
|
|
"clientIdPlaceholder": "Auto-generated if blank",
|
|
"secretSet": "Already configured. Leave blank to keep unchanged.",
|
|
"secretEmpty": "Not configured"
|
|
}
|
|
},
|
|
"pages": {
|
|
"agent": {
|
|
"load_error": "Failed to load agent support information.",
|
|
"skills": {
|
|
"empty": "No skills are currently available.",
|
|
"install_success": "Installed {{name}}.",
|
|
"install_error": "Failed to install skill.",
|
|
"search_placeholder": "Search by name, description, or registry",
|
|
"source_label": "Type",
|
|
"sort_label": "Sort",
|
|
"import": "Import Skill",
|
|
"import_success": "Skill imported.",
|
|
"import_error": "Failed to import skill.",
|
|
"import_invalid_type": "Only Markdown or ZIP skill files are supported.",
|
|
"import_invalid_size": "Skill file must be 1 MB or smaller.",
|
|
"import_constraints": "Import a Markdown or ZIP skill file up to 1 MB",
|
|
"view": "View",
|
|
"delete": "Delete",
|
|
"delete_title": "Delete Skill?",
|
|
"delete_description": "\"{{name}}\" will be removed from workspace skills.",
|
|
"delete_confirm": "Delete",
|
|
"delete_success": "Skill deleted.",
|
|
"delete_error": "Failed to delete skill.",
|
|
"viewer_title": "Skill Content",
|
|
"viewer_description": "Read the current effective SKILL.md content here.",
|
|
"load_detail_error": "Failed to load skill content.",
|
|
"no_description": "No description provided.",
|
|
"no_results": "No skills matched the current filters.",
|
|
"dropzone_title": "Import Into Workspace",
|
|
"dropzone_description": "Drag a skill file here or pick one from disk.",
|
|
"dropzone_label": "Drop a skill file here",
|
|
"dropzone_active": "Release to import this skill",
|
|
"dropzone_release": "The skill will be normalized and saved into the workspace skills directory.",
|
|
"marketplace_title": "Discover Skills",
|
|
"marketplace_description": "Search the skill registries and install useful skills into this workspace",
|
|
"marketplace_search_placeholder": "Search for capabilities like github, docker, database...",
|
|
"marketplace_search_action": "Search",
|
|
"marketplace_search_status": "Search Status",
|
|
"marketplace_install_status": "Install Status",
|
|
"marketplace_notice_title": "Security Notice",
|
|
"marketplace_notice_body": "Registry skills are third-party content. Review the author, page URL, instructions, and any required code or credentials before installing.",
|
|
"marketplace_status_disabled": "Disabled. Enable the corresponding tool on the Tools page first.",
|
|
"marketplace_status_enable_hint": "Enable the related tool on the Tools page first.",
|
|
"marketplace_search_error": "Failed to search registries.",
|
|
"marketplace_loading_results": "Searching skills...",
|
|
"marketplace_loading_more": "Loading more skills...",
|
|
"marketplace_results_title": "{{count}} results for “{{query}}”",
|
|
"marketplace_results_hint": "Registry results install into the current workspace.",
|
|
"marketplace_install_action": "Install",
|
|
"marketplace_installed": "Installed",
|
|
"marketplace_view_installed": "View Local",
|
|
"marketplace_installed_hint": "Already available in this workspace as “{{name}}”.",
|
|
"marketplace_empty_results": "No installable skills matched “{{query}}”.",
|
|
"marketplace_idle": "Search for a capability to discover installable skills from configured registries.",
|
|
"marketplace_unavailable": "Registry search is currently unavailable. Check the Skills tools configuration.",
|
|
"sort": {
|
|
"name_asc": "Name (A-Z)",
|
|
"name_desc": "Name (Z-A)",
|
|
"source": "Type"
|
|
},
|
|
"origin": {
|
|
"all": "All Types",
|
|
"builtin": "Builtin",
|
|
"third_party": "Third-Party",
|
|
"manual": "Manual"
|
|
},
|
|
"summary": {
|
|
"total": "Total Skills"
|
|
},
|
|
"detail_tabs": {
|
|
"preview": "Preview",
|
|
"raw": "Raw",
|
|
"meta": "Metadata"
|
|
},
|
|
"metadata": {
|
|
"name": "Name",
|
|
"description": "Description",
|
|
"registry": "Registry",
|
|
"url": "URL",
|
|
"version": "Installed Version",
|
|
"lines": "Line Count",
|
|
"characters": "Character Count"
|
|
},
|
|
"marketplace_installDisabled": {
|
|
"installing": "Installing...",
|
|
"installed": "Already installed",
|
|
"cannotInstall": "Cannot install: related tool is not enabled"
|
|
}
|
|
},
|
|
"tools": {
|
|
"search_placeholder": "Search tools...",
|
|
"no_results": "No tools match your criteria.",
|
|
"filter": {
|
|
"all": "All Status",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"blocked": "Blocked"
|
|
},
|
|
"empty": "No tools are available.",
|
|
"enable_success": "Tool enabled.",
|
|
"disable_success": "Tool disabled.",
|
|
"toggle_error": "Failed to update tool state.",
|
|
"library_title": "Tool Library",
|
|
"library_description": "Browse and manage the toolset available to your AI agents.",
|
|
"web_search": {
|
|
"title": "Web Search",
|
|
"description": "Provide web search capability for agents to find the latest real-world info. Automatically routes to the optimal active provider.",
|
|
"unsaved_prompt": "This change has not been saved yet. Save to write it into the Web Search configuration.",
|
|
"global_settings": "General",
|
|
"providers_config": "Integrations",
|
|
"load_error": "Failed to load web search configuration.",
|
|
"save": "Save Changes",
|
|
"open_settings": "Open Settings",
|
|
"save_success": "Settings saved successfully.",
|
|
"save_error": "Failed to save settings.",
|
|
"provider": "Primary Provider",
|
|
"provider_description": "Select the default provider to use when the web search tool handles a request.",
|
|
"proxy": "HTTPS Proxy",
|
|
"proxy_description": "Optional global HTTP/S proxy for underlying web requests.",
|
|
"prefer_native": "Prefer Native Search",
|
|
"prefer_native_hint": "When enabled, the model may use its built-in search capability instead of the configured provider list.",
|
|
"provider_hint": "Enable this provider and fill any required connection settings.",
|
|
"max_results": "Max Results",
|
|
"base_url": "Base URL",
|
|
"base_url_placeholder": "Optional endpoint override",
|
|
"api_key": "API Key / Token",
|
|
"api_key_placeholder": "Enter API key, leave it blank to keep the original key",
|
|
"none": "Unavailable"
|
|
},
|
|
"status": {
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"blocked": "Blocked"
|
|
},
|
|
"categories": {
|
|
"automation": "Automation",
|
|
"filesystem": "Filesystem",
|
|
"web": "Web",
|
|
"communication": "Communication",
|
|
"skills": "Skills",
|
|
"agents": "Agents",
|
|
"hardware": "Hardware",
|
|
"discovery": "Discovery"
|
|
},
|
|
"reasons": {
|
|
"requires_linux": "This tool only works on Linux hosts with the required device files exposed.",
|
|
"requires_serial_platform": "This tool currently supports Linux, macOS, and Windows hosts with accessible serial ports.",
|
|
"requires_skills": "Enable `tools.skills` before this skill-registry tool can be used.",
|
|
"requires_subagent": "Enable `tools.subagent` before the spawn tool can delegate work.",
|
|
"requires_mcp_discovery": "Enable `tools.mcp.discovery` before MCP discovery tools become available.",
|
|
"requires_web_search_provider": "Configure at least one ready external web-search provider."
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"load_error": "Failed to load configuration. Please refresh and try again.",
|
|
"workspace": "Workspace Directory",
|
|
"workspace_hint": "Base directory for agent file operations.",
|
|
"restrict_workspace": "Restrict to Workspace",
|
|
"restrict_workspace_hint": "Only allow file operations inside workspace.",
|
|
"split_on_marker": "Chatty Mode",
|
|
"split_on_marker_hint": "Split long messages into short ones like real human chatting.",
|
|
"tool_feedback_enabled": "Tool Feedback",
|
|
"tool_feedback_enabled_hint": "Send a short execution note into the current chat before each tool runs.",
|
|
"tool_feedback_separate_messages": "Separate Feedback Messages",
|
|
"tool_feedback_separate_messages_hint": "Keep each tool feedback update as its own chat message instead of reusing a single placeholder/progress message.",
|
|
"tool_feedback_max_args_length": "Tool Args Preview Length",
|
|
"tool_feedback_max_args_length_hint": "Maximum number of characters shown in each tool argument preview. Set to 0 to use the default.",
|
|
"exec_enabled": "Allow Commands",
|
|
"exec_enabled_hint": "Enable or disable command execution for the app. When disabled, no command requests will run.",
|
|
"allow_remote": "Allow Remote Commands",
|
|
"allow_remote_hint": "When enabled, remote sessions or non-local contexts can also run commands. When disabled, command execution stays limited to local safe contexts.",
|
|
"enable_deny_patterns": "Enable Blacklist",
|
|
"enable_deny_patterns_hint": "When enabled, the app blocks commands that match its built-in dangerous patterns and the custom command blacklist below.",
|
|
"exec_timeout_seconds": "Command Timeout (seconds)",
|
|
"exec_timeout_seconds_hint": "Maximum runtime for command requests. Set to 0 to use the default timeout.",
|
|
"custom_deny_patterns": "Command Blacklist",
|
|
"custom_deny_patterns_hint": "Add extra command-blocking rules, one regular expression per line. A command matching any rule here will be blocked.",
|
|
"custom_allow_patterns": "Command Whitelist",
|
|
"custom_allow_patterns_hint": "Add extra command-allow rules, one regular expression per line. A command matching any rule here skips blacklist matching, but other safety limits still apply.",
|
|
"custom_patterns_placeholder": "^rm\\s+-rf\\b\n^git\\s+push\\b",
|
|
"pattern_detector_title": "Pattern Detection Tool",
|
|
"pattern_detector_hint": "Enter a command to test if it matches any blacklist or whitelist patterns.",
|
|
"pattern_detector_input_placeholder": "Enter a command to test, e.g., rm -rf /tmp",
|
|
"pattern_detector_test_button": "Test",
|
|
"pattern_detector_result_allowed": "Allowed (matches whitelist)",
|
|
"pattern_detector_result_blocked": "Blocked (matches blacklist)",
|
|
"pattern_detector_result_no_match": "No match (will use default rules)",
|
|
"allow_shell_execution": "Allow Scheduled Commands",
|
|
"allow_shell_execution_hint": "Allow scheduled tasks to run commands by default. When disabled, users must pass command_confirm=true to schedule a command task.",
|
|
"cron_exec_timeout": "Scheduled Command Timeout (minutes)",
|
|
"cron_exec_timeout_hint": "Maximum runtime for scheduled commands. Set to 0 to disable the timeout.",
|
|
"max_tokens": "Max Tokens",
|
|
"max_tokens_hint": "Upper token limit per model response.",
|
|
"context_window": "Context Window",
|
|
"context_window_hint": "Model input context capacity in tokens. Leave empty to use the default (4x max tokens).",
|
|
"max_tool_iterations": "Max Tool Iterations",
|
|
"max_tool_iterations_hint": "Maximum tool-call loops in a single task.",
|
|
"summarize_threshold": "Summarize Message Threshold",
|
|
"summarize_threshold_hint": "Start summarization after this many messages.",
|
|
"summarize_token_percent": "Summarize Token Percent",
|
|
"summarize_token_percent_hint": "Used when conversation summary is triggered.",
|
|
"turn_profile": "Request Context Policy",
|
|
"turn_profile_hint": "Controls what context each request carries. Leave disabled to keep the normal chat behavior.",
|
|
"turn_profile_enabled": "Enable policy",
|
|
"turn_profile_enabled_hint": "When enabled, this policy applies to every new turn. When disabled, PicoClaw uses the original context behavior.",
|
|
"turn_profile_mode_default": "Default",
|
|
"turn_profile_mode_off": "Off",
|
|
"turn_profile_mode_custom": "Allow List",
|
|
"turn_profile_history": "History Context",
|
|
"turn_profile_history_hint": "Default includes earlier messages from this session. Off makes the turn behave like a fresh chat and skips saving its result back to history.",
|
|
"turn_profile_system_prompt": "System Context",
|
|
"turn_profile_system_prompt_hint": "Default includes PicoClaw identity, workspace, memory, and runtime instructions. Off keeps only system prompts explicitly supplied by the request.",
|
|
"turn_profile_skills": "Skill Prompts",
|
|
"turn_profile_skills_hint": "Default includes available skills and active skill instructions. Off hides them. Allow List keeps only skill names entered one per line.",
|
|
"turn_profile_skills_allow_placeholder": "skill-name\nanother-skill",
|
|
"turn_profile_tools": "Callable Tools",
|
|
"turn_profile_tools_hint": "Default exposes normal tools. Off prevents tool calls. Allow List keeps only tool names entered one per line, such as web_search.",
|
|
"turn_profile_tools_allow_placeholder": "web_search\nweb_fetch",
|
|
"session_scope": "Session Scope",
|
|
"session_scope_hint": "How chat context is isolated across peers/channels.",
|
|
"session_scope_per_channel_peer": "Per Channel + Peer",
|
|
"session_scope_per_channel_peer_desc": "Separate context for each user in each channel.",
|
|
"session_scope_per_channel": "Per Channel",
|
|
"session_scope_per_channel_desc": "One shared context per channel.",
|
|
"session_scope_per_peer": "Per Peer",
|
|
"session_scope_per_peer_desc": "One context per user across channels.",
|
|
"session_scope_global": "Global",
|
|
"session_scope_global_desc": "All messages share one global context.",
|
|
"heartbeat_enabled": "Heartbeat",
|
|
"heartbeat_enabled_hint": "Send periodic heartbeat messages.",
|
|
"heartbeat_interval": "Heartbeat Interval (minutes)",
|
|
"heartbeat_interval_hint": "Interval in minutes between heartbeat signals.",
|
|
"devices_enabled": "Enable Devices",
|
|
"devices_enabled_hint": "Enable hardware-device integrations.",
|
|
"monitor_usb": "Monitor USB",
|
|
"monitor_usb_hint": "Watch USB plug/unplug events when devices are enabled.",
|
|
"autostart_label": "Launch at Login",
|
|
"autostart_hint": "Start PicoClaw Web automatically when you log in.",
|
|
"autostart_unsupported": "Launch at login is not supported on this platform.",
|
|
"autostart_load_error": "Failed to load launch-at-login status.",
|
|
"server_port": "Service Port",
|
|
"server_port_hint": "HTTP port used by PicoClaw Web.",
|
|
"launcher_section_hint": "Changes in this section take effect after the launcher restarts.",
|
|
"gateway_restart_hint": "Changes in this section take effect after the gateway restarts.",
|
|
"dashboard_password": "Login Password",
|
|
"dashboard_password_hint": "Set a new login password.",
|
|
"dashboard_password_placeholder": "At least 8 characters",
|
|
"dashboard_password_confirm": "Confirm New Password",
|
|
"dashboard_password_confirm_hint": "Enter the new login password again.",
|
|
"dashboard_password_confirm_placeholder": "Repeat password",
|
|
"dashboard_password_required": "Enter and confirm the new login password.",
|
|
"dashboard_password_mismatch": "The login passwords do not match.",
|
|
"dashboard_password_min_length": "Login password must be at least 8 characters.",
|
|
"lan_access": "Enable LAN Access",
|
|
"lan_access_hint": "Allow access from other devices on your local network.",
|
|
"allowed_cidrs": "Allowed Network CIDRs",
|
|
"allowed_cidrs_hint": "Only clients from these CIDR ranges can access the service. One per line or comma-separated. Leave empty to allow all.",
|
|
"allowed_cidrs_placeholder": "192.168.1.0/24\n10.0.0.0/8",
|
|
"evolution_section_hint": "Let the agent learn from completed turns and prepare skill improvements.",
|
|
"evolution_enabled": "Enable Evolution",
|
|
"evolution_enabled_hint": "Record learning data for completed turns. Draft and apply modes can also generate skill updates.",
|
|
"evolution_mode": "Evolution Mode",
|
|
"evolution_mode_hint": "Observe only records data, Draft prepares candidate skills, Apply can write accepted drafts into workspace skills.",
|
|
"evolution_mode_observe": "Observe",
|
|
"evolution_mode_draft": "Draft",
|
|
"evolution_mode_apply": "Apply",
|
|
"evolution_state_dir": "State Directory",
|
|
"evolution_state_dir_hint": "Optional directory for evolution state. Leave empty to use the workspace default.",
|
|
"evolution_min_task_count": "Minimum Task Count",
|
|
"evolution_min_task_count_hint": "Minimum related tasks required before a pattern can produce a draft.",
|
|
"evolution_min_success_ratio": "Minimum Success Ratio",
|
|
"evolution_min_success_ratio_hint": "Required success ratio for clustered tasks. Use a value greater than 0 and up to 1.",
|
|
"evolution_cold_path_trigger": "Cold Path Trigger",
|
|
"evolution_cold_path_trigger_hint": "Choose when draft generation runs for eligible learning records.",
|
|
"evolution_cold_path_after_turn": "After each turn",
|
|
"evolution_cold_path_scheduled": "Scheduled",
|
|
"evolution_cold_path_manual": "Off",
|
|
"evolution_cold_path_times": "Scheduled Times",
|
|
"evolution_cold_path_times_hint": "Run times for scheduled cold-path processing. Enter one HH:MM value per line.",
|
|
"mcp_section_hint": "Configure MCP servers without editing config.json manually.",
|
|
"mcp_enabled": "Enable MCP",
|
|
"mcp_enabled_hint": "Turn MCP server integration on or off.",
|
|
"mcp_discovery_enabled": "Enable MCP Discovery",
|
|
"mcp_discovery_enabled_hint": "Allow MCP discovery tools to search registered MCP servers.",
|
|
"mcp_discovery_ttl": "Discovered tool unlock TTL",
|
|
"mcp_discovery_ttl_hint": "How many tool-execution TTL ticks discovered tools remain available after search.",
|
|
"mcp_discovery_max_results": "Discovery Max Results",
|
|
"mcp_discovery_max_results_hint": "Maximum MCP discovery matches returned per query.",
|
|
"mcp_discovery_use_bm25": "Use BM25 Ranking",
|
|
"mcp_discovery_use_bm25_hint": "Use BM25 lexical scoring for MCP discovery results.",
|
|
"mcp_discovery_use_regex": "Enable Regex Search",
|
|
"mcp_discovery_use_regex_hint": "Allow regex-based matching in MCP discovery.",
|
|
"mcp_servers": "MCP Servers",
|
|
"mcp_servers_hint": "Add, edit, or remove MCP servers.",
|
|
"mcp_server_new": "New MCP server",
|
|
"mcp_server_add": "Add server",
|
|
"mcp_server_remove": "Remove",
|
|
"mcp_server_enabled": "Enabled",
|
|
"mcp_server_discovery_mode": "Discovery mode",
|
|
"mcp_server_discovery_mode_inherit": "Follow global discovery mode",
|
|
"mcp_server_discovery_mode_deferred": "Deferred discovery",
|
|
"mcp_server_discovery_mode_eager": "Eager registration",
|
|
"mcp_server_name_placeholder": "Server name (e.g. github)",
|
|
"mcp_server_url_placeholder": "Server URL (e.g. https://example.com/mcp)",
|
|
"mcp_server_command_placeholder": "Command (e.g. npx)",
|
|
"mcp_server_env_file_placeholder": "Environment file path (optional)",
|
|
"mcp_server_args_placeholder": "Args, one per line",
|
|
"mcp_server_env_placeholder": "Environment JSON object",
|
|
"mcp_server_headers_placeholder": "Headers JSON object",
|
|
"sections": {
|
|
"agent": "Agent",
|
|
"runtime": "Runtime",
|
|
"evolution": "Evolution",
|
|
"mcp": "MCP",
|
|
"exec": "Run Commands",
|
|
"cron": "Cron Tasks",
|
|
"launcher": "Launcher",
|
|
"devices": "Devices"
|
|
},
|
|
"open_raw": "Raw Config",
|
|
"back_to_visual": "Visual Config",
|
|
"raw_json_title": "Raw JSON Configuration",
|
|
"json_placeholder": "Enter valid JSON configuration...",
|
|
"save_success": "Configuration saved successfully.",
|
|
"save_error": "Failed to save configuration.",
|
|
"reset_confirm_title": "Reset Changes",
|
|
"reset_confirm_desc": "Are you sure you want to reset your unsaved changes back to the last saved state?",
|
|
"reset_success": "Changes have been reset to the last saved state.",
|
|
"invalid_json": "Invalid JSON format.",
|
|
"format_success": "JSON formatted successfully.",
|
|
"format_error": "Invalid JSON format.",
|
|
"format": "Format",
|
|
"unsaved_changes": "You have unsaved changes.",
|
|
"factory_reset": "Factory Reset",
|
|
"factory_reset_confirm_title": "Reset to Factory Defaults",
|
|
"factory_reset_confirm_desc": "This will reset all configuration to factory defaults. API keys and security credentials will be preserved. A backup of the current config will be created.",
|
|
"factory_reset_confirm": "Reset to Defaults",
|
|
"factory_reset_success": "Configuration has been reset to factory defaults.",
|
|
"factory_reset_error": "Failed to reset configuration."
|
|
},
|
|
"logs": {
|
|
"log_level_error": "Failed to update log level.",
|
|
"clear": "Clear logs",
|
|
"empty": "Waiting for logs..."
|
|
}
|
|
},
|
|
"tour": {
|
|
"skip": "Skip tour",
|
|
"prev": "Previous",
|
|
"next": "Next",
|
|
"finish": "Finish",
|
|
"welcome": {
|
|
"title": "Welcome to PicoClaw",
|
|
"description": "PicoClaw is a powerful AI assistant platform. Let's take a few seconds to help you complete the basic setup."
|
|
},
|
|
"models": {
|
|
"title": "Configure Models",
|
|
"description": "Click the \"Models\" menu on the left to configure API keys for AI providers. Only configured models can be used for chat."
|
|
},
|
|
"gateway": {
|
|
"title": "Start Gateway",
|
|
"description": "After configuring models, click the \"Start Gateway\" button at the top to begin chatting with AI."
|
|
},
|
|
"docs": {
|
|
"title": "View Documentation",
|
|
"description": "Need more help? Click the documentation button in the top right corner to view detailed guides and configuration docs."
|
|
}
|
|
}
|
|
}
|