nanobot/webui/src/i18n/locales/en/common.json

1340 lines
52 KiB
JSON

{
"app": {
"brand": "nanobot",
"loading": {
"connecting": "Connecting to nanobot…",
"boot": "Loading nanobot…"
},
"error": {
"title": "Couldn't reach nanobot",
"gatewayHint": "Make sure the gateway is running (`nanobot gateway`) and that this page is open on the same machine."
},
"auth": {
"title": "Authentication required",
"hint": "Enter the secret configured as tokenIssueSecret in your gateway config.",
"placeholder": "Password",
"submit": "Connect",
"invalid": "Invalid password. Try again."
},
"account": {
"section": "Account",
"logoutHint": "Disconnect this browser from the gateway.",
"logout": "Sign out"
},
"system": {
"section": "System",
"restartHint": "Restart nanobot to apply runtime changes.",
"restart": "Restart nanobot",
"restarting": "Restarting...",
"restartEngine": "Restart engine",
"restartingEngine": "Restarting engine..."
},
"restart": {
"completed": "Restart completed in {{seconds}}s."
},
"documentTitle": {
"base": "nanobot",
"chat": "{{title}} · nanobot"
},
"meta": {
"description": "nanobot web UI — chat with your nanobot workspace."
}
},
"sidebar": {
"navigation": "Sidebar navigation",
"collapse": "Collapse sidebar",
"newChat": "New topic",
"searchAria": "Search",
"searchPlaceholder": "Search",
"searchResults": "Results",
"noSearchResults": "No matching topics.",
"recent": "Recent topics",
"settings": "Settings",
"language": {
"label": "Language",
"ariaLabel": "Change language"
},
"apps": "Apps",
"automations": "Automations",
"skills": {
"title": "Skills"
}
},
"settings": {
"backToChat": "Back to chat",
"sidebar": {
"title": "Settings",
"ariaLabel": "Settings sections"
},
"nav": {
"general": "General",
"byok": "BYOK",
"overview": "Overview",
"appearance": "Appearance",
"models": "Models",
"providers": "Providers",
"image": "Image",
"voice": "Voice",
"browser": "Web",
"channels": "Channels",
"cliApps": "CLI Apps",
"mcp": "MCP",
"runtime": "System",
"advanced": "Security",
"apps": "Apps",
"automations": "Automations",
"skills": "Skills"
},
"sections": {
"interface": "Interface",
"ai": "AI",
"system": "System",
"about": "About",
"status": "Status",
"localPreferences": "Local preferences",
"presets": "Presets",
"imageGeneration": "Image generation",
"imageDefaults": "Defaults",
"webSearch": "Web search",
"webBehavior": "Behavior",
"cliApps": "CLI apps",
"mcp": "MCP services",
"identity": "Identity",
"webuiSafety": "Web safety",
"capabilities": "Capabilities",
"apps": "Apps",
"nativeHost": "Native host",
"hostSafety": "App safety",
"voiceInput": "Voice input"
},
"models": {
"selectModel": "Select model",
"addConfiguration": "Add configuration",
"newConfiguration": "New model configuration",
"newConfigurationHelp": "Save a provider and model as a one-click option.",
"configurationName": "Configuration name",
"configurationNameHelp": "Rename this saved model configuration.",
"configurationNamePlaceholder": "Fast writing",
"callOrder": "Model call order",
"primary": "Primary",
"fallbackNumber": "Fallback {{number}}",
"addToOrder": "Enable preset",
"newPreset": "New model preset",
"newPresetHelp": "Save a reusable model and its generation settings.",
"presets": "Model presets",
"editPreset": "Edit preset",
"presetName": "Preset name",
"presetNameHelp": "A short name used throughout model settings.",
"presetNamePlaceholder": "Fast writing",
"advancedOptions": "Advanced options",
"advancedSummary": "Context {{context}} · Max {{max}} tokens",
"maxTokens": "Max output tokens",
"temperature": "Temperature",
"reasoningEffort": "Reasoning effort",
"convertTitle": "Convert the current model setup",
"convertHelp": "Turn the existing primary and fallback models into presets so their order can be managed here.",
"converting": "Converting...",
"convertAction": "Convert to presets",
"dragToReorder": "Drag to reorder",
"moveUp": "Move up",
"moveDown": "Move down",
"removeFromOrder": "Disable preset",
"inCallOrder": "In call order",
"disabled": "Disabled",
"noPresets": "No model presets yet",
"noPresetsHelp": "Create a preset, then add it to the call order.",
"removeBeforeDelete": "Remove this preset from the call order before deleting it.",
"providerSetupRequired": "Provider setup required",
"configureProviderBeforeSaving": "Configure this provider before saving the preset.",
"deletePresetTitle": "Delete model preset?",
"deletePresetHelp": "This removes the preset “{{name}}”. Provider credentials are not affected.",
"searchModels": "Search or type model ID",
"useCustomModel": "Use",
"loadingModels": "Loading models...",
"searchCatalog": "Search provider catalog to choose a model.",
"modelsAvailable": "available",
"noModelResults": "No matching models.",
"loadFailed": "Model list unavailable.",
"unsupportedModelList": "Type a model ID manually.",
"providerNotConfigured": "Configure this provider before loading models.",
"autoProviderCustomOnly": "Auto provider mode uses custom model IDs."
},
"rows": {
"theme": "Theme",
"language": "Language",
"provider": "Provider",
"model": "Model",
"restart": "Restart nanobot",
"configPath": "Config path",
"activePreset": "Active preset",
"gateway": "Gateway",
"restartState": "Restart state",
"pendingChanges": "Pending changes",
"currentModel": "Current configuration",
"selectedPreset": "Selected preset",
"presetModel": "Preset model",
"density": "Density",
"activityMode": "Activity detail",
"fileEditDisplay": "File edit display",
"codeWrap": "Code wrapping",
"brandLogos": "Brand logos",
"maxResults": "Max results",
"timeout": "Timeout",
"jinaReader": "Jina reader",
"imageGeneration": "Image generation",
"imageProvider": "Image provider",
"imageProviderStatus": "Provider status",
"imageProviderBase": "Provider base",
"imageModel": "Image model",
"defaultAspectRatio": "Default aspect",
"defaultImageSize": "Default size",
"maxImagesPerTurn": "Max images per turn",
"imageSaveDir": "Save directory",
"botName": "Bot name",
"botIcon": "Bot icon",
"timezone": "Timezone",
"workspacePath": "Default workspace",
"localServiceAccess": "Local services",
"webuiDefaultAccess": "Default access",
"cliAppsCatalog": "Catalog",
"cliAppsFilter": "Filter",
"engine": "Engine",
"logs": "Logs",
"diagnostics": "Diagnostics",
"contextWindow": "Context window",
"transcription": "Transcription",
"transcriptionProvider": "Provider",
"transcriptionProviderStatus": "Provider status",
"transcriptionModel": "Model",
"transcriptionLanguage": "Language",
"voiceLimits": "Limits"
},
"help": {
"theme": "Switch between light and dark appearance.",
"language": "Choose the language used by the WebUI.",
"provider": "Select the provider that should serve new model requests.",
"model": "Choose the model used by this preset.",
"configPath": "The gateway configuration file currently in use.",
"currentModel": "Used for new replies.",
"selectedModelProvider": "Set by the selected model.",
"selectedModelValue": "Set by the selected model.",
"selectedPreset": "Named presets are read-only here; edit them in config.json.",
"presetModel": "Switch to Default to edit model and provider from the WebUI.",
"density": "Stored only in this browser.",
"activityMode": "Choose how much agent activity chrome to show by default.",
"fileEditDisplay": "Choose whether file edit activity opens as line counts or a diff.",
"codeWrap": "Keep long code lines readable on smaller screens.",
"brandLogos": "Show third-party provider and CLI logos in Settings.",
"maxResults": "Results returned by each web_search call.",
"timeout": "Seconds before a search provider request times out.",
"jinaReader": "Use Jina Reader for web_fetch when available.",
"imageGeneration": "Expose generate_image in chats when a configured image provider is available.",
"imageProvider": "Choose the registry provider used by generate_image.",
"imageProviderStatus": "Image generation reuses provider credentials from Providers.",
"imageModel": "Choose a model supported by the selected image provider.",
"defaultAspectRatio": "Used when the prompt does not choose an aspect ratio.",
"defaultImageSize": "Size hint sent to providers that support it.",
"maxImagesPerTurn": "Upper bound for one generate_image request.",
"botName": "Shown wherever nanobot uses a display name.",
"botIcon": "Short emoji or text shown with the bot name.",
"timezone": "Used for schedules and time-aware replies.",
"cliAppsCatalog": "Install only the app-specific CLI adapters nanobot can run locally; native apps stay untouched.",
"cliAppsFilter": "Search by app, category, or capability.",
"localServiceAccess": "Allow Full Access shell commands to reach localhost services.",
"webuiDefaultAccess": "Used by web chats without a project-specific permission.",
"securityManagedControls": "Web fetches always protect local, private, and metadata services. Core channel safety stays in config.json.",
"logs": "Open the native engine log folder.",
"diagnostics": "Export a small runtime report for support.",
"localServiceAccessNative": "Allow Full Access shell commands to reach services on this Mac.",
"webuiDefaultAccessNative": "Used by native chats without a project-specific permission.",
"contextWindow": "Choose the default context budget for this model configuration.",
"transcription": "Transcribe microphone input before sending it. Chat channel voice messages use the same settings.",
"transcriptionProvider": "Uses the matching provider credentials from Providers.",
"transcriptionProviderStatus": "API keys stay under providers, not in transcription settings.",
"transcriptionModel": "Leave as the resolved default unless your provider needs a custom model id.",
"transcriptionLanguage": "Optional ISO-639 hint such as en, zh, ja, or ko."
},
"timezone": {
"select": "Select timezone",
"search": "Search timezone",
"empty": "No matching timezones."
},
"cliApps": {
"allCategories": "All categories",
"availableCount": "{{count}} apps",
"installedCount": "{{count}} CLIs installed",
"summary": "{{installed}} of {{total}} CLIs installed",
"filterAll": "All",
"filterInstalled": "Installed CLIs",
"filterNotInstalled": "Not installed",
"searchPlaceholder": "Search CLIs",
"loading": "Loading CLI Apps...",
"empty": "No CLI Apps match this filter.",
"statusInstalled": "App ready",
"statusMissing": "Missing",
"statusAvailable": "Available",
"statusUnsupported": "Unsupported",
"statusNotInstalled": "App not installed",
"requires": "Requires",
"test": "Test app",
"update": "Update app",
"uninstall": "Uninstall app",
"install": "Install app",
"readyTitle": "@{{name}} is ready",
"readyStatus": "Ready",
"readyTry": "Try @{{name}}",
"readyCopied": "Copied",
"readyPrompt": "Ask nanobot to use @{{name}} for this task.",
"openChat": "Open chat",
"unsupported": "Unsupported",
"unavailable": "Unavailable",
"noDescription": "No description available."
},
"about": {
"version": "Version",
"checking": "Checking...",
"checkForUpdates": "Check for updates",
"upToDate": "You're up to date",
"updateAvailable": "Update available v{{version}}"
},
"mcp": {
"allCategories": "All categories",
"summary": "{{installed}} of {{total}} presets enabled",
"filterAll": "All",
"filterInstalled": "Enabled",
"filterNotInstalled": "Not enabled",
"searchPlaceholder": "Search MCP presets",
"moreOptions": "Add integration",
"moreOptionsSubtitle": "Connect a custom tool server or import an existing configuration.",
"customTitle": "Custom MCP",
"customSubtitle": "Add any stdio, HTTP, or SSE MCP server.",
"customAction": "Custom",
"importAction": "Import",
"serverName": "Server name",
"serverUrl": "URL",
"transport": "Transport",
"command": "Command",
"args": "Args JSON",
"headers": "Headers JSON",
"env": "Env JSON",
"timeout": "Tool timeout",
"advancedOptions": "Advanced options",
"hideAdvanced": "Hide advanced",
"saveCustom": "Save MCP",
"configImport": "Import mcp.json",
"importConfig": "Import",
"restartRequired": "Restart nanobot to connect updated MCP tools.",
"toolsFound": "{{count}} tools",
"loading": "Loading MCP presets...",
"empty": "No MCP presets match this filter.",
"openDocs": "Open docs",
"test": "Test",
"remove": "Remove",
"enable": "Enable",
"enabled": "Enabled",
"setup": "Connect",
"configure": "Connect",
"connectTitle": "Connect {{name}}",
"connectHint": "Add the key from your account settings.",
"saveAndEnable": "Save and enable",
"updateSetup": "Update setup",
"configured": "configured",
"keepExisting": "Leave blank to keep existing",
"statusConfigured": "Configured",
"statusMissingCredentials": "Needs key",
"statusMissingDependency": "Needs dependency",
"statusComingSoon": "Coming soon",
"statusNotInstalled": "Not enabled",
"toolScope": "Tools",
"allTools": "All",
"noTools": "None",
"testForTools": "Run Test to inspect and choose individual tools."
},
"values": {
"light": "Light",
"dark": "Dark",
"notAvailable": "Not available",
"enabled": "Enabled",
"disabled": "Disabled",
"restartPending": "Restart pending",
"ready": "Ready",
"privateEngine": "Private engine",
"unixSocket": "Unix socket",
"defaultWorkspace": "Default workspace",
"comfortable": "Comfortable",
"compact": "Compact",
"auto": "Auto",
"default": "Default",
"expanded": "Expanded",
"summary": "Summary",
"diff": "Diff",
"collapsedDiff": "Collapsed diff",
"on": "On",
"off": "Off",
"defaultPermission": "Default Permission",
"fullAccess": "Full Access",
"configured": "Configured",
"notConfigured": "Not configured",
"pending": "Pending",
"restartingEngine": "Restarting"
},
"status": {
"loading": "Loading settings...",
"loadError": "Could not load settings",
"unsaved": "Unsaved changes.",
"upToDate": "Up to date.",
"savedRestart": "Saved. Restart nanobot to apply.",
"restartAfterSaving": "Save changes, then restart when ready.",
"savedRestartApply": "Saved. Restart when ready.",
"imageProviderRestart": "Image provider changes saved. Restart when ready.",
"hostRestartAfterSaving": "Save changes and nanobot will restart its engine.",
"hostRestartPending": "Saved. Restarting engine when ready.",
"hostApiUnavailable": "Host actions are only available inside the native app.",
"logsOpened": "Opened logs folder.",
"logsOpenFailed": "Could not open logs folder.",
"diagnosticsExported": "Diagnostics exported to {{path}}.",
"diagnosticsExportFailed": "Could not export diagnostics."
},
"actions": {
"save": "Save",
"saving": "Saving",
"saveOrder": "Save order",
"savePreset": "Save preset",
"edit": "Edit",
"delete": "Delete",
"deleting": "Deleting...",
"cancel": "Cancel",
"open": "Open",
"export": "Export",
"opening": "Opening...",
"exporting": "Exporting..."
},
"byok": {
"description": "Bring your own provider keys. Nanobot reads these values from the current config and only configured providers can be used in model presets.",
"configured": "Configured",
"notConfigured": "Not configured",
"configuredSection": "Configured",
"notConfiguredSection": "Not configured",
"showMore": "Show {{count}} more",
"showLess": "Show fewer",
"apiKey": "API key",
"apiBase": "API base",
"apiKeyPlaceholder": "Enter API key",
"apiKeyConfiguredPlaceholder": "Leave blank to keep the current key",
"configuredKeyHint": "Configured key",
"apiBasePlaceholder": "Use provider default",
"apiKeyRequired": "API key is required to configure this provider.",
"showApiKey": "Show API key",
"hideApiKey": "Hide API key",
"noConfiguredProviders": "No configured providers",
"configureFirst": "Configure a provider in BYOK first.",
"openByok": "Open BYOK",
"tabs": {
"ariaLabel": "BYOK credential type",
"llm": "LLM",
"webSearch": "Web Search"
},
"webSearch": {
"provider": "Search provider",
"providerHelp": "Choose the backend used by the web search tool.",
"selectProvider": "Select provider",
"credentials": "Credentials",
"noCredentialRequired": "No key required",
"noCredentialHelp": "DuckDuckGo works without a saved API key.",
"apiKeyHelp": "Stored in config and masked after saving.",
"baseUrl": "Base URL",
"baseUrlHelp": "SearXNG needs the URL of your own instance.",
"baseUrlPlaceholder": "https://search.example.com",
"apiKeyRequired": "API key is required for this search provider.",
"baseUrlRequired": "Base URL is required for SearXNG.",
"missingCredential": "Add the required credential before saving.",
"saveHint": "Changes apply to new web search requests."
}
},
"overview": {
"model": "Current model",
"providers": "Providers",
"configuredCount": "{{count}} configured",
"totalProviders": "{{count}} available",
"webSearch": "Web search",
"imageGeneration": "Image generation",
"voiceInput": "Voice input",
"workspace": "Workspace"
},
"usage": {
"title": "Token activity",
"shortTitle": "Token Usage",
"subtitle": "Provider-reported usage over the last 12 months.",
"empty": "Token activity will appear after new model replies.",
"totalTokens": "Total tokens",
"peakTokens": "Peak tokens",
"thirtyDayTokens": "30-day tokens",
"currentStreak": "Current streak",
"longestStreak": "Longest streak",
"daysValue": "{{count}}d",
"last30": "30 days",
"activeDays": "Active days",
"requests": "Requests",
"estimated": "estimated",
"includesEstimates": "includes estimates",
"cellTitle": "{{date}}: {{tokens}} tokens, {{requests}} requests",
"sources": {
"user": "Chat",
"api": "API",
"cron": "Automations",
"dream": "Memory",
"system": "System"
}
},
"providers": {
"title": "Model providers",
"searchPlaceholder": "Search providers",
"noMatches": "No providers match this search.",
"addOwnProvider": "Add your own model provider",
"customProvider": "Custom provider",
"customProviderName": "Provider name",
"customProviderNamePlaceholder": "My model provider",
"saveProvider": "Save provider",
"advancedOptions": "Advanced options",
"saveAdvancedBeforeSignIn": "Save advanced changes before signing in.",
"apiType": "API type",
"proxy": "Network proxy",
"thinkingStyle": "Thinking style",
"region": "Region",
"profile": "Profile",
"extraHeaders": "Extra headers",
"extraBody": "Extra body",
"extraQuery": "Extra query"
},
"legal": {
"thirdPartyBrands": "Product names, logos, and brands are property of their respective owners. Use is for identification only and does not imply endorsement."
},
"image": {
"selectProvider": "Select provider",
"selectAspect": "Select aspect",
"selectSize": "Select size",
"configureProvider": "Configure provider",
"missingCredential": "Configure this provider before enabling image generation."
},
"api": {
"title": "API server",
"openaiCompatible": "OpenAI-compatible API",
"description": "Connect SDKs and agents through a local /v1 endpoint.",
"start": "Start API server",
"starting": "Starting...",
"stop": "Stop",
"stopping": "Stopping...",
"access": "Access",
"thisDevice": "This device",
"localNetwork": "Local network",
"localHelp": "Only this device can connect.",
"networkHelp": "Other devices can connect; an API key is required.",
"port": "Port",
"portHelp": "The API uses this local port.",
"apiKey": "API key",
"apiKeyHelp": "Clients send this as a Bearer token.",
"apiKeyRequired": "Required before exposing the API to your network.",
"apiKeyPlaceholder": "Enter an API key",
"autoInstall": "API support will be installed automatically when you start it."
},
"observability": {
"title": "Observability",
"configured": "Tracing credentials are available to nanobot.",
"environment": "Set LANGFUSE_SECRET_KEY and LANGFUSE_PUBLIC_KEY, then restart nanobot.",
"enable": "Enable tracing support"
},
"apps": {
"description": "Add tools to nanobot, then @ them in chat.",
"cliLabel": "App",
"mcpLabel": "Integration",
"channelLabel": "Channel",
"featureLabel": "Feature",
"filterAll": "Ready",
"filterPlugins": "Plugins",
"filterCli": "Apps",
"filterMcp": "Integrations",
"enabledSummary": "{{count}} ready",
"caption": "{{cli}} apps · {{mcp}} integrations",
"searchPlaceholder": "Search tools",
"featured": "Tools",
"loading": "Loading Apps...",
"empty": "No tools match this view.",
"restartRequired": "Restart nanobot to apply updated apps and integrations."
},
"channels": {
"description": "Connect chat apps, email, and WebUI to nanobot.",
"caption": "{{enabled}} running · {{total}} channels",
"searchPlaceholder": "Search channels",
"backToChannels": "All channels",
"catalog": "Channels",
"loading": "Loading Channels...",
"empty": "No channels match this filter.",
"restartRequired": "Restart nanobot to apply updated channel support.",
"requires": "Requires: {{requirements}}",
"setUp": "Set up",
"setupGuide": "Setup guide",
"setupSummary": "Enable only turns on nanobot support. Add the platform credentials, then restart nanobot.",
"configKeys": "Config keys",
"enable": "Enable channel",
"disable": "Disable channel",
"needsConfig": "Needs setup",
"connect": "Connect",
"reconnect": "Reconnect",
"advanced": "Advanced",
"checkAndEnable": "Check and enable",
"checkConnection": "Check connection",
"checkedAndEnabled": "Checked and enabled.",
"checking": "Checking...",
"checkOnly": "Check only",
"commandCopied": "Command copied.",
"commandCopyFailed": "Could not copy command.",
"configuredInstances": "{{count}} instances configured",
"connectPreview": "The in-browser connect flow is next. For now, run the command below.",
"copyCommand": "Copy command",
"filterAll": "All",
"filterOff": "Not running",
"filterOn": "Running",
"helperCopied": "{{name}} copied.",
"helperCopyFailed": "Could not copy {{name}}.",
"hideSecret": "Hide secret",
"instanceConfigured": "Configured",
"instanceNeedsSetup": "Needs setup",
"runtimeFailed": "Failed",
"runtimeStarting": "Starting",
"runtimeStopped": "Not running",
"managedByWebui": "Managed by WebUI",
"officialGuide": "Official guide",
"optional": "Optional",
"providerPreset": "Provider",
"requiredSetup": "Required setup",
"savedSecret": "Saved",
"savedSecretPlaceholder": "Saved secret",
"savedSettings": "Saved settings.",
"saveSettings": "Save settings",
"selectChannel": "View {{name}} settings",
"setupSteps": "Next steps",
"showSecret": "Show secret",
"toggleChannel": "{{name}} channel",
"toggleInstance": "{{name}} instance",
"tryIt": "Try it",
"validationFailed": "Check the required setup before enabling.",
"validation": {
"connected": "Connected",
"configured": "Configured manually",
"needs_setup": "Needs setup",
"invalid": "Invalid",
"unsupported": "Manual setup"
}
},
"nanobotFeatures": {
"enabled": "Enabled",
"enable": "Enable",
"disable": "Disable",
"ready": "Ready",
"missingDependency": "Support missing",
"installSupport": "Install support",
"installConfirmTitle": "Install support for {{name}}?",
"installConfirmDescription": "nanobot will add what {{name}} needs, then turn it on. Continue?",
"installConfirmAction": "Install and enable",
"websocketRequired": "Required for WebUI",
"channelDisabled": "Channel is disabled",
"notEnabled": "Not enabled"
},
"automations": {
"filters": {
"all": "All",
"active": "Active",
"paused": "Paused",
"failed": "Needs attention",
"system": "System"
},
"sort": {
"next": "Next run",
"last": "Last run",
"updated": "Updated",
"name": "Name"
},
"search": "Search task, message, linked chat, or schedule",
"queue": "Queue",
"loading": "Loading automations...",
"noMatches": "No automations match this view.",
"empty": "No automations yet.",
"emptyHint": "Create one from where it should run so nanobot keeps the right context.",
"oneShot": "One-time",
"systemTask": "System-managed automation",
"localTrigger": "Local trigger",
"labels": {
"schedule": "Schedule",
"next": "Next",
"origin": "Linked chat",
"created": "Created",
"updated": "Updated"
},
"runNow": "Run now",
"pause": "Pause",
"resume": "Resume",
"edit": "Edit",
"delete": "Delete",
"protected": "Protected",
"editTitle": "Edit automation",
"save": "Save",
"deleteTitle": "Delete automation",
"deleteDescription": "This removes {{name}} from the cron store. Past chat messages stay in the session.",
"cancel": "Cancel",
"status": {
"system": "System",
"running": "Running now",
"paused": "Paused",
"failed": "Failed",
"completed": "Completed",
"noSchedule": "No schedule",
"active": "Active"
},
"origin": {
"system": "System",
"unknown": "No linked chat"
},
"channels": {
"api": "API",
"cli": "CLI",
"dingtalk": "DingTalk",
"discord": "Discord",
"email": "Email",
"feishu": "Feishu",
"matrix": "Matrix",
"msteams": "Microsoft Teams",
"qq": "QQ",
"slack": "Slack",
"telegram": "Telegram",
"wechat": "WeChat",
"wecom": "WeCom",
"weixin": "WeChat",
"whatsapp": "WhatsApp"
},
"schedule": {
"at": "At {{time}}",
"every": "Every {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"withTz": "{{summary}} · {{tz}}",
"dailyAt": "Daily at {{time}}",
"weekdaysAt": "Weekdays at {{time}}",
"hourlyAt": "Hourly at :{{minute}}",
"hourlyWindow": "Hourly {{start}}-{{end}} at :{{minute}}",
"local": "Local trigger",
"custom": "Custom schedule"
},
"next": {
"paused": "Paused",
"pending": "Running now",
"local": "Waiting for trigger",
"none": "No next run"
},
"message": {
"showMore": "Show full message",
"showLess": "Show less"
},
"fields": {
"name": "Name",
"message": "Message",
"scheduleType": "Schedule type",
"every": "Every",
"unit": "Unit",
"cronExpression": "Cron expression",
"timezone": "Timezone",
"runAt": "Run at"
},
"scheduleTypes": {
"every": "Interval",
"cron": "Cron",
"at": "Once"
},
"everyUnits": {
"second": "Seconds",
"minute": "Minutes",
"hour": "Hours",
"day": "Days"
},
"validation": {
"nameRequired": "Name is required.",
"messageRequired": "Message is required.",
"intervalRequired": "Interval must be a positive number.",
"cronRequired": "Cron expression is required.",
"timeRequired": "Run time is required.",
"futureRequired": "Run time must be in the future."
}
},
"oauth": {
"authentication": "OAuth authentication",
"signIn": "Sign in",
"signingIn": "Signing in...",
"signInAgain": "Sign in again",
"signOut": "Sign out",
"signedInAs": "Signed in as {{account}}",
"signInHelp": "Sign in from this device; no API key is stored in config.",
"remoteSignInHelp": "Select Sign in to open xAI on your computer, then paste the authorization code shown after login.",
"codexRemoteSignInHelp": "Sign in through this browser, then paste the full localhost callback URL back into nanobot.",
"signInRequired": "Sign in required",
"signInBeforeSaving": "Sign in before saving this provider in the preset.",
"signedIn": "Signed in",
"notSignedIn": "Not signed in",
"proxyLabel": "Network proxy",
"proxySaveBeforeSignIn": "Save proxy changes before signing in.",
"saveProxy": "Save proxy",
"localCodeHelp": "Complete sign-in in your browser. Nanobot usually finishes automatically; if it does not, paste the authorization code below.",
"remoteCodeHelp": "Select Sign in to open xAI on your computer. After signing in, paste the authorization code shown by xAI below.",
"localCallbackHelp": "Complete sign-in in your browser. Nanobot usually finishes automatically; if it does not, copy the full localhost callback URL from the address bar and paste it below.",
"remoteCallbackHelp": "Open ChatGPT in this browser and finish signing in. When the localhost page fails to load, copy the full URL from the address bar and paste it below.",
"authorizationCode": "Authorization code",
"callbackUrl": "Full callback URL",
"callbackUrlPlaceholder": "http://localhost:1455/auth/callback?code=…&state=…",
"openChatGPT": "Open ChatGPT",
"pasteCallbackToContinue": "Paste the callback URL to continue.",
"waitingForCallback": "Waiting for the browser callback…",
"finishSignIn": "Finish sign-in"
},
"skills": {
"description": "Review the instruction skills this agent can load during a conversation.",
"caption": "{{available}} available · {{total}} total",
"views": "Skills views",
"installedTab": "Installed",
"discoverTab": "Discover",
"customGroup": "Custom",
"builtinGroup": "Built-in",
"otherGroup": "Other",
"searchInstalled": "Search installed skills",
"filterAll": "All",
"filterEnabled": "Enabled",
"filterDisabled": "Disabled",
"noMatching": "No matching skills.",
"statusDisabled": "Disabled",
"statusEnabled": "Enabled",
"statusNeedsSetup": "Needs setup",
"showLess": "Show less",
"showMore": "Show more",
"enabledControl": "Use this skill",
"enabledDescription": "Allow the agent to load this skill when its requirements are ready.",
"enableSkill": "Enable {{name}}",
"disableSkill": "Disable {{name}}",
"updateFailed": "Could not update this skill.",
"deleteTitle": "Delete skill",
"deleteDescription": "Remove this skill from the current workspace.",
"deleteAction": "Delete",
"deleteFailed": "Could not delete this skill.",
"deleteConfirmTitle": "Delete {{name}}?",
"deleteConfirmDescription": "This removes the skill files from the current workspace. This action cannot be undone.",
"deleteConfirmAction": "Delete skill",
"instructionsTitle": "Skill instructions",
"setupRequired": "Setup required",
"setupDescription": "Install the missing dependency on the machine running nanobot, then check again.",
"copySetupCommand": "Copy setup command",
"checkAgain": "Check again",
"marketplaceSearchFailed": "Could not search skill marketplaces.",
"marketplaceInstallFailed": "Could not install this skill.",
"marketplaceSearchPlaceholder": "Search skills",
"marketplaceSearchLabel": "Search skills",
"marketplaceSearching": "Searching",
"marketplaceProviderFilter": "Skill source",
"marketplaceProviderAll": "All",
"marketplaceTrendingTitle": "Trending by marketplace",
"marketplaceTrendingDescription": "Each marketplace keeps its own ranking and install metrics.",
"marketplaceViewAll": "View all",
"marketplaceTrendingUnavailable": "Trending skills are temporarily unavailable.",
"marketplaceEmpty": "No skills found for “{{query}}”.",
"marketplaceConfirmTitle": "Install {{name}}?",
"marketplaceConfirmDescription": "This third-party skill comes from {{provider}} ({{source}}) and may include instructions or executable scripts.",
"marketplaceConfirmInstall": "Install skill",
"marketplaceOpen": "Open {{name}} on {{provider}}",
"marketplaceOpenProvider": "Open {{provider}}",
"marketplaceInstalls24h": "{{formattedCount}} installs / 24h",
"marketplaceInstalls": "{{formattedCount}} installs",
"marketplaceNpxRequired": "Node.js with npx is required",
"marketplaceInstalling": "Installing",
"marketplaceInstalled": "Installed",
"marketplaceInstall": "Install",
"marketplaceNoTrend": "No trend yet",
"marketplaceTrendLabel": "8-week install trend",
"featured": "Agent skills",
"empty": "No skills are available.",
"sourceWorkspace": "Custom",
"sourceBuiltin": "Built-in",
"statusAvailable": "Available",
"statusUnavailable": "Unavailable",
"unavailableReason": "Missing: {{reason}}",
"openDetails": "Open details for {{name}}",
"loadingDetail": "Loading skill details...",
"loadFailed": "Could not load skill details.",
"descriptionTitle": "Description",
"source": "Source",
"status": "Status",
"requirements": "Requirements",
"noRequirements": "No explicit requirements.",
"commands": "Commands",
"environment": "Environment variables",
"missingCommands": "Missing CLI",
"missingEnvironment": "Missing ENV",
"unavailableReasonLabel": "Unavailable reason",
"rawInstructions": "Raw SKILL.md",
"rawInstructionsEmpty": "No raw instructions.",
"detailDescription": "Details for {{name}}."
},
"voice": {
"selectProvider": "Select provider",
"configureProvider": "Configure provider",
"languageAuto": "Auto"
}
},
"chat": {
"fallbackTitle": "Topic {{id}}",
"forkTitle": "Fork: {{title}}",
"loading": "Loading…",
"noSessions": "No sessions yet.",
"showMore": "Show {{count}} more",
"collapsed": "{{count}} hidden topics",
"showLess": "Show less",
"actions": "Topic actions for {{title}}",
"newInProject": "Start a new topic in {{project}}",
"activity": {
"running": "Agent running",
"complete": "Agent finished",
"updated": "New activity"
},
"pin": "Pin",
"unpin": "Unpin",
"rename": "Rename",
"renameTitle": "Rename topic",
"renameDescription": "Choose a local sidebar name for this topic.",
"renamePlaceholder": "Topic name",
"renameProjectTitle": "Rename project",
"renameProjectDescription": "Choose a local sidebar name for this project.",
"renameProjectPlaceholder": "Project name",
"renameSave": "Save",
"archive": "Archive",
"unarchive": "Unarchive",
"showArchived": "Show archived",
"hideArchived": "Hide archived",
"delete": "Delete",
"newChat": "New topic",
"groups": {
"pinned": "Pinned",
"all": "Topics",
"projects": "Projects",
"today": "Today",
"yesterday": "Yesterday",
"earlier": "Earlier",
"archived": "Archived"
}
},
"deleteConfirm": {
"title": "Delete this topic?",
"description": "This action cannot be undone.",
"cancel": "Cancel",
"confirm": "Delete",
"automationsDescription": "This chat has scheduled automations. Deleting it will also delete them.",
"moreAutomations": "+ {{count}} more",
"confirmWithAutomations": "Delete",
"schedule": {
"at": "{{time}}",
"every": "Every {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"local": "Local trigger",
"unknown": "Custom schedule"
},
"next": {
"label": "Next: {{time}}",
"disabled": "Paused",
"local": "Waiting for trigger",
"none": "No next run"
}
},
"connection": {
"idle": "Idle",
"connecting": "Connecting…",
"open": "Connected",
"reconnecting": "Reconnecting…",
"closed": "Disconnected",
"error": "Connection error"
},
"thread": {
"loadingConversation": "Loading conversation…",
"empty": {
"greetings": {
"workOn": "What should we work on?",
"start": "Where should we start?",
"build": "What are we building today?",
"tackle": "What should we tackle together?"
},
"quickActions": {
"plan": {
"title": "Create a project plan",
"prompt": "Create a concise project plan for what I should build next."
},
"analyze": {
"title": "Analyze this data",
"prompt": "Help me analyze this data and call out the most important patterns."
},
"brainstorm": {
"title": "Brainstorm ideas",
"prompt": "Brainstorm a few practical ideas and tradeoffs for this problem."
},
"code": {
"title": "Write code",
"prompt": "Help me write the code for this task, starting with the smallest useful change."
},
"summarize": {
"title": "Summarize this document",
"prompt": "Summarize this document and list the key takeaways."
},
"more": {
"title": "More",
"prompt": "Show me a few useful ways you can help in this workspace."
}
},
"imageQuickActions": {
"icon": {
"title": "Design an app icon",
"prompt": "Generate a clean 1:1 app icon for nanobot: friendly robot, simple vector style, soft blue and white palette, no text."
},
"sticker": {
"title": "Make a sticker",
"prompt": "Generate a cute sticker-style image of a tiny robot assistant, transparent-looking background, expressive and playful."
},
"poster": {
"title": "Create a poster",
"prompt": "Generate a polished poster concept for a personal AI assistant, modern composition, strong visual hierarchy, suitable for a landing page."
},
"product": {
"title": "Product mockup",
"prompt": "Generate a clean product mockup image for a conversational AI web app, minimal interface, premium lighting, realistic device frame."
},
"portrait": {
"title": "Stylized portrait",
"prompt": "Generate a stylized portrait of a friendly AI companion, soft lighting, detailed but approachable, modern illustration style."
},
"edit": {
"title": "Edit an image",
"prompt": "Help me edit an image. Ask me to upload or reference the image first, then generate the edited result."
}
}
},
"header": {
"toggleSidebar": "Toggle sidebar",
"newChat": "Start a new topic",
"toggleTheme": "Toggle theme from header",
"settings": "Open settings",
"sessionInfo": "Session details"
},
"sessionInfo": {
"title": "Session",
"untitled": "Untitled topic",
"automations": "Automations",
"count": "{{count}}",
"loading": "Loading automations...",
"loadFailed": "Could not load automations.",
"empty": "No automations in this session yet.",
"disabled": "Off",
"schedule": {
"at": "{{time}}",
"every": "Every {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"local": "Local trigger",
"unknown": "Custom schedule"
},
"next": {
"label": "{{time}}",
"pending": "Runs shortly",
"disabled": "Paused",
"local": "Waiting for trigger",
"none": "No next run"
}
},
"composer": {
"placeholderThread": "Type your message…",
"placeholderHero": "Ask anything...",
"placeholderOpening": "Opening a new topic…",
"placeholderStreaming": "Model is responding…",
"inputAria": "Message input",
"sendHint": "Enter to send · Shift+Enter for newline",
"runRuntimeTitle": "Running · {{elapsed}}",
"goalStateStrip": "Goal · {{label}}",
"goalStateFallback": "Goal",
"goalStateExpandAria": "Show full goal",
"goalStateSheetTitle": "Goal",
"goalStateCloseAria": "Close goal",
"send": "Send message",
"stop": "Stop response",
"quotedContext": "Quoted context",
"removeQuotedContext": "Remove quoted context",
"modelNotConfigured": "Model not configured",
"configureModel": "Configure model",
"queued": {
"label": "Queued guidance",
"guide": "Guide",
"delete": "Delete guidance",
"edit": "Edit guidance",
"drag": "Drag to reorder"
},
"attachImage": "Attach files",
"imageMode": {
"label": "Image Generation",
"toggle": "Toggle image generation mode",
"placeholder": "Describe or edit an image…",
"aspectAria": "Image aspect ratio",
"aspectLabel": "Image aspect",
"aspect": {
"auto": "Auto",
"1_1": "Square 1:1",
"3_4": "Portrait 3:4",
"9_16": "Story 9:16",
"4_3": "Landscape 4:3",
"16_9": "Wide 16:9"
}
},
"tools": {
"search": "Search",
"reason": "Reason",
"deepResearch": "Deep research",
"voice": "Voice input"
},
"voice": {
"hint": "Click to dictate or hold",
"stop": "Stop recording",
"transcribing": "Transcribing...",
"recordingStatus": "Recording {{time}}"
},
"voiceErrors": {
"unsupported": "Voice input is not supported in this browser.",
"permission": "Allow microphone access in the address bar, then retry.",
"notConfigured": "Configure a transcription provider first.",
"tooLong": "Recording is too long.",
"tooShort": "Hold a little longer to record voice.",
"noInput": "No microphone input detected.",
"noDevice": "No microphone was found. Connect a microphone and try again.",
"failed": "Could not transcribe audio."
},
"slash": {
"ariaLabel": "Slash commands",
"label": "commands",
"navigateHint": "↑↓ Navigate",
"selectHint": "Enter/Tab Select",
"closeHint": "Esc Close",
"badges": {
"current": "Current",
"recent": "Recent"
},
"details": {
"goalActive": "Goal is running",
"goalReady": "Start a sustained objective",
"history": "Show recent messages",
"stopRunning": "Running now"
},
"commands": {
"new": {
"title": "New chat",
"description": "Reset this chat and start a fresh conversation."
},
"stop": {
"title": "Stop current task",
"description": "Cancel the active agent turn for this chat."
},
"restart": {
"title": "Restart nanobot",
"description": "Restart the bot process in place."
},
"status": {
"title": "Show status",
"description": "Display runtime, provider, and channel status."
},
"model": {
"title": "Model",
"description": "Show or switch the active model preset."
},
"history": {
"title": "Show conversation history",
"description": "Print the last N persisted conversation messages."
},
"dream": {
"title": "Run Dream",
"description": "Manually trigger memory consolidation."
},
"dream_log": {
"title": "Show Dream log",
"description": "Show what the last Dream consolidation changed."
},
"dream_restore": {
"title": "Restore memory",
"description": "Revert memory to a previous Dream snapshot."
},
"dream_prompt": {
"title": "Dream memory",
"description": "Tell Dream how to organize this workspace's memory."
},
"goal": {
"title": "Long-running goal",
"description": "Tell the agent to treat this as a sustained multi-step goal."
},
"trigger": {
"title": "Create local trigger",
"description": "Create a CLI trigger bound to this chat session."
},
"help": {
"title": "Show help",
"description": "List available slash commands."
},
"pairing": {
"title": "Pairing",
"description": "Manage pairing requests."
}
}
},
"mentions": {
"ariaLabel": "Apps",
"label": "Apps",
"cliGroup": "CLI apps",
"mcpGroup": "MCP services",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Use @{{name}} as a local CLI app",
"mcpDescription": "Use @{{name}} as an MCP server"
},
"encoding": "Encoding…",
"remove": "Remove attachment",
"normalizedSizeHint": "{{orig}} → {{current}} (auto)",
"textTooLarge": "Message text is too large (max {{max}})",
"imageRejected": {
"unsupported_type": "Unsupported file type",
"empty_file": "Empty files cannot be attached",
"too_many_attachments": "Max {{max}} attachments per message",
"too_many_images": "Max {{max}} images per message",
"magic_mismatch": "File doesn't look like a real image",
"decode_failed": "Couldn't decode this image",
"too_large": "File is too large — try a smaller one",
"total_too_large": "Attachments are too large together — remove some or use smaller files",
"transport_too_large": "This attachment would exceed the gateway transport limit",
"io": "Couldn't read this file"
},
"workspace": {
"accessAria": "Workspace access mode",
"projectAria": "Choose project",
"projectPlaceholder": "Select project",
"default": "Default Permission",
"defaultShort": "Default",
"full": "Full Access",
"fullShort": "Full"
}
},
"scrollToBottom": "Scroll to bottom",
"loadEarlier": "Load earlier messages",
"forkedFromHistory": "Forked from history",
"promptNavigator": {
"open": "Open prompt navigator",
"title": "Prompts",
"search": "Search prompts",
"noResults": "No matching prompts.",
"jumpTo": "Jump to prompt: {{label}}"
}
},
"message": {
"streaming": "streaming",
"delivery": {
"sending": "Sending…",
"failed": "Not sent"
},
"assistantTyping": "Assistant is typing",
"toolSingle": "Using a tool",
"toolMany": "Used {{count}} tools",
"toolSummary": "{{count}} tool",
"toolSummaryMany": "{{count}} tools",
"reasoningTools": "Reasoning · {{count}} tools",
"reasoningToolsSingular": "Reasoning · 1 tool",
"reasoning": "Thinking",
"reasoningStreaming": "Thinking…",
"reasoningSummary": "Reasoning",
"agentActivitySummary": "{{reasoning}} steps · {{tools}} tool calls",
"agentActivityToolsOnly": "{{tools}} tool calls",
"agentActivityLiveSummary": "Working… · {{reasoning}} steps · {{tools}} tool calls",
"agentActivityLiveToolsOnly": "Working… · {{tools}} tool calls",
"activityThinkingFor": "Thinking for {{duration}}",
"activityThought": "Thought",
"activityThoughtFor": "Thought for {{duration}}",
"activityWorkingFor": "Working for {{duration}}",
"activityWorked": "Worked",
"activityWorkedFor": "Worked for {{duration}}",
"cliActivityRunningOne": "Using {{name}}",
"cliActivityRanOne": "Used {{name}}",
"cliActivityFailedOne": "{{name}} failed",
"cliActivityRunningMany": "Using {{count}} CLI apps",
"cliActivityRanMany": "Used {{count}} CLI apps",
"cliActivityFailedMany": "{{count}} CLI apps failed",
"cliRunRunning": "Using",
"cliRunRan": "Used",
"cliRunFailed": "Failed",
"imageAttachment": "Image attachment",
"automationSourceFallback": "Automation",
"automationTriggered": "Triggered automatically",
"askAboutSelection": "Ask about this",
"forkFromHere": "Fork",
"copyReply": "Copy",
"copiedReply": "Copied",
"turnLatencyTitle": "Response time (end-to-end)",
"fileEditViewDiff": "View diff",
"fileEditViewLargeDiff": "View large diff",
"fileEditDiffLineCount": "{{count}} lines",
"fileEditUnchangedLinesHidden": "{{count}} unchanged lines hidden",
"fileEditShowMoreLines": "Show {{count}} more lines",
"fileEditShowFewerLines": "Show fewer lines",
"fileEditOpenFile": "Open file",
"fileEditDiffTruncated": "Diff truncated. Open the file for the full change."
},
"lightbox": {
"title": "Image preview",
"open": "View image",
"prev": "Previous image",
"next": "Next image",
"close": "Close image preview"
},
"filePreview": {
"aria": "File preview",
"close": "Close file preview",
"loading": "Loading preview...",
"failed": "Could not preview this file.",
"routeMissing": "File preview needs the latest gateway. Restart nanobot gateway and try again.",
"resize": "Resize file preview",
"truncated": "Preview is truncated because this file is large."
},
"code": {
"fallbackLanguage": "code",
"copyAria": "Copy code",
"copy": "Copy",
"copied": "Copied"
},
"common": {
"dismiss": "Dismiss"
},
"errors": {
"messageTooBig": {
"title": "Message too large",
"body": "The server rejected your last message because it exceeded the size limit. Remove some images or try smaller files, then send again."
},
"workspaceScopeRejected": {
"title": "Workspace was not changed",
"body": "Nanobot kept the previous workspace because the requested project or access mode was rejected by the gateway."
},
"turnRejected": {
"title": "Message was not sent",
"body": "The gateway rejected this message. Review its text or attachments, then try again."
}
},
"workspace": {
"dialog": {
"defaultProject": "Default workspace",
"manual": "Paste path",
"manualPlaceholder": "/Users/name/project",
"usePath": "Use Path",
"absolutePathRequired": "Enter an absolute folder path on this machine."
}
}
}