const vi = { appName: 'Gemini Nexus', common: { loading: 'Đang tải...', error: 'Lỗi', unknown: 'Không rõ', notAvailable: 'Không có', openMenu: 'Mở menu', }, status: { checking: 'Đang kiểm tra trạng thái...', running: 'Gemini Nexus đang chạy nền', stopped: 'Dịch vụ Gemini Nexus đã dừng', }, action: { stop: 'Dừng', start: 'Bắt đầu', switch: 'Chuyển', deleteBackup: 'Xóa bản sao lưu', backupCurrent: 'Sao lưu tài khoản hiện tại', retry: 'Thử lại', openLogs: 'Mở thư mục log', }, error: { generic: 'Đã xảy ra lỗi không mong đợi.', keychainUnavailable: 'Keychain không khả dụng.', keychainHint: { translocation: 'Đã phát hiện macOS App Translocation. Hãy chuyển ứng dụng vào /Applications rồi mở lại.', keychainDenied: 'Quyền truy cập Keychain đã bị từ chối. Ứng dụng có thể chưa được ký; hãy xem README để biết cách tự ký.', signNotarize: 'Hãy ưu tiên dùng bản dựng đã được ký và công chứng khi có thể.', }, dataMigrationFailed: 'Không thể giải mã dữ liệu tài khoản cũ.', dataMigrationHint: { relogin: 'Hãy đăng nhập lại hoặc thêm lại tài khoản của bạn.', clearData: 'Nếu lỗi vẫn tiếp diễn, hãy xóa dữ liệu tài khoản cục bộ rồi đăng nhập lại.', }, }, nav: { accounts: 'Tài khoản', proxy: 'API Proxy', settings: 'Cài đặt', }, account: { current: 'Hiện tại', lastUsed: 'Đã dùng {{time}}', }, home: { title: 'Tài khoản', description: 'Quản lý các tài khoản Gemini Nexus Google Gemini.', noBackups: { title: 'Chưa tìm thấy bản sao lưu', description: 'Hãy tạo bản sao lưu cho tài khoản Gemini Nexus hiện tại để bắt đầu.', action: 'Sao lưu tài khoản hiện tại', }, }, settings: { title: 'Cài đặt', description: 'Quản lý tùy chọn ứng dụng.', general: 'Chung', connection: 'Kết nối', models: 'Mô hình', appearance: { title: 'Giao diện', description: 'Tùy chỉnh giao diện Gemini Nexus trên thiết bị của bạn.', }, darkMode: 'Chế độ tối', darkModeDescription: 'Bật chế độ tối để dễ nhìn hơn vào ban đêm.', language: { title: 'Ngôn ngữ', description: 'Chọn ngôn ngữ bạn muốn sử dụng.', english: 'Tiếng Anh', chinese: 'Tiếng Trung Giản thể', russian: 'Tiếng Nga', vietnamese: 'Tiếng Việt', }, about: { title: 'Thông tin', description: 'Thông tin ứng dụng.', }, version: 'Phiên bản', platform: 'Nền tảng', license: 'Giấy phép', openLogDir: 'Mở', toast: { saved: { title: 'Đã lưu cài đặt', description: 'Cấu hình của bạn đã được cập nhật.', }, saveFailed: { title: 'Không thể lưu cài đặt', }, }, account: { title: 'Cài đặt tài khoản', description: 'Cấu hình tự động làm mới quota và đồng bộ.', auto_refresh: 'Tự động làm mới quota', auto_refresh_desc: 'Định kỳ cập nhật thông tin quota cho tất cả tài khoản', auto_sync: 'Tự động đồng bộ tài khoản hiện tại', auto_sync_desc: 'Định kỳ đồng bộ thông tin tài khoản đang hoạt động', }, startup: { title: 'Khởi động', description: 'Điều khiển hành vi khởi động cùng hệ thống.', auto_startup: 'Khởi động cùng hệ thống', auto_startup_desc: 'Chạy khi đăng nhập và ẩn vào khay hệ thống', macos_hint: 'macOS cần bản ký ứng dụng để Login Items hoạt động. Nếu tự động khởi động thất bại, hãy ký ứng dụng hoặc bật thủ công trong System Settings.', }, privacy: { title: 'Quyền riêng tư', description: 'Quản lý cách dữ liệu được sử dụng để cải thiện ứng dụng.', error_reporting: 'Báo cáo lỗi', error_reporting_desc: 'Gửi báo cáo lỗi ẩn danh để giúp cải thiện ứng dụng. Không thu thập dữ liệu cá nhân.', restart_note: 'Thay đổi báo cáo lỗi sẽ có hiệu lực sau khi khởi động lại ứng dụng.', }, notifications: { title: 'Thông báo', description: 'Cấu hình cảnh báo trên desktop cho các sự kiện tài khoản.', quotaAlert: 'Cảnh báo quota thấp', quotaAlertDesc: 'Nhận thông báo khi quota của model giảm xuống dưới ngưỡng đã đặt', quotaThreshold: 'Ngưỡng cảnh báo', quotaThresholdDesc: 'Phần trăm dùng để kích hoạt cảnh báo', saveFailed: 'Không thể lưu cài đặt thông báo', thresholdSaveFailed: 'Không thể lưu ngưỡng cảnh báo', }, proxy: { title: 'Proxy trung gian', description: 'Cấu hình proxy cho các request đi ra Google/Gemini APIs.', enable: 'Bật proxy trung gian', url: 'Địa chỉ proxy', timeout: 'Thời gian chờ request (giây)', accountProxies: { title: 'Proxy tài khoản', description: 'Cấu hình proxy riêng cho từng tài khoản. Những cấu hình này sẽ ghi đè proxy trung gian chung cho tài khoản đó.', }, }, modelMapping: { title: 'Ánh xạ mô hình', description: 'Ánh xạ các model Claude Code sang model Gemini Nexus để tối ưu chi phí và tốc độ.', claudeKeyword: 'Từ khóa model Claude', targetGemini: 'Model Gemini đích', addPlaceholderKey: 'ví dụ: op-3', addPlaceholderValue: 'ví dụ: gemini-3-flash', noMappings: 'Chưa có ánh xạ tùy chỉnh.', mapsTo: 'Ánh xạ tới', default: 'Mặc định', restoreDefaults: 'Khôi phục mặc định', }, modelVisibility: { title: 'Hiển thị mô hình', description: 'Điều khiển model nào được hiện trong thẻ tài khoản. Model bị ẩn sẽ không xuất hiện ở phần quota.', searchPlaceholder: 'Tìm mô hình...', showAll: 'Hiện tất cả', hideAll: 'Ẩn tất cả', reset: 'Đặt lại mặc định', save: 'Lưu thay đổi', noModels: 'Không tìm thấy mô hình', modelsShown: 'Đang hiện {{visible}} / {{total}} mô hình', quotaManagement: 'Quản lý quota', hidden: 'Đã ẩn', noModelsFound: 'Không tìm thấy mô hình', totalModels: 'Tổng', visibleModels: 'Đang hiện', hiddenModels: 'Đã ẩn', saving: 'Đang lưu...', }, providerGroupings: { title: 'Nhóm theo nhà cung cấp', description: 'Nhóm model theo nhà cung cấp để dễ quản lý hơn', enabled: 'Bật nhóm theo nhà cung cấp', models: '{{count}} mô hình', avgLabel: 'tb', resetLabel: 'reset', overall: 'Tổng thể', healthy: 'Tốt', degraded: 'Giảm', limited: 'Giới hạn', critical: 'Nghiêm trọng', }, examples: { title: 'Ví dụ sử dụng', description: 'Ví dụ lệnh để gọi local API proxy.', curl: 'cURL', python: 'Python', copy: 'Sao chép', copied: 'Đã sao chép!', openai_protocol: 'Giao thức OpenAI', anthropic_protocol: 'Giao thức Anthropic', openai_tools: 'Cursor, Windsurf, NextChat', anthropic_tools: 'Claude Code CLI', flash: 'Nhanh', pro: 'Pro', flash_preview: 'Xem trước', pro_high: 'Tốt nhất', sonnet: 'Thinking', opus: 'Opus', }, gateway: { title: 'Dịch vụ API Proxy', description: 'Điều khiển local API proxy server.', status_running: 'Đang chạy', status_stopped: 'Đã dừng', action_start: 'Bắt đầu dịch vụ', action_stop: 'Dừng dịch vụ', accounts_info: '{{count}} tài khoản khả dụng', port: 'Cổng lắng nghe', port_hint: 'Mặc định 8045, cần khởi động lại để áp dụng', timeout: 'Thời gian chờ request', timeout_hint: 'Mặc định 120 giây, khoảng 30-600 giây', api_key: 'API Key', regenerate_key: 'Tạo lại', regenerateConfirm: { title: 'Tạo lại API Key?', description: 'API key hiện tại sẽ hết hiệu lực ngay lập tức. Các ứng dụng đang dùng key cũ sẽ ngừng hoạt động.', cancel: 'Hủy', confirm: 'Tạo lại', }, key_warning: 'Hãy giữ kín API key của bạn. Không chia sẻ với người khác.', auto_start: 'Tự động chạy cùng app', auto_start_desc: 'Khởi động proxy khi ứng dụng mở lên', }, proxy_tab: 'Proxy', save: 'Lưu cài đặt', }, toast: { backupSuccess: { title: 'Thành công', description: 'Đã tạo bản sao lưu tài khoản.', }, backupError: { title: 'Lỗi', description: 'Không thể tạo bản sao lưu: {{error}}', }, switchSuccess: { title: 'Thành công', description: 'Chuyển tài khoản thành công.', }, switchError: { title: 'Lỗi', description: 'Không thể chuyển tài khoản: {{error}}', }, deleteSuccess: { title: 'Thành công', description: 'Đã xóa bản sao lưu tài khoản.', }, deleteError: { title: 'Lỗi', description: 'Không thể xóa bản sao lưu: {{error}}', }, }, cloud: { title: 'Tài khoản', description: 'Quản lý pool tài khoản Google Gemini của bạn.', autoSwitch: 'Tự động chuyển', providerGroupings: 'Nhóm theo nhà cung cấp', addAccount: 'Thêm tài khoản', syncFromIDE: 'Đồng bộ từ IDE', checkQuota: 'Kiểm tra quota ngay', polling: 'Đã kích hoạt polling', globalQuota: 'Quota tổng', layout: { auto: 'Tự động', twoCol: '2 cột', threeCol: '3 cột', list: 'Danh sách', compact: 'Thu gọn', }, authDialog: { title: 'Thêm tài khoản Google', description: 'Bạn cần cấp quyền ứng dụng để thêm tài khoản.', oauthClient: 'OAuth Client', oauthClientPlaceholder: 'Chọn OAuth client', openLogin: 'Mở trang đăng nhập', authCode: 'Mã ủy quyền', placeholder: 'Dán mã bắt đầu bằng 4/...', instruction: 'Ứng dụng sẽ mở trình duyệt mặc định để đăng nhập Google. Sao chép mã từ trang localhost và dán vào đây.', verify: 'Xác thực và thêm', }, card: { active: 'Đang hoạt động', use: 'Sử dụng', rateLimited: 'Bị giới hạn tốc độ', validationRiskControlled: 'Rủi ro / Bị giới hạn', validationOAuthReauthRequired: 'Cần xác thực lại OAuth', validationRequired: 'Cần xác minh', left: 'còn lại', used: 'Đã dùng', unknown: 'Người dùng không rõ', actions: 'Hành động', useAccount: 'Dùng tài khoản này', identityProfile: 'Hồ sơ định danh', refresh: 'Làm mới quota', delete: 'Xóa tài khoản', noQuota: 'Chưa có dữ liệu quota', rateLimitedQuota: 'Bị giới hạn', resetPrefix: 'reset', resetTime: 'Thời điểm reset', resetUnknown: 'Không rõ', gemini3Ready: 'Sẵn sàng cho Gemini 3', groupGoogleGemini: 'Google Gemini', groupAnthropicClaude: 'Anthropic Claude', proxy: 'Proxy', proxyPlaceholder: 'ví dụ: http://127.0.0.1:7890', proxySaved: 'Đã lưu proxy', noProxy: 'Không dùng proxy', aiCredits: 'AI Credits', aiCreditsValue: '{{amount}} credits', creditsExpiry: 'hết hạn {{date}}', modelVisibility: 'Hiển thị model', }, identity: { title: 'Hồ sơ định danh', loading: 'Đang tải...', generateAndBind: 'Tạo và gán', captureAndBind: 'Lấy và gán hồ sơ hiện tại', restoreOriginal: 'Khôi phục baseline', openFolder: 'Mở thư mục lưu hồ sơ', previewTitle: 'Xem trước hồ sơ đã tạo', confirm: 'Xác nhận', cancel: 'Hủy', close: 'Đóng', currentStorage: 'Hồ sơ runtime hiện tại', accountBinding: 'Hồ sơ đang gán với tài khoản', history: 'Lịch sử hồ sơ', noHistory: 'Chưa có lịch sử hồ sơ', current: 'Đang dùng', restore: 'Khôi phục', generateSuccess: 'Đã tạo và gán hồ sơ', captureSuccess: 'Đã lấy và gán hồ sơ hiện tại', restoreOriginalSuccess: 'Đã khôi phục baseline', restoreVersionSuccess: 'Đã khôi phục bản lịch sử', deleteVersionSuccess: 'Đã xóa bản lịch sử', openFolderSuccess: 'Đã mở thư mục lưu hồ sơ', baseline: 'Hồ sơ baseline', }, list: { noAccounts: 'Chưa có tài khoản cloud nào được thêm.', }, error: { loadFailed: 'Không thể tải danh sách tài khoản cloud.', }, toast: { syncSuccess: { title: 'Đồng bộ thành công', description: 'Đã nhập {{email}} từ IDE.', }, syncFailed: { title: 'Đồng bộ thất bại', description: 'Không tìm thấy tài khoản đang hoạt động trong database của IDE.', }, addSuccess: 'Đã thêm tài khoản thành công!', addFailed: { title: 'Không thể thêm tài khoản', }, quotaRefreshed: 'Đã làm mới quota', refreshFailed: 'Không thể làm mới quota', pollFailed: 'Không thể polling quota của tất cả tài khoản', switched: { title: 'Đã chuyển tài khoản!', description: 'Đang khởi động lại Gemini Nexus...', }, switchFailed: 'Không thể chuyển tài khoản', deleted: 'Đã xóa tài khoản', deleteFailed: 'Không thể xóa tài khoản', deleteConfirm: 'Bạn có chắc chắn muốn xóa tài khoản này không?', autoSwitchOn: 'Đã bật tự động chuyển', autoSwitchOff: 'Đã tắt tự động chuyển', updateSettingsFailed: 'Không thể cập nhật cài đặt', actionFailed: 'Không thể thực hiện thao tác', startAuthFailed: 'Không thể bắt đầu luồng đăng nhập', refreshCreditsAvailable: 'AI credits: {{amount}}', refreshCreditsUnavailable: 'Không có thông tin AI credits cho lần làm mới này.', batchRefreshSuccess: 'Đã làm mới thành công {{count}} tài khoản.', batchRefreshPartial: { title: 'Làm mới hoàn tất nhưng có lỗi', description: 'Đã làm mới {{successful}} tài khoản, {{failed}} tài khoản thất bại.', }, batchDeleteSuccess: 'Đã xóa thành công {{count}} tài khoản.', batchDeletePartial: { title: 'Xóa hoàn tất nhưng có lỗi', description: 'Đã xóa {{successful}} tài khoản, {{failed}} tài khoản thất bại.', }, }, batch: { selected: 'Đã chọn {{count}}', delete: 'Xóa mục đã chọn', refresh: 'Làm mới mục đã chọn', selectAll: 'Chọn tất cả', clear: 'Bỏ chọn', confirmDelete: 'Bạn có chắc chắn muốn xóa {{count}} tài khoản không?', }, sort: { recentlyUsed: 'Dùng gần đây', quotaOverall: 'Quota tổng', quotaClaude: 'Quota Claude', quotaPro3: 'Quota Pro3', quotaFlash: 'Quota Flash', }, exportImport: { export: 'Xuất', import: 'Nhập', exportTitle: 'Xuất tài khoản', exportDesc: 'Chọn có bao gồm token xác thực trong tệp xuất hay không.', includeTokens: 'Bao gồm token (kém an toàn hơn)', stripTokens: 'Loại bỏ token (an toàn hơn khi chia sẻ)', exportSuccess: 'Đã xuất tài khoản thành công', importTitle: 'Nhập tài khoản', importDesc: 'Chọn tệp JSON đã được xuất trước đó.', importStrategy: 'Chiến lược nhập', strategyMerge: 'Gộp - Cập nhật tài khoản cũ, thêm tài khoản mới', strategyOverwrite: 'Ghi đè - Thay thế toàn bộ dữ liệu hiện có', strategySkip: 'Bỏ qua - Chỉ thêm tài khoản mới', importSuccess: 'Đã nhập {{imported}}, cập nhật {{updated}}, bỏ qua {{skipped}}', importErrors: 'Đã nhập xong với {{count}} lỗi', selectFile: 'Chọn tệp', importing: 'Đang nhập...', fileTooLarge: 'Kích thước tệp vượt quá giới hạn 5MB', invalidJson: 'Định dạng tệp JSON không hợp lệ', readFileFailed: 'Không thể đọc tệp', }, }, proxy: { title: 'API Proxy', description: 'Quản lý local API proxy service.', save: 'Lưu cài đặt', copy: 'Sao chép', copied: 'Đã sao chép!', regenerate: 'Tạo lại', regenerateConfirm: { title: 'Tạo lại API Key?', description: 'API key hiện tại sẽ hết hiệu lực ngay lập tức. Các ứng dụng đang dùng key cũ sẽ ngừng hoạt động.', cancel: 'Hủy', confirm: 'Tạo lại', }, service: { title: 'Trạng thái dịch vụ', description: 'Điều khiển local API proxy server.', running: 'Đang chạy', stopped: 'Đã dừng', start: 'Bắt đầu dịch vụ', stop: 'Dừng dịch vụ', }, config: { port: 'Cổng lắng nghe', timeout: 'Thời gian chờ request', api_key: 'API Key', auto_start: 'Tự động chạy cùng app', auto_start_desc: 'Khởi động proxy khi ứng dụng mở lên', local_access: 'Truy cập trong mạng nội bộ:', select_ip: 'Chọn IP', no_token_warning: 'API key chưa được đặt. Bất kỳ ai trong mạng đều có thể truy cập!', show_key: 'Hiện', hide_key: 'Ẩn', }, mapping: { title: 'Ánh xạ mô hình', description: 'Ánh xạ model Claude sang Gemini để định tuyến.', maps_to: 'Ánh xạ tới', restore: 'Khôi phục mặc định', }, examples: { title: 'Ví dụ sử dụng', description: 'Ví dụ lệnh để gọi local API proxy.', }, }, }; export default vi;