{ "app": { "brand": "nanobot", "loading": { "connecting": "Đang kết nối tới nanobot…", "boot": "Đang tải nanobot…" }, "error": { "title": "Không thể kết nối tới nanobot", "gatewayHint": "Hãy chắc chắn gateway đang chạy (`nanobot gateway`) và trang này được mở trên cùng máy." }, "system": { "section": "Hệ thống", "restartHint": "Khởi động lại nanobot để áp dụng thay đổi runtime.", "restart": "Khởi động lại nanobot", "restarting": "Đang khởi động lại..." }, "restart": { "completed": "Khởi động lại hoàn tất sau {{seconds}} giây." }, "documentTitle": { "base": "nanobot", "chat": "{{title}} · nanobot" }, "meta": { "description": "Giao diện web nanobot — trò chuyện với workspace nanobot của bạn." } }, "sidebar": { "collapse": "Thu gọn thanh bên", "toggleTheme": "Chuyển giao diện", "newChat": "Cuộc trò chuyện mới", "viewOptions": "View", "compactList": "Compact list", "showPreviews": "Show previews", "showTimestamps": "Show time", "sortLabel": "Sort", "sortUpdated": "Recently updated", "sortCreated": "Recently created", "sortTitle": "Title A-Z", "recent": "Gần đây", "refreshSessions": "Làm mới phiên", "settings": "Cài đặt", "language": { "label": "Ngôn ngữ", "ariaLabel": "Đổi ngôn ngữ" }, "searchAria": "Tìm kiếm", "searchPlaceholder": "Tìm kiếm", "searchResults": "Kết quả", "noSearchResults": "Không có cuộc trò chuyện phù hợp." }, "settings": { "backToChat": "Quay lại trò chuyện", "sidebar": { "title": "Cài đặt", "ariaLabel": "Các mục cài đặt" }, "nav": { "general": "Chung", "byok": "BYOK", "overview": "Overview", "appearance": "Appearance", "models": "Models", "providers": "Providers", "image": "Image", "web": "Web", "runtime": "Runtime", "advanced": "Advanced" }, "sections": { "interface": "Giao diện", "ai": "AI", "system": "Hệ thống", "status": "Status", "localPreferences": "Local preferences", "presets": "Presets", "webSearch": "Web search", "webBehavior": "Behavior", "identity": "Identity", "safety": "Safety", "integrations": "Integrations" }, "rows": { "theme": "Giao diện", "language": "Ngôn ngữ", "provider": "Nhà cung cấp", "model": "Mô hình", "restart": "Khởi động lại nanobot", "configPath": "Đường dẫn cấu hình", "activePreset": "Active preset", "gateway": "Gateway", "restartState": "Restart state", "selectedPreset": "Selected preset", "presetModel": "Preset model", "density": "Density", "activityMode": "Activity detail", "codeWrap": "Code wrapping", "maxResults": "Max results", "timeout": "Timeout", "jinaReader": "Jina reader", "botName": "Bot name", "botIcon": "Bot icon", "timezone": "Timezone", "toolHintMaxLength": "Tool hint length", "workspacePath": "Workspace path", "heartbeat": "Heartbeat", "dream": "Dream", "unifiedSession": "Unified session", "restrictWorkspace": "Restrict to workspace", "execTool": "Exec tool", "execSandbox": "Exec sandbox", "ssrfWhitelist": "SSRF whitelist", "mcpServers": "MCP servers", "pathAppend": "PATH append", "configurationDocs": "Configuration docs" }, "help": { "theme": "Chuyển giữa giao diện sáng và tối.", "language": "Chọn ngôn ngữ dùng trong WebUI.", "provider": "Chọn nhà cung cấp cho các yêu cầu mô hình mới.", "model": "Đặt tên mô hình mặc định mà nanobot sử dụng.", "configPath": "Tệp cấu hình gateway hiện đang dùng.", "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.", "codeWrap": "Keep long code lines readable on smaller screens.", "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.", "botName": "Shown in runtime surfaces that use the configured bot identity.", "botIcon": "Short emoji or text shown beside the bot name.", "timezone": "IANA timezone used by runtime context and schedules.", "toolHintMaxLength": "Maximum characters shown in tool progress hints.", "advancedReadOnly": "Advanced safety controls are read-only in WebUI. Edit config.json intentionally when needed." }, "values": { "light": "Sáng", "dark": "Tối", "notAvailable": "Không khả dụng", "enabled": "Enabled", "disabled": "Disabled", "restartRequired": "Restart required", "liveReload": "Live reload ready", "comfortable": "Comfortable", "compact": "Compact", "auto": "Auto", "expanded": "Expanded", "on": "On", "off": "Off", "configured": "Configured", "notConfigured": "Not configured" }, "status": { "loading": "Đang tải cài đặt...", "loadError": "Không thể tải cài đặt", "unsaved": "Có thay đổi chưa lưu.", "savedRestart": "Đã lưu. Khởi động lại nanobot để áp dụng." }, "actions": { "save": "Lưu", "saving": "Đang lưu", "edit": "Sửa", "cancel": "Hủy", "openDocs": "Open docs" }, "byok": { "description": "Dùng key provider của riêng bạn. Nanobot đọc các giá trị này từ config hiện tại, và chỉ provider đã cấu hình mới có thể chọn trong Chung.", "configured": "Đã cấu hình", "notConfigured": "Chưa cấu hình", "configuredSection": "Đã cấu hình", "notConfiguredSection": "Chưa cấu hình", "showMore": "Hiển thị thêm {{count}}", "showLess": "Thu gọn", "apiKey": "API key", "apiBase": "API base", "apiKeyPlaceholder": "Nhập API key", "apiKeyConfiguredPlaceholder": "Để trống để giữ key hiện tại", "configuredKeyHint": "Key đã cấu hình", "apiBasePlaceholder": "Dùng mặc định của provider", "apiKeyRequired": "Cần API key để cấu hình provider này.", "showApiKey": "Hiển thị API key", "hideApiKey": "Ẩn API key", "noConfiguredProviders": "Chưa có provider đã cấu hình", "configureFirst": "Hãy cấu hình provider trong BYOK trước.", "openByok": "Mở BYOK", "tabs": { "ariaLabel": "Loại thông tin xác thực BYOK", "llm": "LLM", "webSearch": "Web Search" }, "webSearch": { "provider": "Search provider", "providerHelp": "Chọn backend mà công cụ web search sẽ dùng.", "selectProvider": "Chọn provider", "credentials": "Thông tin xác thực", "noCredentialRequired": "Không cần key", "noCredentialHelp": "DuckDuckGo hoạt động mà không cần lưu API key.", "apiKeyHelp": "Được lưu trong config và chỉ hiện dạng che sau khi lưu.", "baseUrl": "Base URL", "baseUrlHelp": "SearXNG cần URL instance của bạn.", "baseUrlPlaceholder": "https://search.example.com", "apiKeyRequired": "Provider tìm kiếm này cần API key.", "baseUrlRequired": "SearXNG cần Base URL.", "missingCredential": "Thêm thông tin bắt buộc trước khi lưu.", "saveHint": "Thay đổi áp dụng cho các yêu cầu web search mới." } }, "overview": { "model": "Current model", "providers": "Providers", "configuredCount": "{{count}} configured", "totalProviders": "{{count}} available", "webSearch": "Web search", "workspace": "Workspace" }, "providers": { "searchPlaceholder": "Search providers", "noMatches": "No providers match this search." } }, "chat": { "fallbackTitle": "Trò chuyện {{id}}", "loading": "Đang tải…", "noSessions": "Chưa có phiên nào.", "showMore": "Hiển thị thêm {{count}}", "actions": "Tác vụ cho cuộc trò chuyện {{title}}", "activity": { "running": "Agent running", "complete": "Agent finished" }, "pin": "Pin", "unpin": "Unpin", "rename": "Rename", "renameTitle": "Rename chat", "renameDescription": "Choose a local sidebar name for this chat.", "renamePlaceholder": "Chat name", "renameSave": "Save", "archive": "Archive", "unarchive": "Unarchive", "showArchived": "Show archived", "hideArchived": "Hide archived", "delete": "Xóa", "newChat": "Cuộc trò chuyện mới", "groups": { "pinned": "Pinned", "all": "Chats", "today": "Today", "yesterday": "Yesterday", "earlier": "Earlier", "archived": "Archived" } }, "deleteConfirm": { "title": "Xóa cuộc trò chuyện này?", "description": "Không thể hoàn tác thao tác này.", "cancel": "Hủy", "confirm": "Xóa" }, "connection": { "idle": "Rảnh", "connecting": "Đang kết nối…", "open": "Đã kết nối", "reconnecting": "Đang kết nối lại…", "closed": "Đã ngắt kết nối", "error": "Lỗi kết nối" }, "thread": { "loadingConversation": "Đang tải cuộc trò chuyện…", "empty": { "description": "Hãy đặt câu hỏi, tiếp tục công việc cục bộ hoặc bắt đầu một luồng mới.", "greeting": "Tôi có thể giúp gì cho bạn?", "quickActions": { "plan": { "title": "Tạo kế hoạch dự án", "prompt": "Tạo một kế hoạch dự án ngắn gọn cho việc tôi nên xây dựng tiếp theo." }, "analyze": { "title": "Phân tích dữ liệu này", "prompt": "Giúp tôi phân tích dữ liệu này và chỉ ra các mẫu quan trọng nhất." }, "brainstorm": { "title": "Động não ý tưởng", "prompt": "Động não vài ý tưởng thực tế và các đánh đổi cho vấn đề này." }, "code": { "title": "Viết mã", "prompt": "Giúp tôi viết mã cho nhiệm vụ này, bắt đầu từ thay đổi hữu ích nhỏ nhất." }, "summarize": { "title": "Tóm tắt tài liệu này", "prompt": "Tóm tắt tài liệu này và liệt kê các ý chính." }, "more": { "title": "Thêm", "prompt": "Cho tôi xem vài cách hữu ích mà bạn có thể giúp trong workspace này." } }, "imageQuickActions": { "icon": { "title": "Thiết kế biểu tượng app", "prompt": "Tạo một biểu tượng ứng dụng 1:1 gọn gàng cho nanobot: robot thân thiện, phong cách vector đơn giản, bảng màu xanh trắng dịu, không có chữ." }, "sticker": { "title": "Tạo sticker", "prompt": "Tạo một hình kiểu sticker dễ thương của trợ lý robot nhỏ, nền trông như trong suốt, biểu cảm và vui nhộn." }, "poster": { "title": "Tạo poster", "prompt": "Tạo một ý tưởng poster chỉn chu cho trợ lý AI cá nhân, bố cục hiện đại, phân cấp thị giác rõ, phù hợp cho landing page." }, "product": { "title": "Mockup sản phẩm", "prompt": "Tạo một hình mockup sản phẩm gọn gàng cho ứng dụng web AI hội thoại, giao diện tối giản, ánh sáng cao cấp, khung thiết bị chân thực." }, "portrait": { "title": "Chân dung cách điệu", "prompt": "Tạo chân dung cách điệu của một người bạn đồng hành AI thân thiện, ánh sáng mềm, chi tiết nhưng dễ gần, phong cách minh họa hiện đại." }, "edit": { "title": "Chỉnh sửa ảnh", "prompt": "Giúp tôi chỉnh sửa một ảnh. Trước tiên hãy yêu cầu tôi tải lên hoặc chỉ định ảnh, rồi tạo kết quả đã chỉnh sửa." } } }, "header": { "toggleSidebar": "Bật/tắt thanh bên" }, "composer": { "placeholderThread": "Nhập tin nhắn…", "placeholderHero": "Bạn đang nghĩ gì?", "placeholderOpening": "Đang mở cuộc trò chuyện mới…", "placeholderStreaming": "Mô hình đang trả lời…", "inputAria": "Ô nhập tin nhắn", "sendHint": "Enter để gửi · Shift+Enter để xuống dòng", "runRuntimeTitle": "Đang chạy · {{elapsed}}", "goalStateStrip": "Mục tiêu · {{label}}", "goalStateFallback": "Mục tiêu", "goalStateExpandAria": "Xem đầy đủ mục tiêu", "goalStateSheetTitle": "Mục tiêu", "send": "Gửi tin nhắn", "stop": "Dừng phản hồi", "attachImage": "Đính kèm ảnh", "imageMode": { "label": "Tạo ảnh", "toggle": "Bật/tắt chế độ tạo ảnh", "placeholder": "Mô tả hoặc chỉnh sửa ảnh…", "aspectAria": "Tỷ lệ khung hình ảnh", "aspectLabel": "Tỷ lệ ảnh", "aspect": { "auto": "Tự động", "1_1": "Vuông 1:1", "3_4": "Dọc 3:4", "9_16": "Story 9:16", "4_3": "Ngang 4:3", "16_9": "Rộng 16:9" } }, "encoding": "Đang xử lý…", "remove": "Xóa tệp đính kèm", "normalizedSizeHint": "{{orig}} → {{current}} (tự động)", "imageRejected": { "unsupported_type": "Loại tệp không được hỗ trợ", "too_many_images": "Tối đa {{max}} ảnh mỗi tin nhắn", "magic_mismatch": "Tệp này không phải là một ảnh thực", "decode_failed": "Không thể giải mã ảnh này", "too_large": "Ảnh quá lớn — hãy thử ảnh nhỏ hơn", "io": "Không thể đọc tệp này" }, "slash": { "ariaLabel": "Lệnh slash", "label": "lệnh", "navigateHint": "↑↓ Chọn", "selectHint": "Enter/Tab Chèn", "closeHint": "Esc Đóng", "commands": { "new": { "title": "Cuộc trò chuyện mới", "description": "Dừng tác vụ hiện tại và bắt đầu một cuộc trò chuyện mới." }, "stop": { "title": "Dừng tác vụ hiện tại", "description": "Hủy lượt agent đang chạy trong cuộc trò chuyện này." }, "restart": { "title": "Khởi động lại nanobot", "description": "Khởi động lại tiến trình bot tại chỗ." }, "status": { "title": "Hiển thị trạng thái", "description": "Hiển thị trạng thái runtime, provider và channel." }, "history": { "title": "Hiển thị lịch sử", "description": "In N tin nhắn hội thoại đã lưu gần nhất." }, "dream": { "title": "Chạy Dream", "description": "Kích hoạt thủ công quá trình hợp nhất bộ nhớ." }, "dream_log": { "title": "Hiển thị nhật ký Dream", "description": "Hiển thị những gì lần hợp nhất Dream gần nhất đã thay đổi." }, "dream_restore": { "title": "Khôi phục bộ nhớ", "description": "Đưa bộ nhớ về một snapshot Dream trước đó." }, "goal": { "title": "Mục tiêu dài hạn", "description": "Yêu cầu agent xử lý đây là mục tiêu nhiều bước kéo dài." }, "help": { "title": "Hiển thị trợ giúp", "description": "Liệt kê các lệnh slash có sẵn." } } }, "goalStateCloseAria": "Đóng mục tiêu" }, "scrollToBottom": "Cuộn xuống cuối", "loadEarlier": "Tải tin nhắn trước đó" }, "message": { "streaming": "đang truyền", "assistantTyping": "Trợ lý đang nhập", "toolSingle": "Đang dùng một công cụ", "toolMany": "Đã dùng {{count}} công cụ", "toolSummary": "{{count}} công cụ", "toolSummaryMany": "{{count}} công cụ", "reasoningTools": "Suy luận · {{count}} công cụ", "reasoningToolsSingular": "Suy luận · 1 công cụ", "reasoning": "Suy luận", "reasoningStreaming": "Đang suy nghĩ…", "reasoningSummary": "Suy luận", "agentActivitySummary": "{{reasoning}} bước · {{tools}} lần gọi công cụ", "agentActivityToolsOnly": "{{tools}} lần gọi công cụ", "agentActivityLiveSummary": "Đang chạy… · {{reasoning}} bước · {{tools}} lần gọi công cụ", "agentActivityLiveToolsOnly": "Đang chạy… · {{tools}} lần gọi công cụ", "imageAttachment": "Tệp hình ảnh đính kèm", "turnLatencyTitle": "Thời gian phản hồi (end-to-end)" }, "lightbox": { "title": "Xem trước ảnh", "open": "Xem ảnh", "prev": "Ảnh trước", "next": "Ảnh tiếp theo", "close": "Đóng xem trước" }, "code": { "fallbackLanguage": "mã", "copyAria": "Sao chép mã", "copy": "Sao chép", "copied": "Đã sao chép" }, "common": { "dismiss": "Đóng" }, "errors": { "messageTooBig": { "title": "Tin nhắn quá lớn", "body": "Máy chủ đã từ chối tin nhắn trước vì vượt quá giới hạn kích thước. Hãy bớt ảnh hoặc chọn tệp nhỏ hơn rồi thử lại." } } }