{
  "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..."
    },
    "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",
    "globalActions": "Global actions",
    "collapse": "Collapse sidebar",
    "toggleTheme": "Toggle theme",
    "home": "Home",
    "newChat": "New chat",
    "searchAria": "Search chats",
    "searchPlaceholder": "Search chats",
    "searchResults": "Results",
    "noSearchResults": "No matching chats.",
    "recent": "Recent",
    "refreshSessions": "Refresh sessions",
    "settings": "Settings",
    "language": {
      "label": "Language",
      "ariaLabel": "Change language"
    }
  },
  "settings": {
    "backToChat": "Back to chat",
    "sidebar": {
      "title": "Settings",
      "ariaLabel": "Settings sections"
    },
    "nav": {
      "general": "General",
      "byok": "BYOK"
    },
    "sections": {
      "interface": "Interface",
      "ai": "AI",
      "system": "System"
    },
    "rows": {
      "theme": "Theme",
      "language": "Language",
      "provider": "Provider",
      "model": "Model",
      "restart": "Restart nanobot",
      "configPath": "Config path"
    },
    "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": "Set the default model name used by nanobot.",
      "configPath": "The gateway configuration file currently in use."
    },
    "values": {
      "light": "Light",
      "dark": "Dark",
      "notAvailable": "Not available"
    },
    "status": {
      "loading": "Loading settings...",
      "loadError": "Could not load settings",
      "unsaved": "Unsaved changes.",
      "savedRestart": "Saved. Restart nanobot to apply."
    },
    "actions": {
      "save": "Save",
      "saving": "Saving",
      "edit": "Edit",
      "cancel": "Cancel"
    },
    "byok": {
      "description": "Bring your own provider keys. Nanobot reads these values from the current config and only configured providers can be selected in General.",
      "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."
      }
    }
  },
  "chat": {
    "fallbackTitle": "Chat {{id}}",
    "loading": "Loading…",
    "noSessions": "No sessions yet.",
    "actions": "Chat actions for {{title}}",
    "delete": "Delete",
    "newChat": "New chat",
    "groups": {
      "today": "Today",
      "yesterday": "Yesterday",
      "earlier": "Earlier"
    }
  },
  "deleteConfirm": {
    "title": "Delete this chat?",
    "description": "This action cannot be undone.",
    "cancel": "Cancel",
    "confirm": "Delete"
  },
  "connection": {
    "idle": "Idle",
    "connecting": "Connecting…",
    "open": "Connected",
    "reconnecting": "Reconnecting…",
    "closed": "Disconnected",
    "error": "Connection error"
  },
  "thread": {
    "loadingConversation": "Loading conversation…",
    "empty": {
      "greeting": "What can I do for you?",
      "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 chat",
      "toggleTheme": "Toggle theme from header",
      "settings": "Open settings"
    },
    "composer": {
      "placeholderThread": "Type your message…",
      "placeholderHero": "Ask anything...",
      "placeholderOpening": "Opening a new chat…",
      "placeholderStreaming": "Model is responding…",
      "inputAria": "Message input",
      "sendHint": "Enter to send · Shift+Enter for newline",
      "send": "Send message",
      "stop": "Stop response",
      "attachImage": "Attach image",
      "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"
      },
      "slash": {
        "ariaLabel": "Slash commands",
        "label": "commands",
        "navigateHint": "↑↓ Navigate",
        "selectHint": "Enter/Tab Select",
        "closeHint": "Esc Close",
        "commands": {
          "new": {
            "title": "New chat",
            "description": "Stop the current task 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."
          },
          "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."
          },
          "help": {
            "title": "Show help",
            "description": "List available slash commands."
          }
        }
      },
      "encoding": "Encoding…",
      "remove": "Remove attachment",
      "normalizedSizeHint": "{{orig}} → {{current}} (auto)",
      "imageRejected": {
        "unsupported_type": "Unsupported file type",
        "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": "Image is too large — try a smaller one",
        "io": "Couldn't read this file"
      }
    },
    "scrollToBottom": "Scroll to bottom"
  },
  "message": {
    "streaming": "streaming",
    "assistantTyping": "Assistant is typing",
    "toolSingle": "Using a tool",
    "toolMany": "Used {{count}} tools",
    "reasoning": "Thinking",
    "reasoningStreaming": "Thinking…",
    "imageAttachment": "Image attachment",
    "copyReply": "Copy reply",
    "copiedReply": "Copied reply"
  },
  "lightbox": {
    "title": "Image preview",
    "open": "View image",
    "prev": "Previous image",
    "next": "Next image",
    "close": "Close image preview"
  },
  "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."
    }
  }
}
