{ "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" }, "extensions": "Extensions" }, "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.", "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.", "authorizationCode": "Authorization code", "finishSignIn": "Finish sign-in" }, "skills": { "description": "Review the instruction skills this agent can load during a conversation.", "caption": "{{available}} available · {{total}} total", "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", "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." } }, "workspace": { "dialog": { "defaultProject": "Default workspace", "manual": "Paste path", "manualPlaceholder": "/Users/name/project", "usePath": "Use Path", "absolutePathRequired": "Enter an absolute folder path on this machine." } }, "extensions": { "backToChat": "Back to chat", "title": "Extensions", "tabs": { "label": "Extension views", "installed": "Installed", "discover": "Discover", "builtin": "Built in" }, "ecosystem": { "all": "All", "nanobot": "nanobot", "pi": "Pi", "openclaw": "OpenClaw" }, "searchMarket": "Search extension packages", "searchInstalled": "Search extensions", "empty": { "installed": "No external extensions installed.", "discover": "No matching extension packages.", "builtin": "No built-in capabilities found." }, "installed": "Installed", "install": "Install {{name}}", "details": { "identity": "Identity", "source": "Source", "scope": "Scope", "license": "License", "homepage": "Homepage", "contributions": "Contributions", "dependencies": "Dependencies", "permissions": "Permissions", "diagnostics": "Diagnostics" }, "permissionGranted": "Granted", "permissionPending": "Not granted", "revokePermissions": "Revoke permissions", "grantPermissions": "Grant permissions", "noPermissions": "No host permissions requested.", "configManaged": "Managed by configuration.", "knownPermissions": { "runtimeNode": { "label": "Node.js runtime", "reason": "Run third-party JavaScript or TypeScript in a Node.js process." } }, "revokeTrust": "Revoke trust", "trust": "Trust", "disable": "Disable", "enable": "Enable", "uninstall": "Uninstall", "uninstallTitle": "Uninstall extension?", "uninstallDescription": "This removes {{name}} and its installed files from nanobot.", "cancel": "Cancel", "status": { "active": "Active", "disabled": "Disabled", "untrusted": "Untrusted", "inactive": "Inactive" }, "none": "None", "loading": "Loading extensions…" } }