* feat(model-select-modal): highlight added models and support bulk selection - Add addedModelValues prop to highlight already-added models with primary color - Sort models alphabetically per provider, with added models floated to top - Replace green highlight with primary brand color (orange #E56A4A) - Use check icon (10px) inline with model name instead of check_circle - Replace Done button with info bar explaining click-to-toggle behavior - Add ProviderIcon to provider group headers replacing colored dot - Import ProviderIcon, remove unused Button import * feat(cli-tools): wire addedModelValues, onDeselect, and auto-save to model select modals - Pass selectedModels as addedModelValues to ModelSelectModal in OpenCode and Copilot cards - Add onDeselect handler to remove model from list on second click - Set closeOnSelect=false to allow bulk model selection - Remove manual setModalOpen(false) from onSelect callbacks - Add saveModels() silent auto-save triggered on modal close (OpenCodeToolCard) - Use useRef to track latest selectedModels in closure-safe way * feat(modal): functional traffic light close button with hover icon and tooltip - Make red dot a clickable button that closes the modal - Show ✕ icon inside red dot on hover via group-hover opacity transition - Gray out yellow and green dots (cursor-not-allowed, no tooltip) - Increase dot size from w-3 h-3 to w-4 h-4 - Add Tooltip with brand-matched color #FF5F56 on red dot - Remove X close button from modal header * feat(tooltip): add color prop for themed tooltip backgrounds * feat(i18n): add translations for model select info bar and close tooltip - Add 'Click to add, click again to remove. Changes are saved automatically.' to all 32 locales - Add 'Close' translation to all 32 locales * fix(ui): address code review feedback on modal UX and auto-save - Modal: remove showCloseButton prop, use showTrafficLights for header condition, hide traffic lights on mobile (hidden md:flex), add mobile X button (md:hidden) with aria-label, add aria-label and title on traffic light close button - OpenCodeToolCard: validate activeModel membership before saving — fallback to models[0] or empty string; clear/reassign activeModel on deselect when removed model was the active one - CopilotToolCard: add useRef + selectedModelsRef, add saveModels() using /api/cli-tools/copilot-settings, wire auto-save on modal close - ModelSelectModal: fix JSX formatting — separate info bar closing div from Search comment onto its own line
192 lines
9.5 KiB
JSON
192 lines
9.5 KiB
JSON
{
|
|
"Cancel": "Hủy",
|
|
"Delete": "Xóa",
|
|
"Edit": "Sửa",
|
|
"Save": "Lưu",
|
|
"Close": "Đóng",
|
|
"Add": "Thêm",
|
|
"Remove": "Xóa bỏ",
|
|
"Settings": "Cài đặt",
|
|
"Profile": "Hồ sơ",
|
|
"Dashboard": "Bảng điều khiển",
|
|
"Logout": "Đăng xuất",
|
|
"Login": "Đăng nhập",
|
|
"Providers": "Nhà cung cấp",
|
|
"Usage": "Thống kê",
|
|
"API Key": "Khóa API",
|
|
"Connected": " Đã kết nối",
|
|
"Disconnected": "Chưa kết nối",
|
|
"Active": "Hoạt động",
|
|
"Inactive": "Không hoạt động",
|
|
"Success": "Thành công",
|
|
"Failed": "Thất bại",
|
|
"Error": "Lỗi",
|
|
"Warning": "Cảnh báo",
|
|
"Info": "Thông tin",
|
|
"Loading": "Đang tải",
|
|
"Search": "Tìm kiếm",
|
|
"Filter": "Lọc",
|
|
"Sort": "Sắp xếp",
|
|
"Export": "Xuất",
|
|
"Import": "Nhập",
|
|
"Refresh": "Làm mới",
|
|
"Back": "Quay lại",
|
|
"Next": "Tiếp theo",
|
|
"Previous": "Trước",
|
|
"Submit": "Gửi",
|
|
"Confirm": "Xác nhận",
|
|
"Yes": "Có",
|
|
"No": "Không",
|
|
"OK": "OK",
|
|
"Apply": "Áp dụng",
|
|
"Reset": "Đặt lại",
|
|
"Clear": "Xóa",
|
|
"Select": "Chọn",
|
|
"Upload": "Tải lên",
|
|
"Download": "Tải xuống",
|
|
"Copy": "Sao chép",
|
|
"Paste": "Dán",
|
|
"Cut": "Cắt",
|
|
"Undo": "Hoàn tác",
|
|
"Redo": "Làm lại",
|
|
"Name": "Tên",
|
|
"Description": "Mô tả",
|
|
"Status": "Trạng thái",
|
|
"Type": "Loại",
|
|
"Date": "Ngày",
|
|
"Time": "Thời gian",
|
|
"Created": "Đã tạo",
|
|
"Updated": "Đã cập nhật",
|
|
"Actions": "Hành động",
|
|
"Details": "Chi tiết",
|
|
"View": "Xem",
|
|
"New": "Mới",
|
|
"Total": "Tổng",
|
|
"Count": "Số lượng",
|
|
"Price": "Giá",
|
|
"Cost": "Chi phí",
|
|
"Free": "Miễn phí",
|
|
"Paid": "Trả phí",
|
|
"Enable": "Bật",
|
|
"Disable": "Tắt",
|
|
"Enabled": "Đã bật",
|
|
"Disabled": "Đã tắt",
|
|
"Online": "Trực tuyến",
|
|
"Offline": "Ngoại tuyến",
|
|
"Available": "Có sẵn",
|
|
"Unavailable": "Không có sẵn",
|
|
"Required": "Bắt buộc",
|
|
"Optional": "Tùy chọn",
|
|
"Default": "Mặc định",
|
|
"Custom": "Tùy chỉnh",
|
|
"Advanced": "Nâng cao",
|
|
"Basic": "Cơ bản",
|
|
"Help": "Trợ giúp",
|
|
"Support": "Hỗ trợ",
|
|
"Documentation": "Tài liệu",
|
|
"Version": "Phiên bản",
|
|
"Language": "Ngôn ngữ",
|
|
"Theme": "Giao diện",
|
|
"Light": "Sáng",
|
|
"Dark": "Tối",
|
|
"Auto": "Tự động",
|
|
"Endpoint": "Điểm cuối",
|
|
"Combos": "Kết hợp",
|
|
"Quota Tracker": "Theo dõi hạn mức",
|
|
"MITM": "MITM",
|
|
"CLI Tools": "Công cụ",
|
|
"Console Log": "Nhật ký Console",
|
|
"System": "Hệ thống",
|
|
"Debug": "Gỡ lỗi",
|
|
"Shutdown": "Tắt máy",
|
|
"Close Proxy": "Đóng Proxy",
|
|
"Are you sure you want to close the proxy server?": "Bạn có chắc chắn muốn đóng máy chủ proxy không?",
|
|
"Server Disconnected": "Máy chủ đã ngắt kết nối",
|
|
"The proxy server has been stopped.": "Máy chủ proxy đã bị dừng.",
|
|
"Reload Page": "Tải lại trang",
|
|
"Service is running in terminal. You can close this web page. Shutdown will stop the service.": "Dịch vụ đang chạy trong terminal. Bạn có thể đóng trang web này. Tắt máy sẽ dừng dịch vụ.",
|
|
"Manage your AI provider connections": "Quản lý kết nối nhà cung cấp AI của bạn",
|
|
"Model combos with fallback": "Kết hợp mô hình với dự phòng",
|
|
"Monitor your API usage, token consumption, and request logs": "Theo dõi việc sử dụng API, tiêu thụ token và nhật ký yêu cầu",
|
|
"Intercept CLI tool traffic and route through 9Router": "Chặn lưu lượng công cụ CLI và định tuyến qua 9Router",
|
|
"Configure CLI tools": "Cấu hình công cụ CLI",
|
|
"API endpoint configuration": "Cấu hình điểm cuối API",
|
|
"Manage your preferences": "Quản lý tùy chọn của bạn",
|
|
"Debug translation flow between formats": "Gỡ lỗi luồng dịch giữa các định dạng",
|
|
"Live server console output": "Đầu ra console máy chủ trực tiếp",
|
|
"Create model combos with fallback support": "Tạo kết hợp mô hình với hỗ trợ dự phòng",
|
|
"Local Mode": "Chế độ cục bộ",
|
|
"Running on your machine": "Chạy trên máy của bạn",
|
|
"Database Location": "Vị trí cơ sở dữ liệu",
|
|
"Download Backup": "Tải xuống bản sao lưu",
|
|
"Import Backup": "Nhập bản sao lưu",
|
|
"Database backup downloaded": "Đã tải xuống bản sao lưu cơ sở dữ liệu",
|
|
"Database imported successfully": "Đã nhập cơ sở dữ liệu thành công",
|
|
"Security": "Bảo mật",
|
|
"Require login": "Yêu cầu đăng nhập",
|
|
"When ON, dashboard requires password. When OFF, access without login.": "Khi BẬT, bảng điều khiển yêu cầu mật khẩu. Khi TẮT, truy cập không cần đăng nhập.",
|
|
"Current Password": "Mật khẩu hiện tại",
|
|
"Enter current password": "Nhập mật khẩu hiện tại",
|
|
"New Password": "Mật khẩu mới",
|
|
"Enter new password": "Nhập mật khẩu mới",
|
|
"Confirm New Password": "Xác nhận mật khẩu mới",
|
|
"Confirm new password": "Xác nhận mật khẩu mới",
|
|
"Update Password": "Cập nhật mật khẩu",
|
|
"Set Password": "Đặt mật khẩu",
|
|
"Password updated successfully": "Đã cập nhật mật khẩu thành công",
|
|
"Passwords do not match": "Mật khẩu không khớp",
|
|
"Routing Strategy": "Chiến lược định tuyến",
|
|
"Round Robin": "Vòng tròn",
|
|
"Cycle through accounts to distribute load": "Luân phiên qua các tài khoản để phân phối tải",
|
|
"Sticky Limit": "Giới hạn dính",
|
|
"Calls per account before switching": "Số lần gọi mỗi tài khoản trước khi chuyển",
|
|
"Network": "Mạng",
|
|
"Outbound Proxy": "Proxy đi ra",
|
|
"Enable proxy for OAuth + provider outbound requests.": "Bật proxy cho OAuth + yêu cầu đi ra của nhà cung cấp.",
|
|
"Proxy URL": "URL Proxy",
|
|
"Leave empty to inherit existing env proxy (if any).": "Để trống để kế thừa proxy môi trường hiện có (nếu có).",
|
|
"No Proxy": "Không có Proxy",
|
|
"Comma-separated hostnames/domains to bypass the proxy.": "Tên máy chủ/tên miền được phân tách bằng dấu phẩy để bỏ qua proxy.",
|
|
"Test proxy URL": "Kiểm tra URL proxy",
|
|
"Proxy settings applied": "Đã áp dụng cài đặt proxy",
|
|
"Proxy enabled": "Đã bật proxy",
|
|
"Proxy disabled": "Đã tắt proxy",
|
|
"Proxy test OK": "Kiểm tra proxy OK",
|
|
"Proxy test failed": "Kiểm tra proxy thất bại",
|
|
"Please enter a Proxy URL to test": "Vui lòng nhập URL Proxy để kiểm tra",
|
|
"Observability": "Khả năng quan sát",
|
|
"Enable Observability": "Bật khả năng quan sát",
|
|
"Turn request detail recording on/off globally": "Bật/tắt ghi chi tiết yêu cầu toàn cục",
|
|
"Max Records": "Số bản ghi tối đa",
|
|
"Maximum request detail records to keep (older records are auto-deleted)": "Số bản ghi chi tiết yêu cầu tối đa để giữ (bản ghi cũ hơn sẽ tự động xóa)",
|
|
"Batch Size": "Kích thước lô",
|
|
"Number of items to accumulate before writing to database (higher = better performance)": "Số mục tích lũy trước khi ghi vào cơ sở dữ liệu (cao hơn = hiệu suất tốt hơn)",
|
|
"Flush Interval (ms)": "Khoảng thời gian xả (ms)",
|
|
"Maximum time to wait before flushing buffer (prevents data loss during low traffic)": "Thời gian tối đa để chờ trước khi xả bộ đệm (ngăn mất dữ liệu trong lưu lượng thấp)",
|
|
"Max JSON Size (KB)": "Kích thước JSON tối đa (KB)",
|
|
"Maximum size for each JSON field (request/response) before truncation": "Kích thước tối đa cho mỗi trường JSON (yêu cầu/phản hồi) trước khi cắt bớt",
|
|
"All data stored on your machine": "Tất cả dữ liệu được lưu trữ trên máy của bạn",
|
|
"MITM Server": "Máy chủ MITM",
|
|
"Running": "Đang chạy",
|
|
"Stopped": "Đã dừng",
|
|
"Cert": "Chứng chỉ",
|
|
"Server": "Máy chủ",
|
|
"Purpose:": "Mục đích:",
|
|
"Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "Sử dụng Antigravity IDE & GitHub Copilot → với BẤT KỲ nhà cung cấp/mô hình nào từ 9Router",
|
|
"How it works:": "Cách hoạt động:",
|
|
"Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Yêu cầu Antigravity/Copilot IDE → Chuyển hướng DNS đến localhost:443 → MITM proxy chặn → 9Router → phản hồi đến Antigravity/Copilot",
|
|
"No API keys — create one in Keys page": "Không có khóa API — tạo một khóa trong trang Keys",
|
|
"sk_9router (default)": "sk_9router (mặc định)",
|
|
"Server started": "Đã khởi động máy chủ",
|
|
"Failed to start server": "Không thể khởi động máy chủ",
|
|
"Server stopped — all DNS cleared": "Đã dừng máy chủ — đã xóa tất cả DNS",
|
|
"Failed to stop server": "Không thể dừng máy chủ",
|
|
"Sudo password is required": "Yêu cầu mật khẩu sudo",
|
|
"Stop Server": "Dừng máy chủ",
|
|
"Start Server": "Khởi động máy chủ",
|
|
"Enable DNS per tool below to activate interception": "Bật DNS cho từng công cụ bên dưới để kích hoạt chặn",
|
|
"Sudo Password Required": "Yêu cầu mật khẩu Sudo",
|
|
"Enter your sudo password to start/stop MITM server": "Nhập mật khẩu sudo của bạn để khởi động/dừng máy chủ MITM",
|
|
"Sudo Password": "Mật khẩu Sudo",
|
|
"Click to add, click again to remove. Changes are saved automatically.": "Nhấp để thêm, nhấp lại để xóa. Thay đổi được lưu tự động."
|
|
}
|