diff --git a/locales/bg.json b/locales/bg.json index 5f227f6..0bac505 100644 --- a/locales/bg.json +++ b/locales/bg.json @@ -20,7 +20,17 @@ "totally_reset": "Нулирайте изцяло Курсор", "outdate": "Изтекъл срок", "temp_github_register": "Временно регистриране с GitHub", - "coming_soon": "Очаквайте скоро" + "coming_soon": "Очаквайте скоро", + "fixed_soon": "Ще бъде поправено скоро", + "contribute": "Принос към проекта", + "config": "Покажи конфигурацията", + "delete_google_account": "Изтрий Google акаунта на Cursor", + "continue_prompt": "Продължи? (y/N): ", + "operation_cancelled_by_user": "Операцията е отменена от потребителя", + "exiting": "Излизане ......", + "bypass_version_check": "Пропусни проверката на версията на Cursor", + "check_user_authorized": "Провери оторизацията на потребителя", + "select_chrome_profile": "Избери Chrome профил" }, "languages": { "en": "English", diff --git a/locales/de.json b/locales/de.json index 78b5fae..5a5fc2d 100644 --- a/locales/de.json +++ b/locales/de.json @@ -22,7 +22,16 @@ "temp_github_register": "Temporäre GitHub-Registrierung", "admin_required": "Ausführen als ausführbare Datei, Administratorrechte erforderlich.", "admin_required_continue": "Mit der aktuellen Version fortfahren...", - "coming_soon": "Bald verfügbar" + "coming_soon": "Bald verfügbar", + "fixed_soon": "Bald Behoben", + "contribute": "Zum Projekt Beitragen", + "config": "Konfiguration Anzeigen", + "delete_google_account": "Cursor Google-Konto Löschen", + "continue_prompt": "Fortfahren? (y/N): ", + "operation_cancelled_by_user": "Vorgang vom Benutzer abgebrochen", + "exiting": "Wird beendet ……", + "bypass_version_check": "Cursor Versionsprüfung Überspringen", + "check_user_authorized": "Benutzerautorisierung Prüfen" }, "languages": { "en": "Englisch", @@ -34,7 +43,9 @@ "fr": "Französisch", "pt": "Portugiesisch", "ru": "Russisch", - "es": "Spanisch" + "es": "Spanisch", + "tr": "Türkisch", + "bg": "Bulgarisch" }, "quit_cursor": { "start": "Beginne Cursor zu Beenden", @@ -101,7 +112,14 @@ "package_not_found": "Package.json Nicht Gefunden: {path}", "check_version_failed": "Versionsüberprüfung Fehlgeschlagen: {error}", "stack_trace": "Stack Trace", - "version_too_low": "Cursor-Version Zu Niedrig: {version} < 0.45.0" + "version_too_low": "Cursor-Version Zu Niedrig: {version} < 0.45.0", + "no_write_permission": "Keine Schreibberechtigung: {path}", + "path_not_found": "Pfad Nicht Gefunden: {path}", + "modify_file_failed": "Datei Ändern Fehlgeschlagen: {error}", + "windows_machine_id_updated": "Windows Maschinen-ID Erfolgreich Aktualisiert", + "update_windows_machine_id_failed": "Windows Maschinen-ID Aktualisierung Fehlgeschlagen: {error}", + "update_windows_machine_guid_failed": "Windows Maschinen-GUID Aktualisierung Fehlgeschlagen: {error}", + "file_not_found": "Datei Nicht Gefunden: {path}" }, "register": { "title": "Cursor Registrierungstool", diff --git a/locales/es.json b/locales/es.json index 2890e34..d2a16aa 100644 --- a/locales/es.json +++ b/locales/es.json @@ -22,7 +22,15 @@ "admin_required": "Ejecutando como ejecutable, se requieren privilegios de administrador.", "admin_required_continue": "Continuando sin privilegios de administrador.", "coming_soon": "Próximamente", - "fixed_soon": "Arreglado Pronto" + "fixed_soon": "Arreglado Pronto", + "contribute": "Contribuir al Proyecto", + "config": "Mostrar Configuración", + "delete_google_account": "Eliminar Cuenta Google de Cursor", + "continue_prompt": "¿Continuar? (y/N): ", + "operation_cancelled_by_user": "Operación cancelada por el usuario", + "exiting": "Saliendo ……", + "bypass_version_check": "Omitir Verificación de Versión de Cursor", + "check_user_authorized": "Verificar Usuario Autorizado" }, "languages": { "en": "Inglés", @@ -103,8 +111,14 @@ "package_not_found": "Package.json No Encontrado: {path}", "check_version_failed": "Falló la Verificación de Versión: {error}", "stack_trace": "Traza de la Pila", - "version_too_low": "Versión de Cursor Muy Baja: {version} < 0.45.0" - + "version_too_low": "Versión de Cursor Muy Baja: {version} < 0.45.0", + "no_write_permission": "Sin Permiso de Escritura: {path}", + "path_not_found": "Ruta No Encontrada: {path}", + "modify_file_failed": "Falló la Modificación del Archivo: {error}", + "windows_machine_id_updated": "ID de Máquina Windows Actualizado Exitosamente", + "update_windows_machine_id_failed": "Falló la Actualización del ID de Máquina Windows: {error}", + "update_windows_machine_guid_failed": "Falló la Actualización del GUID de Máquina Windows: {error}", + "file_not_found": "Archivo No Encontrado: {path}" }, "register": { "title": "Herramienta de Registro de Cursor", @@ -452,4 +466,4 @@ "invalid_selection": "Selección inválida. Por favor, intente de nuevo", "warning_chrome_close": "Advertencia: Esto cerrará todos los procesos de Chrome en ejecución" } -} +} diff --git a/locales/fr.json b/locales/fr.json index 7a4e908..a371eb3 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -19,7 +19,16 @@ "totally_reset": "Réinitialisation Complète de Cursor", "outdate": "Obsolete", "temp_github_register": "Inscription GitHub temporaire", - "coming_soon": "Bientôt" + "coming_soon": "Bientôt", + "fixed_soon": "Bientôt Corrigé", + "contribute": "Contribuer au Projet", + "config": "Afficher la Configuration", + "delete_google_account": "Supprimer le Compte Google Cursor", + "continue_prompt": "Continuer ? (y/N) : ", + "operation_cancelled_by_user": "Opération annulée par l'utilisateur", + "exiting": "Fermeture ……", + "bypass_version_check": "Ignorer la Vérification de Version de Cursor", + "check_user_authorized": "Vérifier l'Autorisation de l'Utilisateur" }, "languages": { "en": "Anglais", @@ -31,7 +40,9 @@ "fr": "Français", "pt": "Portugais", "ru": "Russe", - "es": "Espagnol" + "es": "Espagnol", + "tr": "Turc", + "bg": "Bulgare" }, "quit_cursor": { "start": "Début de la Fermeture de Cursor", @@ -98,7 +109,14 @@ "package_not_found": "Package.json Non Trouvé : {path}", "check_version_failed": "Échec de la Vérification de la Version : {error}", "stack_trace": "Trace de la Pile", - "version_too_low": "Version de Cursor Trop Basse : {version} < 0.45.0" + "version_too_low": "Version de Cursor Trop Basse : {version} < 0.45.0", + "no_write_permission": "Pas de Permission d'Écriture : {path}", + "path_not_found": "Chemin Non Trouvé : {path}", + "modify_file_failed": "Échec de la Modification du Fichier : {error}", + "windows_machine_id_updated": "ID de la Machine Windows Mis à Jour avec Succès", + "update_windows_machine_id_failed": "Échec de la Mise à Jour de l'ID de la Machine Windows : {error}", + "update_windows_machine_guid_failed": "Échec de la Mise à Jour du GUID de la Machine Windows : {error}", + "file_not_found": "Fichier Non Trouvé : {path}" }, "register": { "title": "Outil d'Enregistrement de Cursor", diff --git a/locales/nl.json b/locales/nl.json index f4d3277..6da3d66 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -20,7 +20,16 @@ "totally_reset": "Cursor volledig resetten", "outdate": "Verouderd", "temp_github_register": "Tijdelijke GitHub-registratie", - "coming_soon": "Binnenkort" + "coming_soon": "Binnenkort", + "fixed_soon": "Binnenkort Opgelost", + "contribute": "Bijdragen aan het Project", + "config": "Configuratie Weergeven", + "delete_google_account": "Cursor Google Account Verwijderen", + "continue_prompt": "Doorgaan? (y/N): ", + "operation_cancelled_by_user": "Operatie geannuleerd door gebruiker", + "exiting": "Afsluiten ……", + "bypass_version_check": "Cursor Versiecontrole Overslaan", + "check_user_authorized": "Gebruikersautorisatie Controleren" }, "languages": { "en": "Engels", @@ -99,7 +108,14 @@ "package_not_found": "Package.json niet gevonden: {path}", "check_version_failed": "Versiecontrole mislukt: {error}", "stack_trace": "Stack Trace", - "version_too_low": "Cursor-versie te laag: {version} < 0.45.0" + "version_too_low": "Cursor-versie te laag: {version} < 0.45.0", + "no_write_permission": "Geen schrijfrechten: {path}", + "path_not_found": "Pad niet gevonden: {path}", + "modify_file_failed": "Bestand wijzigen mislukt: {error}", + "windows_machine_id_updated": "Windows Machine-ID succesvol bijgewerkt", + "update_windows_machine_id_failed": "Windows Machine-ID bijwerken mislukt: {error}", + "update_windows_machine_guid_failed": "Windows Machine GUID bijwerken mislukt: {error}", + "file_not_found": "Bestand niet gevonden: {path}" }, "register": { "title": "Cursor Registratietool", @@ -388,4 +404,4 @@ "invalid_selection": "Ongeldige selectie. Probeer het opnieuw", "warning_chrome_close": "Waarschuwing: Dit zal alle actieve Chrome processen sluiten" } -} +} diff --git a/locales/pt.json b/locales/pt.json index 7af65fe..b867b8c 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -19,7 +19,16 @@ "totally_reset": "Redefinir Cursor Completamente", "outdate": "Obsoleto", "temp_github_register": "Registro temporário do GitHub", - "coming_soon": "Em breve" + "coming_soon": "Em breve", + "fixed_soon": "Será corrigido em breve", + "contribute": "Contribuir para o Projeto", + "config": "Mostrar Configuração", + "delete_google_account": "Excluir Conta Google do Cursor", + "continue_prompt": "Continuar? (y/N): ", + "operation_cancelled_by_user": "Operação cancelada pelo usuário", + "exiting": "Saindo ......", + "bypass_version_check": "Ignorar Verificação de Versão do Cursor", + "check_user_authorized": "Verificar Autorização do Usuário" }, "languages": { "en": "Inglês", diff --git a/locales/ru.json b/locales/ru.json index ee642c4..bb2dced 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -19,7 +19,17 @@ "totally_reset": "Полностью сбросить Cursor", "outdate": "Устаревший", "temp_github_register": "Временная регистрация GitHub", - "coming_soon": "Скоро" + "coming_soon": "Скоро", + "fixed_soon": "Скоро будет исправлено", + "contribute": "Внести вклад в проект", + "config": "Показать конфигурацию", + "delete_google_account": "Удалить Google аккаунт Cursor", + "continue_prompt": "Продолжить? (y/N): ", + "operation_cancelled_by_user": "Операция отменена пользователем", + "exiting": "Выход ......", + "bypass_version_check": "Пропустить проверку версии Cursor", + "check_user_authorized": "Проверить авторизацию пользователя", + "select_chrome_profile": "Выбрать профиль Chrome" }, "languages": { "en": "Английский", @@ -396,4 +406,4 @@ "invalid_selection": "Неверный выбор. Пожалуйста, попробуйте снова", "warning_chrome_close": "Предупреждение: Это закроет все запущенные процессы Chrome" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/locales/tr.json b/locales/tr.json index e657fcb..7b98a85 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -9,6 +9,7 @@ "register_manual": "Cursor'ı Özel E-posta ile Kaydet", "quit": "Cursor Uygulamasını Kapat", "select_language": "Dili Değiştir", + "select_chrome_profile": "Chrome Profilini Seç", "input_choice": "Lütfen seçiminizi girin ({choices})", "invalid_choice": "Geçersiz seçim. Lütfen {choices} arasından bir sayı girin", "program_terminated": "Program kullanıcı tarafından sonlandırıldı", @@ -19,7 +20,18 @@ "totally_reset": "Cursor'ı Tamamen Sıfırla", "outdate": "güncel değil", "temp_github_register": "Geçici GitHub Kaydı", - "coming_soon": "Yakında" + "admin_required": "Running as executable, administrator privileges required.", + "admin_required_continue": "Continuing without administrator privileges.", + "coming_soon": "Yakında", + "fixed_soon": "Yakında Düzeltilecek", + "contribute": "Projeye Katkıda Bulun", + "config": "Yapılandırmayı Göster", + "delete_google_account": "Cursor Google Hesabını Sil", + "continue_prompt": "Devam et? (y/N): ", + "operation_cancelled_by_user": "İşlem kullanıcı tarafından iptal edildi", + "exiting": "Çıkılıyor ......", + "bypass_version_check": "Cursor Sürüm Kontrolünü Atla", + "check_user_authorized": "Kullanıcı Yetkilendirmesini Kontrol Et" }, "languages": { "en": "English", diff --git a/locales/vi.json b/locales/vi.json index 8a7e729..5a67f65 100644 --- a/locales/vi.json +++ b/locales/vi.json @@ -20,13 +20,26 @@ "totally_reset": "Đặt lại hoàn toàn Cursor", "outdate": "Quá cũ", "temp_github_register": "Đăng ký GitHub tạm thời", - "coming_soon": "Sắp ra mắt" + "admin_required": "Đang chạy dưới dạng tệp thực thi, yêu cầu quyền quản trị.", + "admin_required_continue": "Tiếp tục mà không có quyền quản trị.", + "coming_soon": "Sắp ra mắt", + "fixed_soon": "Sẽ Sớm Được Sửa", + "contribute": "Đóng Góp Cho Dự Án", + "config": "Hiển Thị Cấu Hình", + "delete_google_account": "Xóa Tài Khoản Google Cursor", + "continue_prompt": "Tiếp tục? (y/N): ", + "operation_cancelled_by_user": "Thao tác đã bị người dùng hủy", + "exiting": "Đang thoát ……", + "bypass_version_check": "Bỏ qua Kiểm tra Phiên bản Cursor", + "check_user_authorized": "Kiểm tra Quyền Người dùng" }, "languages": { "en": "Tiếng Anh", "zh_cn": "Tiếng Trung Giản Thể", "zh_tw": "Tiếng Trung Phồn Thể", "vi": "Tiếng Việt", + "tr": "Tiếng Thổ Nhĩ Kỳ", + "bg": "Tiếng Bulgaria", "nl": "Tiếng Hà Lan", "de": "Tiếng Đức", "fr": "Tiếng Pháp", @@ -99,7 +112,14 @@ "package_not_found": "Không Tìm Thấy Package.json: {path}", "check_version_failed": "Kiểm Tra Phiên Bản Thất Bại: {error}", "stack_trace": "Dấu Vết Ngăn Xếp", - "version_too_low": "Phiên Bản Cursor Quá Thấp: {version} < 0.45.0" + "version_too_low": "Phiên Bản Cursor Quá Thấp: {version} < 0.45.0", + "no_write_permission": "Không Có Quyền Ghi: {path}", + "path_not_found": "Không Tìm Thấy Đường Dẫn: {path}", + "modify_file_failed": "Sửa Đổi Tệp Thất Bại: {error}", + "windows_machine_id_updated": "Cập Nhật ID Máy Windows Thành Công", + "update_windows_machine_id_failed": "Cập Nhật ID Máy Windows Thất Bại: {error}", + "update_windows_machine_guid_failed": "Cập Nhật GUID Máy Windows Thất Bại: {error}", + "file_not_found": "Không Tìm Thấy Tệp: {path}" }, "register": { "title": "Công Cụ Đăng Ký Cursor", @@ -176,10 +196,12 @@ "password_submitted": "Đã Gửi Mật Khẩu", "total_usage": "Tổng Sử Dụng: {usage}", "setting_on_password": "Đang Đặt Mật Khẩu", - "getting_code": "Đang Lấy Mã Xác Minh, Sẽ Thử Trong 60s" + "getting_code": "Đang Lấy Mã Xác Minh, Sẽ Thử Trong 60s", + "human_verify_error": "Không thể xác minh người dùng. Đang thử lại...", + "max_retries_reached": "Đã đạt số lần thử tối đa. Đăng ký thất bại." }, "auth": { - "title": "Trình Quản Lý Xác Thực Cursor", + "title": "Quản Lý Xác Thực Cursor", "checking_auth": "Đang Kiểm Tra Tệp Xác Thực", "auth_not_found": "Không Tìm Thấy Tệp Xác Thực", "auth_file_error": "Lỗi Tệp Xác Thực: {error}", @@ -191,7 +213,7 @@ "auth_file_create_failed": "Tạo Tệp Xác Thực Thất Bại: {error}", "press_enter": "Nhấn Enter để Thoát", "reset_machine_id": "Đặt Lại ID Máy", - "database_connection_closed": "Kết Nối Cơ Sở Dữ Liệu Đã Đóng", + "database_connection_closed": "Đã Đóng Kết Nối Cơ Sở Dữ Liệu", "database_updated_successfully": "Cập Nhật Cơ Sở Dữ Liệu Thành Công", "connected_to_database": "Đã Kết Nối Đến Cơ Sở Dữ Liệu", "updating_pair": "Đang Cập Nhật Cặp Khóa-Giá Trị", @@ -213,7 +235,7 @@ "navigation_error": "Lỗi Điều Hướng: {error}", "email_copy_error": "Lỗi Sao Chép Email: {error}", "mailbox_error": "Lỗi Hộp Thư: {error}", - "token_saved_to_file": "Token Đã Lưu Vào cursor_tokens.txt", + "token_saved_to_file": "Token Đã Được Lưu Vào cursor_tokens.txt", "navigate_to": "Đang Điều Hướng Đến {url}", "generate_email_success": "Tạo Email Thành Công", "select_email_domain": "Chọn Tên Miền Email", @@ -229,12 +251,12 @@ "get_cursor_session_token_failed": "Lấy Token Phiên Cursor Thất Bại", "save_token_failed": "Lưu Token Thất Bại", "database_updated_successfully": "Cập Nhật Cơ Sở Dữ Liệu Thành Công", - "database_connection_closed": "Kết Nối Cơ Sở Dữ Liệu Đã Đóng", + "database_connection_closed": "Đã Đóng Kết Nối Cơ Sở Dữ Liệu", "no_valid_verification_code": "Không Có Mã Xác Minh Hợp Lệ" }, "email": { "starting_browser": "Đang Khởi Động Trình Duyệt", - "visiting_site": "Đang Truy Cập mail domains", + "visiting_site": "Đang Truy Cập Tên Miền Mail", "create_success": "Tạo Email Thành Công", "create_failed": "Tạo Email Thất Bại", "create_error": "Lỗi Tạo Email: {error}", @@ -261,16 +283,22 @@ "blocked_domains_loaded": "Đã Tải Tên Miền Bị Chặn: {count}", "blocked_domains_loaded_error": "Lỗi Tải Tên Miền Bị Chặn: {error}", "blocked_domains_loaded_success": "Tải Tên Miền Bị Chặn Thành Công", - "blocked_domains_loaded_timeout": "Tải Tên Miền Bị Chặn Hết Thời Gian: {timeout}s", + "blocked_domains_loaded_timeout": "Hết Thời Gian Tải Tên Miền Bị Chặn: {timeout}s", "blocked_domains_loaded_timeout_error": "Lỗi Hết Thời Gian Tải Tên Miền Bị Chặn: {error}", "available_domains_loaded": "Đã Tải Tên Miền Khả Dụng: {count}", - "domains_filtered": "Tên Miền Đã Lọc: {count}", - "trying_to_create_email": "Đang cố gắng tạo email: {email}", - "domain_blocked": "Tên Miền Bị Chặn: {domain}" + "domains_filtered": "Đã Lọc Tên Miền: {count}", + "trying_to_create_email": "Đang Thử Tạo Email: {email}", + "domain_blocked": "Tên Miền Bị Chặn: {domain}", + "using_chrome_profile": "Đang Sử Dụng Hồ Sơ Chrome từ: {user_data_dir}", + "no_display_found": "Không Tìm Thấy Màn Hình. Đảm Bảo X Server Đang Chạy.", + "try_export_display": "Thử: export DISPLAY=:0", + "extension_load_error": "Lỗi Tải Tiện Ích Mở Rộng: {error}", + "make_sure_chrome_chromium_is_properly_installed": "Đảm Bảo Chrome/Chromium Được Cài Đặt Đúng Cách", + "try_install_chromium": "Thử: sudo apt install chromium-browser" }, "update": { "title": "Tắt Tự Động Cập Nhật Cursor", - "disable_success": "Tắt Tự Động Cập Nhật Thành Công", + "disable_success": "Đã Tắt Tự Động Cập Nhật Thành Công", "disable_failed": "Tắt Tự Động Cập Nhật Thất Bại: {error}", "press_enter": "Nhấn Enter để Thoát", "start_disable": "Bắt Đầu Tắt Tự Động Cập Nhật", @@ -279,122 +307,425 @@ "removing_directory": "Đang Xóa Thư Mục", "directory_removed": "Đã Xóa Thư Mục", "creating_block_file": "Đang Tạo Tệp Chặn", - "block_file_created": "Đã Tạo Tệp Chặn" + "block_file_created": "Đã Tạo Tệp Chặn", + "clearing_update_yml": "Đang Xóa Tệp update.yml", + "update_yml_cleared": "Đã Xóa Tệp update.yml", + "update_yml_not_found": "Không Tìm Thấy Tệp update.yml", + "clear_update_yml_failed": "Xóa Tệp update.yml Thất Bại: {error}", + "unsupported_os": "Hệ Điều Hành Không Được Hỗ Trợ: {system}", + "remove_directory_failed": "Xóa Thư Mục Thất Bại: {error}", + "create_block_file_failed": "Tạo Tệp Chặn Thất Bại: {error}", + "directory_locked": "Thư Mục Bị Khóa: {path}", + "yml_locked": "Tệp update.yml Bị Khóa", + "block_file_locked": "Tệp Chặn Bị Khóa", + "yml_already_locked": "Tệp update.yml Đã Bị Khóa", + "block_file_already_locked": "Tệp Chặn Đã Bị Khóa", + "block_file_locked_error": "Lỗi Khóa Tệp Chặn: {error}", + "yml_locked_error": "Lỗi Khóa Tệp update.yml: {error}", + "block_file_already_locked_error": "Lỗi Tệp Chặn Đã Bị Khóa: {error}", + "yml_already_locked_error": "Lỗi Tệp update.yml Đã Bị Khóa: {error}" }, "updater": { "checking": "Đang Kiểm Tra Cập Nhật...", - "new_version_available": "Có Phiên Bản Mới! (Hiện Tại: {current}, Mới Nhất: {latest})", - "updating": "Đang Cập Nhật Lên Phiên Bản Mới Nhất. Chương Trình Sẽ Tự Động Khởi Động Lại.", - "up_to_date": "Bạn Đang Sử Dụng Phiên Bản Mới Nhất.", - "check_failed": "Không Thể Kiểm Tra Cập Nhật: {error}", - "continue_anyway": "Tiếp Tục Với Phiên Bản Hiện Tại...", - "update_confirm": "Bạn Có Muốn Cập Nhật Lên Phiên Bản Mới Nhất Không? (Y/n)", - "update_skipped": "Bỏ Qua Cập Nhật.", - "invalid_choice": "Lựa Chọn Không Hợp Lệ. Vui Lòng Nhập 'Y' Hoặc 'n'.", + "new_version_available": "Có phiên bản mới! (Hiện tại: {current}, Mới nhất: {latest})", + "updating": "Đang cập nhật lên phiên bản mới nhất. Chương trình sẽ tự động khởi động lại.", + "up_to_date": "Bạn đang sử dụng phiên bản mới nhất.", + "check_failed": "Kiểm tra cập nhật thất bại: {error}", + "continue_anyway": "Tiếp tục với phiên bản hiện tại...", + "update_confirm": "Bạn có muốn cập nhật lên phiên bản mới nhất không? (Y/n)", + "update_skipped": "Bỏ qua cập nhật.", + "invalid_choice": "Lựa chọn không hợp lệ. Vui lòng nhập 'Y' hoặc 'n'.", "development_version": "Phiên Bản Phát Triển {current} > {latest}", - "changelog_title": "Nhật ký thay đổi" + "changelog_title": "Nhật Ký Thay Đổi", + "rate_limit_exceeded": "Đã vượt quá giới hạn API GitHub. Bỏ qua kiểm tra cập nhật." }, "totally_reset": { - "title": "Đặt lại hoàn toàn Cursor", - "checking_config": "Đang kiểm tra tệp cấu hình", - "config_not_found": "Không tìm thấy tệp cấu hình", - "no_permission": "Không thể đọc hoặc ghi tệp cấu hình, vui lòng kiểm tra quyền tệp", - "reading_config": "Đang đọc cấu hình hiện tại", - "creating_backup": "Đang tạo bản sao lưu cấu hình", - "backup_exists": "Tệp sao lưu đã tồn tại, bỏ qua bước sao lưu", - "generating_new_machine_id": "Đang tạo ID máy mới", - "saving_new_config": "Đang lưu cấu hình mới vào JSON", - "success": "Đặt lại Cursor thành công", - "error": "Đặt lại Cursor thất bại: {error}", - "press_enter": "Nhấn Enter để thoát", - "reset_machine_id": "Đặt lại ID máy", - "database_connection_closed": "Kết nối cơ sở dữ liệu đã đóng", - "database_updated_successfully": "Cập nhật cơ sở dữ liệu thành công", - "connected_to_database": "Đã kết nối với cơ sở dữ liệu", - "updating_pair": "Đang cập nhật cặp khóa-giá trị", + "title": "Đặt Lại Hoàn Toàn Cursor", + "checking_config": "Đang Kiểm Tra Tệp Cấu Hình", + "config_not_found": "Không Tìm Thấy Tệp Cấu Hình", + "no_permission": "Không Thể Đọc Hoặc Ghi Tệp Cấu Hình, Vui Lòng Kiểm Tra Quyền Tệp", + "reading_config": "Đang Đọc Cấu Hình Hiện Tại", + "creating_backup": "Đang Tạo Bản Sao Lưu Cấu Hình", + "backup_exists": "Tệp Sao Lưu Đã Tồn Tại, Bỏ Qua Bước Sao Lưu", + "generating_new_machine_id": "Đang Tạo ID Máy Mới", + "saving_new_config": "Đang Lưu Cấu Hình Mới Vào JSON", + "success": "Đặt Lại Cursor Thành Công", + "error": "Đặt Lại Cursor Thất Bại: {error}", + "press_enter": "Nhấn Enter để Thoát", + "reset_machine_id": "Đặt Lại ID Máy", + "database_connection_closed": "Đã Đóng Kết Nối Cơ Sở Dữ Liệu", + "database_updated_successfully": "Cập Nhật Cơ Sở Dữ Liệu Thành Công", + "connected_to_database": "Đã Kết Nối Đến Cơ Sở Dữ Liệu", + "updating_pair": "Đang Cập Nhật Cặp Khóa-Giá Trị", "db_not_found": "Không tìm thấy tệp cơ sở dữ liệu tại: {path}", - "db_permission_error": "Không thể truy cập tệp cơ sở dữ liệu, vui lòng kiểm tra quyền", - "db_connection_error": "Kết nối cơ sở dữ liệu thất bại: {error}", + "db_permission_error": "Không thể truy cập tệp cơ sở dữ liệu. Vui lòng kiểm tra quyền", + "db_connection_error": "Không thể kết nối đến cơ sở dữ liệu: {error}", "feature_title": "TÍNH NĂNG", - "feature_1": "Xóa hoàn toàn các cài đặt và cấu hình của Cursor AI", - "feature_2": "Xóa tất cả dữ liệu bộ nhớ đệm bao gồm lịch sử và gợi ý AI", - "feature_3": "Đặt lại ID máy để vượt qua kiểm tra dùng thử", - "feature_4": "Tạo định danh máy ngẫu nhiên mới", - "feature_5": "Xóa tiện ích mở rộng và tùy chỉnh", + "feature_1": "Xóa hoàn toàn cài đặt và cấu hình của Cursor AI", + "feature_2": "Xóa tất cả dữ liệu đã lưu trong bộ nhớ cache bao gồm lịch sử AI và lời nhắc", + "feature_3": "Đặt lại ID máy để bỏ qua phát hiện dùng thử", + "feature_4": "Tạo định danh máy mới ngẫu nhiên", + "feature_5": "Xóa tiện ích mở rộng và tùy chọn tùy chỉnh", "feature_6": "Đặt lại thông tin dùng thử và dữ liệu kích hoạt", - "feature_7": "Quét sâu các tệp ẩn liên quan đến giấy phép và dùng thử", - "feature_8": "Bảo toàn các tệp và ứng dụng không liên quan đến Cursor", + "feature_7": "Quét sâu các tệp giấy phép và dùng thử ẩn", + "feature_8": "Bảo toàn an toàn các tệp và ứng dụng không phải của Cursor", "feature_9": "Tương thích với Windows, macOS và Linux", - "disclaimer_title": "LƯU Ý", - "disclaimer_1": "Công cụ này sẽ xóa vĩnh viễn tất cả cài đặt,", - "disclaimer_2": "cấu hình và dữ liệu bộ nhớ đệm của Cursor AI. Thao tác này không thể hoàn tác.", - "disclaimer_3": "Tệp mã nguồn của bạn sẽ KHÔNG bị ảnh hưởng, công cụ chỉ nhắm đến", - "disclaimer_4": "các tệp chỉnh sửa Cursor AI và cơ chế kiểm tra dùng thử.", + "disclaimer_title": "TUYÊN BỐ MIỄN TRỪ", + "disclaimer_1": "Công cụ này sẽ xóa vĩnh viễn tất cả cài đặt Cursor AI,", + "disclaimer_2": "cấu hình và dữ liệu đã lưu trong bộ nhớ cache. Hành động này không thể hoàn tác.", + "disclaimer_3": "Các tệp mã của bạn sẽ KHÔNG bị ảnh hưởng, và công cụ được thiết kế", + "disclaimer_4": "chỉ nhắm vào các tệp trình soạn thảo Cursor AI và cơ chế phát hiện dùng thử.", "disclaimer_5": "Các ứng dụng khác trên hệ thống của bạn sẽ không bị ảnh hưởng.", "disclaimer_6": "Bạn sẽ cần thiết lập lại Cursor AI sau khi chạy công cụ này.", - "disclaimer_7": "Sử dụng dưới sự tự chịu trách nhiệm", + "disclaimer_7": "Sử dụng với rủi ro của riêng bạn", "confirm_title": "Bạn có chắc chắn muốn tiếp tục không?", - "confirm_1": "Hành động này sẽ xóa tất cả cài đặt,", - "confirm_2": "cấu hình và dữ liệu bộ nhớ đệm của Cursor AI. Hành động này không thể hoàn tác.", - "confirm_3": "Tệp mã nguồn của bạn sẽ KHÔNG bị ảnh hưởng, công cụ chỉ nhắm đến", - "confirm_4": "các tệp chỉnh sửa Cursor AI và cơ chế kiểm tra dùng thử.", + "confirm_1": "Hành động này sẽ xóa tất cả cài đặt Cursor AI,", + "confirm_2": "cấu hình và dữ liệu đã lưu trong bộ nhớ cache. Hành động này không thể hoàn tác.", + "confirm_3": "Các tệp mã của bạn sẽ KHÔNG bị ảnh hưởng, và công cụ được thiết kế", + "confirm_4": "chỉ nhắm vào các tệp trình soạn thảo Cursor AI và cơ chế phát hiện dùng thử.", "confirm_5": "Các ứng dụng khác trên hệ thống của bạn sẽ không bị ảnh hưởng.", "confirm_6": "Bạn sẽ cần thiết lập lại Cursor AI sau khi chạy công cụ này.", - "confirm_7": "Sử dụng dưới sự tự chịu trách nhiệm", + "confirm_7": "Sử dụng với rủi ro của riêng bạn", "invalid_choice": "Vui lòng nhập 'Y' hoặc 'n'", - "skipped_for_safety": "Bỏ qua vì an toàn (không liên quan đến Cursor): {path}", - "deleted": "Đã xóa: {path}", - "error_deleting": "Lỗi khi xóa {path}: {error}", + "skipped_for_safety": "Đã bỏ qua vì an toàn (không liên quan đến Cursor): {path}", + "deleted": "Đã Xóa: {path}", + "error_deleting": "Lỗi xóa {path}: {error}", "not_found": "Không tìm thấy tệp: {path}", - "resetting_machine_id": "Đang đặt lại ID máy để vượt qua kiểm tra dùng thử...", + "resetting_machine_id": "Đang đặt lại định danh máy để bỏ qua phát hiện dùng thử...", "created_machine_id": "Đã tạo ID máy mới: {path}", - "error_creating_machine_id": "Lỗi khi tạo tệp ID máy {path}: {error}", - "error_searching": "Lỗi khi tìm kiếm tệp trong {path}: {error}", + "error_creating_machine_id": "Lỗi tạo tệp ID máy {path}: {error}", + "error_searching": "Lỗi tìm kiếm tệp trong {path}: {error}", "created_extended_trial_info": "Đã tạo thông tin dùng thử mở rộng mới: {path}", - "error_creating_trial_info": "Lỗi khi tạo tệp thông tin dùng thử {path}: {error}", - "resetting_cursor_ai_editor": "Đang đặt lại Cursor AI Editor... Vui lòng chờ.", - "reset_cancelled": "Đã hủy đặt lại. Thoát mà không thực hiện thay đổi nào.", - "windows_machine_id_modification_skipped": "Bỏ qua sửa đổi ID máy Windows: {error}", - "linux_machine_id_modification_skipped": "Bỏ qua sửa đổi machine-id Linux: {error}", - "note_complete_machine_id_reset_may_require_running_as_administrator": "Lưu ý: Đặt lại ID máy hoàn toàn có thể yêu cầu chạy dưới quyền quản trị viên", + "error_creating_trial_info": "Lỗi tạo tệp thông tin dùng thử {path}: {error}", + "resetting_cursor_ai_editor": "Đang đặt lại Trình soạn thảo Cursor AI... Vui lòng đợi.", + "reset_cancelled": "Đã hủy đặt lại. Thoát mà không thay đổi gì.", + "windows_machine_id_modification_skipped": "Đã bỏ qua sửa đổi ID máy Windows: {error}", + "linux_machine_id_modification_skipped": "Đã bỏ qua sửa đổi machine-id Linux: {error}", + "note_complete_machine_id_reset_may_require_running_as_administrator": "Lưu ý: Đặt lại ID máy hoàn toàn có thể yêu cầu chạy với quyền quản trị", "note_complete_system_machine_id_reset_may_require_sudo_privileges": "Lưu ý: Đặt lại machine-id hệ thống hoàn toàn có thể yêu cầu quyền sudo", - "windows_registry_instructions": "📝 LƯU Ý: Để đặt lại hoàn toàn trên Windows, bạn có thể cần dọn dẹp các mục registry.", - "windows_registry_instructions_2": " Chạy 'regedit' và tìm kiếm khóa chứa 'Cursor' hoặc 'CursorAI' dưới HKEY_CURRENT_USER\\Software\\ và xóa chúng.\n", - "reset_log_1": "Cursor AI đã được đặt lại hoàn toàn và vượt qua kiểm tra dùng thử!", - "reset_log_2": "Vui lòng khởi động lại hệ thống để thay đổi có hiệu lực.", - "reset_log_3": "Bạn cần cài đặt lại Cursor AI và sẽ có kỳ dùng thử mới.", - "reset_log_4": "Để có kết quả tốt nhất, bạn có thể cân nhắc:", - "reset_log_5": "Sử dụng địa chỉ email khác khi đăng ký dùng thử mới", - "reset_log_6": "Nếu có thể, sử dụng VPN để thay đổi địa chỉ IP", + "windows_registry_instructions": "📝 LƯU Ý: Để đặt lại hoàn toàn trên Windows, bạn có thể cần xóa các mục đăng ký.", + "windows_registry_instructions_2": " Chạy 'regedit' và tìm kiếm các khóa chứa 'Cursor' hoặc 'CursorAI' trong HKEY_CURRENT_USER\\Software\\ và xóa chúng.", + "reset_log_1": "Cursor AI đã được đặt lại hoàn toàn và bỏ qua phát hiện dùng thử!", + "reset_log_2": "Vui lòng khởi động lại hệ thống để các thay đổi có hiệu lực.", + "reset_log_3": "Bạn sẽ cần cài đặt lại Cursor AI và bây giờ sẽ có một giai đoạn dùng thử mới.", + "reset_log_4": "Để có kết quả tốt nhất, hãy xem xét:", + "reset_log_5": "Sử dụng một địa chỉ email khác khi đăng ký dùng thử mới", + "reset_log_6": "Nếu có thể, sử dụng VPN để thay đổi địa chỉ IP của bạn", "reset_log_7": "Xóa cookie và bộ nhớ cache trình duyệt trước khi truy cập trang web Cursor AI", - "reset_log_8": "Nếu vẫn gặp sự cố, hãy thử cài Cursor AI vào vị trí khác", - "reset_log_9": "Nếu gặp bất kỳ vấn đề nào, hãy truy cập Github Issue Tracker và tạo issue tại https://github.com/yeongpin/cursor-free-vip/issues", - "unexpected_error": "Đã xảy ra lỗi không mong muốn: {error}", - "report_issue": "Vui lòng báo cáo sự cố này tại Github Issue Tracker: https://github.com/yeongpin/cursor-free-vip/issues", - "keyboard_interrupt": "Quá trình bị người dùng hủy. Đang thoát...", - "return_to_main_menu": "Trở về menu chính...", - "process_interrupted": "Quá trình bị gián đoạn. Đang thoát...", + "reset_log_8": "Nếu vấn đề vẫn còn, hãy thử cài đặt Cursor AI ở một vị trí khác", + "reset_log_9": "Nếu bạn gặp bất kỳ vấn đề nào, hãy truy cập Github Issue Tracker và tạo một vấn đề tại https://github.com/yeongpin/cursor-free-vip/issues", + "unexpected_error": "Đã xảy ra lỗi không mong đợi: {error}", + "report_issue": "Vui lòng báo cáo vấn đề này tới Github Issue Tracker tại https://github.com/yeongpin/cursor-free-vip/issues", + "keyboard_interrupt": "Quá trình bị người dùng ngắt. Đang thoát...", + "return_to_main_menu": "Đang trở về menu chính...", + "process_interrupted": "Quá trình bị ngắt. Đang thoát...", "press_enter_to_return_to_main_menu": "Nhấn Enter để trở về menu chính...", - "removing_known": "Đang xóa các tệp thử nghiệm/giấy phép đã biết", - "performing_deep_scan": "Đang quét sâu để tìm thêm tệp thử nghiệm/giấy phép", - "found_additional_potential_license_trial_files": "Đã tìm thấy {count} tệp thử nghiệm/giấy phép tiềm năng bổ sung", - "checking_for_electron_localstorage_files": "Đang kiểm tra các tệp Electron localStorage", - "no_additional_license_trial_files_found_in_deep_scan": "Không tìm thấy thêm tệp thử nghiệm/giấy phép nào trong quá trình quét sâu", - "removing_electron_localstorage_files": "Đang xóa các tệp Electron localStorage", - "electron_localstorage_files_removed": "Đã xóa các tệp Electron localStorage", - "electron_localstorage_files_removal_error": "Lỗi khi xóa các tệp Electron localStorage: {error}", - "removing_electron_localstorage_files_completed": "Đã hoàn tất việc xóa các tệp Electron localStorage" + "removing_known": "Đang xóa các tệp dùng thử/giấy phép đã biết", + "performing_deep_scan": "Đang thực hiện quét sâu để tìm thêm tệp dùng thử/giấy phép", + "found_additional_potential_license_trial_files": "Đã tìm thấy {count} tệp giấy phép/dùng thử tiềm năng bổ sung", + "checking_for_electron_localstorage_files": "Đang kiểm tra các tệp localStorage của Electron", + "no_additional_license_trial_files_found_in_deep_scan": "Không tìm thấy tệp giấy phép/dùng thử bổ sung trong quét sâu", + "removing_electron_localstorage_files": "Đang xóa các tệp localStorage của Electron", + "electron_localstorage_files_removed": "Đã xóa các tệp localStorage của Electron", + "electron_localstorage_files_removal_error": "Lỗi xóa các tệp localStorage của Electron: {error}", + "electron_localstorage_files_removal_completed": "Hoàn tất xóa các tệp localStorage của Electron", + "warning_title": "CẢNH BÁO", + "warning_1": "Hành động này sẽ xóa tất cả cài đặt Cursor AI,", + "warning_2": "cấu hình và dữ liệu đã lưu trong bộ nhớ cache. Hành động này không thể hoàn tác.", + "warning_3": "Các tệp mã của bạn sẽ KHÔNG bị ảnh hưởng, và công cụ được thiết kế", + "warning_4": "chỉ nhắm vào các tệp trình soạn thảo Cursor AI và cơ chế phát hiện dùng thử.", + "warning_5": "Các ứng dụng khác trên hệ thống của bạn sẽ không bị ảnh hưởng.", + "warning_6": "Bạn sẽ cần thiết lập lại Cursor AI sau khi chạy công cụ này.", + "warning_7": "Sử dụng với rủi ro của riêng bạn", + "removed": "Đã Xóa: {path}", + "failed_to_reset_machine_guid": "Không thể đặt lại GUID máy", + "failed_to_remove": "Không thể xóa: {path}", + "failed_to_delete_file": "Không thể xóa tệp: {path}", + "failed_to_delete_directory": "Không thể xóa thư mục: {path}", + "failed_to_delete_file_or_directory": "Không thể xóa tệp hoặc thư mục: {path}", + "deep_scanning": "Đang thực hiện quét sâu để tìm thêm tệp dùng thử/giấy phép", + "resetting_cursor": "Đang đặt lại Trình soạn thảo Cursor AI... Vui lòng đợi.", + "completed_in": "Hoàn thành trong {time} giây", + "cursor_reset_completed": "Trình soạn thảo Cursor AI đã được đặt lại hoàn toàn và bỏ qua phát hiện dùng thử!", + "cursor_reset_failed": "Đặt lại Trình soạn thảo Cursor AI thất bại: {error}", + "cursor_reset_cancelled": "Đã hủy đặt lại Trình soạn thảo Cursor AI. Thoát mà không thay đổi gì.", + "operation_cancelled": "Đã hủy thao tác. Thoát mà không thay đổi gì.", + "navigating_to_settings": "Đang điều hướng đến trang cài đặt...", + "already_on_settings": "Đã ở trang cài đặt", + "login_redirect_failed": "Chuyển hướng đăng nhập thất bại, đang thử điều hướng trực tiếp...", + "advanced_tab_not_found": "Không tìm thấy tab Nâng cao sau nhiều lần thử", + "advanced_tab_retry": "Không tìm thấy tab Nâng cao, lần thử {attempt}/{max_attempts}", + "advanced_tab_error": "Lỗi tìm tab Nâng cao: {error}", + "advanced_tab_clicked": "Đã nhấp vào tab Nâng cao", + "direct_advanced_navigation": "Đang thử điều hướng trực tiếp đến tab nâng cao", + "delete_button_not_found": "Không tìm thấy nút Xóa Tài khoản sau nhiều lần thử", + "delete_button_retry": "Không tìm thấy nút Xóa, lần thử {attempt}/{max_attempts}", + "delete_button_error": "Lỗi tìm nút Xóa: {error}", + "delete_button_clicked": "Đã nhấp vào nút Xóa Tài khoản", + "found_danger_zone": "Đã tìm thấy phần Vùng Nguy hiểm", + "delete_input_not_found": "Không tìm thấy ô nhập xác nhận xóa sau nhiều lần thử", + "delete_input_retry": "Không tìm thấy ô nhập xóa, lần thử {attempt}/{max_attempts}", + "delete_input_error": "Lỗi tìm ô nhập Xóa: {error}", + "delete_input_not_found_continuing": "Không tìm thấy ô nhập xác nhận xóa, đang thử tiếp tục" + }, + "github_register": { + "title": "Tự Động Hóa Đăng Ký GitHub + Cursor AI", + "features_header": "Tính Năng", + "feature1": "Tạo email tạm thời sử dụng 1secmail.", + "feature2": "Đăng ký tài khoản GitHub mới với thông tin ngẫu nhiên.", + "feature3": "Tự động xác minh email GitHub.", + "feature4": "Đăng nhập vào Cursor AI sử dụng xác thực GitHub.", + "feature5": "Đặt lại ID máy để bỏ qua phát hiện dùng thử.", + "feature6": "Lưu tất cả thông tin đăng nhập vào tệp.", + "warnings_header": "Cảnh Báo", + "warning1": "Script này tự động hóa việc tạo tài khoản, có thể vi phạm điều khoản dịch vụ của GitHub/Cursor.", + "warning2": "Yêu cầu truy cập internet và quyền quản trị.", + "warning3": "CAPTCHA hoặc xác minh bổ sung có thể làm gián đoạn tự động hóa.", + "warning4": "Sử dụng có trách nhiệm và tự chịu rủi ro.", + "confirm": "Bạn có chắc chắn muốn tiếp tục không?", + "invalid_choice": "Lựa chọn không hợp lệ. Vui lòng nhập 'yes' hoặc 'no'", + "cancelled": "Đã hủy thao tác", + "program_terminated": "Chương trình bị người dùng chấm dứt", + "starting_automation": "Bắt đầu tự động hóa...", + "github_username": "Tên Người Dùng GitHub", + "github_password": "Mật Khẩu GitHub", + "email_address": "Địa Chỉ Email", + "credentials_saved": "Các thông tin đăng nhập này đã được lưu vào github_cursor_accounts.txt", + "completed_successfully": "Đăng ký GitHub + Cursor hoàn tất thành công!", + "registration_encountered_issues": "Đăng ký GitHub + Cursor gặp vấn đề.", + "check_browser_windows_for_manual_intervention_or_try_again_later": "Kiểm tra cửa sổ trình duyệt để can thiệp thủ công hoặc thử lại sau." + }, + "account_info": { + "subscription": "Gói Đăng Ký", + "trial_remaining": "Thời Gian Dùng Thử Pro Còn Lại", + "days": "ngày", + "subscription_not_found": "Không tìm thấy thông tin đăng ký", + "email_not_found": "Không tìm thấy email", + "failed_to_get_account": "Không thể lấy thông tin tài khoản", + "config_not_found": "Không tìm thấy cấu hình.", + "failed_to_get_usage": "Không thể lấy thông tin sử dụng", + "failed_to_get_subscription": "Không thể lấy thông tin đăng ký", + "failed_to_get_email": "Không thể lấy địa chỉ email", + "failed_to_get_token": "Không thể lấy token", + "failed_to_get_account_info": "Không thể lấy thông tin tài khoản", + "title": "Thông Tin Tài Khoản", + "email": "Email", + "token": "Token", + "usage": "Sử Dụng", + "subscription_type": "Loại Đăng Ký", + "remaining_trial": "Thời Gian Dùng Thử Còn Lại", + "days_remaining": "Số Ngày Còn Lại", + "premium": "Premium", + "pro": "Pro", + "pro_trial": "Dùng Thử Pro", + "team": "Team", + "enterprise": "Enterprise", + "free": "Miễn Phí", + "active": "Đang Hoạt Động", + "inactive": "Không Hoạt Động", + "premium_usage": "Sử Dụng Premium", + "basic_usage": "Sử Dụng Cơ Bản", + "usage_not_found": "Không tìm thấy thông tin sử dụng", + "lifetime_access_enabled": "Đã Bật Truy Cập Trọn Đời", + "token_not_found": "Không tìm thấy token" + }, + "config": { + "config_not_available": "Không có sẵn cấu hình", + "configuration": "Cấu Hình", + "enabled": "Đã Bật", + "disabled": "Đã Tắt", + "config_directory": "Thư Mục Cấu Hình", + "neither_cursor_nor_cursor_directory_found": "Không tìm thấy Cursor hoặc thư mục Cursor trong {config_base}", + "please_make_sure_cursor_is_installed_and_has_been_run_at_least_once": "Vui lòng đảm bảo Cursor đã được cài đặt và đã chạy ít nhất một lần", + "storage_directory_not_found": "Không tìm thấy thư mục lưu trữ: {storage_dir}", + "storage_file_found": "Đã tìm thấy tệp lưu trữ: {storage_path}", + "file_size": "Kích thước tệp: {size} bytes", + "file_permissions": "Quyền tệp: {permissions}", + "file_owner": "Chủ sở hữu tệp: {owner}", + "file_group": "Nhóm tệp: {group}", + "error_getting_file_stats": "Lỗi lấy thông tin tệp: {error}", + "permission_denied": "Từ chối quyền: {storage_path}", + "try_running": "Thử chạy: {command}", + "and": "Và", + "storage_file_is_empty": "Tệp lưu trữ trống: {storage_path}", + "the_file_might_be_corrupted_please_reinstall_cursor": "Tệp có thể bị hỏng, vui lòng cài đặt lại Cursor", + "storage_file_not_found": "Không tìm thấy tệp lưu trữ: {storage_path}", + "error_checking_linux_paths": "Lỗi kiểm tra đường dẫn Linux: {error}", + "config_option_added": "Đã thêm tùy chọn cấu hình: {option}", + "config_updated": "Đã cập nhật cấu hình", + "config_created": "Đã tạo cấu hình: {config_file}", + "config_setup_error": "Lỗi thiết lập cấu hình: {error}", + "storage_file_is_valid_and_contains_data": "Tệp lưu trữ hợp lệ và chứa dữ liệu", + "error_reading_storage_file": "Lỗi đọc tệp lưu trữ: {error}", + "also_checked": "Cũng đã kiểm tra {path}", + "backup_created": "Đã tạo bản sao lưu: {path}", + "config_removed": "Đã xóa tệp cấu hình để cập nhật bắt buộc", + "backup_failed": "Sao lưu cấu hình thất bại: {error}", + "force_update_failed": "Cập nhật bắt buộc cấu hình thất bại: {error}", + "config_force_update_disabled": "Đã tắt cập nhật bắt buộc tệp cấu hình, bỏ qua cập nhật bắt buộc", + "config_force_update_enabled": "Đã bật cập nhật bắt buộc tệp cấu hình, thực hiện cập nhật bắt buộc" + }, + "oauth": { + "authentication_button_not_found": "Không tìm thấy nút xác thực", + "authentication_failed": "Xác thực thất bại: {error}", + "found_cookies": "Đã tìm thấy {count} cookie", + "token_extraction_error": "Lỗi trích xuất token: {error}", + "authentication_successful": "Xác thực thành công - Email: {email}", + "missing_authentication_data": "Thiếu dữ liệu xác thực: {data}", + "failed_to_delete_account": "Không thể xóa tài khoản: {error}", + "invalid_authentication_type": "Loại xác thực không hợp lệ", + "auth_update_success": "Cập nhật xác thực thành công", + "browser_closed": "Đã đóng trình duyệt", + "auth_update_failed": "Cập nhật xác thực thất bại", + "google_start": "Bắt đầu Google", + "github_start": "Bắt đầu Github", + "usage_count": "Số lần sử dụng: {usage}", + "account_has_reached_maximum_usage": "Tài khoản đã đạt số lần sử dụng tối đa, {deleting}", + "starting_new_authentication_process": "Bắt đầu quá trình xác thực mới...", + "failed_to_delete_expired_account": "Không thể xóa tài khoản hết hạn", + "could_not_check_usage_count": "Không thể kiểm tra số lần sử dụng: {error}", + "found_email": "Đã tìm thấy email: {email}", + "could_not_find_email": "Không thể tìm thấy email: {error}", + "could_not_find_usage_count": "Không thể tìm thấy số lần sử dụng: {error}", + "already_on_settings_page": "Đã ở trang cài đặt!", + "failed_to_extract_auth_info": "Không thể trích xuất thông tin xác thực: {error}", + "no_chrome_profiles_found": "Không tìm thấy hồ sơ Chrome, sử dụng Mặc định", + "found_default_chrome_profile": "Đã tìm thấy hồ sơ Chrome Mặc định", + "using_first_available_chrome_profile": "Sử dụng hồ sơ Chrome khả dụng đầu tiên: {profile}", + "error_finding_chrome_profile": "Lỗi tìm hồ sơ Chrome, sử dụng Mặc định: {error}", + "initializing_browser_setup": "Đang khởi tạo thiết lập trình duyệt...", + "detected_platform": "Đã phát hiện nền tảng: {platform}", + "running_as_root_warning": "Chạy với quyền root không được khuyến nghị cho tự động hóa trình duyệt", + "consider_running_without_sudo": "Hãy xem xét chạy script mà không cần sudo", + "no_compatible_browser_found": "Không tìm thấy trình duyệt tương thích. Vui lòng cài đặt Google Chrome hoặc Chromium.", + "supported_browsers": "Trình duyệt được hỗ trợ cho {platform}", + "using_browser_profile": "Đang sử dụng hồ sơ trình duyệt: {profile}", + "starting_browser": "Đang khởi động trình duyệt tại: {path}", + "browser_setup_completed": "Thiết lập trình duyệt hoàn tất thành công", + "browser_setup_failed": "Thiết lập trình duyệt thất bại: {error}", + "try_running_without_sudo_admin": "Thử chạy mà không cần quyền sudo/quản trị", + "redirecting_to_authenticator_cursor_sh": "Đang chuyển hướng đến authenticator.cursor.sh...", + "starting_google_authentication": "Bắt đầu xác thực Google...", + "starting_github_authentication": "Bắt đầu xác thực GitHub...", + "waiting_for_authentication": "Đang chờ xác thực...", + "page_changed_checking_auth": "Trang đã thay đổi, đang kiểm tra xác thực...", + "status_check_error": "Lỗi kiểm tra trạng thái: {error}", + "authentication_timeout": "Hết thời gian xác thực", + "account_is_still_valid": "Tài khoản vẫn còn hợp lệ (Sử dụng: {usage})", + "starting_re_authentication_process": "Bắt đầu quá trình xác thực lại...", + "starting_new_google_authentication": "Bắt đầu xác thực Google mới...", + "failed_to_delete_account_or_re_authenticate": "Không thể xóa tài khoản hoặc xác thực lại: {error}", + "navigating_to_authentication_page": "Đang điều hướng đến trang xác thực...", + "please_select_your_google_account_to_continue": "Vui lòng chọn tài khoản Google của bạn để tiếp tục...", + "found_browser_data_directory": "Đã tìm thấy thư mục dữ liệu trình duyệt: {path}", + "authentication_successful_getting_account_info": "Xác thực thành công, đang lấy thông tin tài khoản...", + "warning_could_not_kill_existing_browser_processes": "Cảnh báo: Không thể kết thúc các tiến trình trình duyệt hiện có: {error}", + "browser_failed_to_start": "Trình duyệt không thể khởi động: {error}", + "browser_failed": "Trình duyệt không thể khởi động: {error}", + "browser_failed_to_start_fallback": "Trình duyệt không thể khởi động: {error}" }, "chrome_profile": { "title": "Chọn Hồ Sơ Chrome", - "select_profile": "Chọn hồ sơ Chrome để sử dụng:", - "profile_list": "Các hồ sơ có sẵn:", + "select_profile": "Chọn một hồ sơ Chrome để sử dụng:", + "profile_list": "Hồ sơ khả dụng:", "default_profile": "Hồ Sơ Mặc Định", "profile": "Hồ Sơ {number}", "no_profiles": "Không tìm thấy hồ sơ Chrome", - "error_loading": "Lỗi khi tải hồ sơ Chrome: {error}", + "error_loading": "Lỗi tải hồ sơ Chrome: {error}", "profile_selected": "Đã chọn hồ sơ: {profile}", "invalid_selection": "Lựa chọn không hợp lệ. Vui lòng thử lại", "warning_chrome_close": "Cảnh báo: Điều này sẽ đóng tất cả các tiến trình Chrome đang chạy" + }, + "account_delete": { + "title": "Công Cụ Xóa Tài Khoản Google Cursor", + "warning": "CẢNH BÁO: Điều này sẽ xóa vĩnh viễn tài khoản Cursor của bạn. Hành động này không thể hoàn tác.", + "cancelled": "Đã hủy xóa tài khoản.", + "starting_process": "Bắt đầu quá trình xóa tài khoản...", + "google_button_not_found": "Không tìm thấy nút đăng nhập Google", + "logging_in": "Đang đăng nhập bằng Google...", + "waiting_for_auth": "Đang chờ xác thực Google...", + "login_successful": "Đăng nhập thành công", + "unexpected_page": "Trang không mong đợi sau khi đăng nhập: {url}", + "trying_settings": "Đang thử điều hướng đến trang cài đặt...", + "select_google_account": "Vui lòng chọn tài khoản Google của bạn...", + "auth_timeout": "Hết thời gian xác thực, vẫn tiếp tục...", + "navigating_to_settings": "Đang điều hướng đến trang cài đặt...", + "already_on_settings": "Đã ở trang cài đặt", + "login_redirect_failed": "Chuyển hướng đăng nhập thất bại, đang thử điều hướng trực tiếp...", + "advanced_tab_not_found": "Không tìm thấy tab Nâng cao sau nhiều lần thử", + "advanced_tab_retry": "Không tìm thấy tab Nâng cao, lần thử {attempt}/{max_attempts}", + "advanced_tab_error": "Lỗi tìm tab Nâng cao: {error}", + "advanced_tab_clicked": "Đã nhấp vào tab Nâng cao", + "direct_advanced_navigation": "Đang thử điều hướng trực tiếp đến tab nâng cao", + "delete_button_not_found": "Không tìm thấy nút Xóa Tài khoản sau nhiều lần thử", + "delete_button_retry": "Không tìm thấy nút Xóa, lần thử {attempt}/{max_attempts}", + "delete_button_error": "Lỗi tìm nút Xóa: {error}", + "delete_button_clicked": "Đã nhấp vào nút Xóa Tài khoản", + "found_danger_zone": "Đã tìm thấy phần Vùng Nguy hiểm", + "delete_input_not_found": "Không tìm thấy ô nhập xác nhận xóa sau nhiều lần thử", + "delete_input_retry": "Không tìm thấy ô nhập xóa, lần thử {attempt}/{max_attempts}", + "delete_input_error": "Lỗi tìm ô nhập Xóa: {error}", + "delete_input_not_found_continuing": "Không tìm thấy ô nhập xác nhận xóa, đang thử tiếp tục", + "typed_delete": "Đã nhập \"Delete\" vào ô xác nhận", + "confirm_button_not_found": "Không tìm thấy nút Xác nhận sau nhiều lần thử", + "confirm_button_retry": "Không tìm thấy nút Xác nhận, lần thử {attempt}/{max_attempts}", + "confirm_button_error": "Lỗi tìm nút Xác nhận: {error}", + "account_deleted": "Đã xóa tài khoản thành công!", + "error": "Lỗi trong quá trình xóa tài khoản: {error}", + "success": "Tài khoản Cursor của bạn đã được xóa thành công!", + "failed": "Quá trình xóa tài khoản thất bại hoặc đã bị hủy.", + "interrupted": "Quá trình xóa tài khoản bị người dùng ngắt.", + "unexpected_error": "Lỗi không mong đợi: {error}", + "found_email": "Đã tìm thấy email: {email}", + "email_not_found": "Không tìm thấy email: {error}", + "confirm_prompt": "Bạn có chắc chắn muốn tiếp tục không? (y/N): " + }, + "bypass": { + "starting": "Bắt đầu bỏ qua phiên bản Cursor...", + "found_product_json": "Đã tìm thấy product.json: {path}", + "no_write_permission": "Không có quyền ghi cho tệp: {path}", + "read_failed": "Không thể đọc product.json: {error}", + "current_version": "Phiên bản hiện tại: {version}", + "backup_created": "Đã tạo bản sao lưu: {path}", + "version_updated": "Đã cập nhật phiên bản từ {old} lên {new}", + "write_failed": "Không thể ghi product.json: {error}", + "no_update_needed": "Không cần cập nhật. Phiên bản hiện tại {version} đã >= 0.46.0", + "bypass_failed": "Bỏ qua phiên bản thất bại: {error}", + "stack_trace": "Dấu vết ngăn xếp", + "localappdata_not_found": "Không tìm thấy biến môi trường LOCALAPPDATA", + "product_json_not_found": "Không tìm thấy product.json trong các đường dẫn Linux thông thường", + "unsupported_os": "Hệ điều hành không được hỗ trợ: {system}", + "file_not_found": "Không tìm thấy tệp: {path}", + "title": "Công Cụ Bỏ Qua Phiên Bản Cursor", + "description": "Công cụ này sửa đổi product.json của Cursor để bỏ qua hạn chế phiên bản", + "menu_option": "Bỏ Qua Kiểm Tra Phiên Bản Cursor" + }, + "auth_check": { + "checking_authorization": "Đang kiểm tra quyền...", + "token_source": "Lấy token từ cơ sở dữ liệu hay nhập thủ công? (d/m, mặc định: d)", + "getting_token_from_db": "Đang lấy token từ cơ sở dữ liệu...", + "token_found_in_db": "Đã tìm thấy token trong cơ sở dữ liệu", + "token_not_found_in_db": "Không tìm thấy token trong cơ sở dữ liệu", + "cursor_acc_info_not_found": "Không tìm thấy cursor_acc_info.py", + "error_getting_token_from_db": "Lỗi lấy token từ cơ sở dữ liệu: {error}", + "enter_token": "Nhập token Cursor của bạn: ", + "token_length": "Độ dài token: {length} ký tự", + "usage_response_status": "Trạng thái phản hồi sử dụng: {response}", + "unexpected_status_code": "Mã trạng thái không mong đợi: {code}", + "jwt_token_warning": "Token có vẻ ở định dạng JWT, nhưng kiểm tra API trả về mã trạng thái không mong đợi. Token có thể hợp lệ nhưng truy cập API bị hạn chế.", + "invalid_token": "Token không hợp lệ", + "user_authorized": "Người dùng được ủy quyền", + "user_unauthorized": "Người dùng không được ủy quyền", + "request_timeout": "Yêu cầu hết thời gian", + "connection_error": "Lỗi kết nối", + "check_error": "Lỗi kiểm tra quyền: {error}", + "authorization_successful": "Ủy quyền thành công!", + "authorization_failed": "Ủy quyền thất bại!", + "operation_cancelled": "Thao tác bị người dùng hủy", + "unexpected_error": "Lỗi không mong đợi: {error}", + "error_generating_checksum": "Lỗi tạo checksum: {error}", + "checking_usage_information": "Đang kiểm tra thông tin sử dụng...", + "check_usage_response": "Phản hồi kiểm tra sử dụng: {response}", + "usage_response": "Phản hồi sử dụng: {response}" } } \ No newline at end of file diff --git a/locales/zh_cn.json b/locales/zh_cn.json index 7c934e1..07d15d5 100644 --- a/locales/zh_cn.json +++ b/locales/zh_cn.json @@ -205,7 +205,9 @@ "try_install_browser": "尝试使用包管理器安装浏览器", "tracking_processes": "正在跟踪 {count} 个 {browser} 进程", "no_new_processes_detected": "未检测到新的 {browser} 进程", - "could_not_track_processes": "无法跟踪 {browser} 进程: {error}" + "could_not_track_processes": "无法跟踪 {browser} 进程: {error}", + "human_verify_error": "无法验证用户是人类,正在重试...", + "max_retries_reached": "已达到最大重试次数,注册失败。" }, "auth": { "title": "Cursor 认证管理器", @@ -743,4 +745,4 @@ "unexpected_error": "令牌刷新过程中出现意外错误: {error}", "extraction_error": "提取令牌时出错: {error}" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/locales/zh_tw.json b/locales/zh_tw.json index 2a25c3e..9b9573a 100644 --- a/locales/zh_tw.json +++ b/locales/zh_tw.json @@ -149,6 +149,22 @@ "no_turnstile": "未檢測到 Turnstile 驗證", "turnstile_passed": "驗證通過", "verification_start": "開始獲取驗證碼", + "verification_timeout": "獲取驗證碼超時", + "verification_not_found": "未找到驗證碼", + "try_get_code": "第 {attempt} 次嘗試獲取驗證碼 | 剩餘時間: {time}秒", + "get_account": "獲取帳戶信息", + "get_token": "獲取 Cursor Session Token", + "token_success": "Token 獲取成功", + "token_attempt": "第 {attempt} 次嘗試未獲取到 Token,{time}秒後重試", + "token_max_attempts": "已達到最大嘗試次數({max}),獲取 Token 失敗", + "token_failed": "獲取 Token 失敗: {error}", + "account_error": "獲取帳戶信息失敗: {error}", + "email_error": "獲取郵箱地址失敗", + "setup_error": "郵箱設置出錯: {error}", + "start_getting_verification_code": "開始獲取驗證碼,將在60秒內嘗試...", + "get_verification_code_timeout": "獲取驗證碼超時", + "get_verification_code_success": "成功獲取驗證碼", + "try_get_verification_code": "第 {attempt} 次嘗試未獲取到驗證碼,剩餘時間: {remaining_time}秒", "verification_code_filled": "驗證碼填寫完成", "login_success_and_jump_to_settings_page": "成功登錄並跳轉到設置頁面", "detect_login_page": "檢測到登錄頁面,開始登錄...", @@ -694,4 +710,4 @@ "description": "此工具修改 workbench.desktop.main.js 文件以繞過 token 限制", "press_enter": "按回車鍵繼續..." } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main.py b/main.py index 8bca290..80281cf 100644 --- a/main.py +++ b/main.py @@ -79,9 +79,18 @@ def run_as_admin(): class Translator: def __init__(self): self.translations = {} - self.current_language = self.detect_system_language() # Use correct method name self.fallback_language = 'en' # Fallback language if translation is missing + self.current_language = self.detect_system_language() # Use correct method name self.load_translations() + self.default_layout_id_to_lang_code_mapping = { + 0x0409: 'en', # English + 0x0404: 'zh_tw', # Traditional Chinese + 0x0804: 'zh_cn', # Simplified Chinese + 0x0422: 'vi', # Vietnamese + 0x0419: 'ru', # Russian + 0x0415: 'tr', # Turkish + 0x0402: 'bg' # Bulgarian + } # Using in Windows def detect_system_language(self): """Detect system language and return corresponding language code""" @@ -95,95 +104,59 @@ class Translator: except Exception as e: print(f"{Fore.YELLOW}{EMOJI['INFO']} Failed to detect system language: {e}{Style.RESET_ALL}") - return 'en' + return self.fallback_language def _detect_windows_language(self): """Detect language on Windows systems""" + final_lang_code = self.fallback_language # Default to English if can not detect Windows system language try: - # Ensure we are on Windows if platform.system() != 'Windows': - return 'en' + return final_lang_code - # Get keyboard layout + # Get current layout using Windows API user32 = ctypes.windll.user32 hwnd = user32.GetForegroundWindow() threadid = user32.GetWindowThreadProcessId(hwnd, 0) - layout_id = user32.GetKeyboardLayout(threadid) & 0xFFFF + current_layout_id = user32.GetKeyboardLayout(threadid) & 0xFFFF - # Map language ID to our language codes - language_map = { - 0x0409: 'en', # English - 0x0404: 'zh_tw', # Traditional Chinese - 0x0804: 'zh_cn', # Simplified Chinese - 0x0422: 'vi', # Vietnamese - 0x0419: 'ru', # Russian - 0x0415: 'tr', # Turkish - 0x0402: 'bg', # Bulgarian - } - - return language_map.get(layout_id, 'en') + # Convert layout ID to language code using Windows LOCALE_SISO639LANGNAME + buf_size = 9 # Max size for ISO language code + lang_code = ctypes.create_unicode_buffer(buf_size) + if ctypes.windll.kernel32.LCIDToLocaleName(current_layout_id, lang_code, buf_size, 0) > 0: + final_lang_code = lang_code.value.lower() + else: + # Using default layout mapping if can not get form Windows API + final_lang_code = self.default_layout_id_to_lang_code_mapping.get(current_layout_id, 'en') + + if final_lang_code == 'zh': + final_lang_code = 'zh_cn' # Default to Simplified Chinese + if final_lang_code == 'zh_hk': + final_lang_code = 'zh_tw' # Hongkong + return final_lang_code # Fallback except: return self._detect_unix_language() - + def _detect_unix_language(self): """Detect language on Unix-like systems (Linux, macOS)""" + final_lang_code = self.fallback_language # Default to English if can not detect Windows system language try: - # Get the system locale - system_locale = locale.getdefaultlocale()[0] - if not system_locale: - return 'en' - - system_locale = system_locale.lower() - - # Map locale to our language codes - if system_locale.startswith('zh_tw') or system_locale.startswith('zh_hk'): - return 'zh_tw' - elif system_locale.startswith('zh_cn'): - return 'zh_cn' - elif system_locale.startswith('en'): - return 'en' - elif system_locale.startswith('vi'): - return 'vi' - elif system_locale.startswith('nl'): - return 'nl' - elif system_locale.startswith('de'): - return 'de' - elif system_locale.startswith('fr'): - return 'fr' - elif system_locale.startswith('pt'): - return 'pt' - elif system_locale.startswith('ru'): - return 'ru' - elif system_locale.startswith('tr'): - return 'tr' - elif system_locale.startswith('bg'): - return 'bg' - # Try to get language from LANG environment variable as fallback - env_lang = os.getenv('LANG', '').lower() - if 'tw' in env_lang or 'hk' in env_lang: - return 'zh_tw' - elif 'cn' in env_lang: - return 'zh_cn' - elif 'vi' in env_lang: - return 'vi' - elif 'nl' in env_lang: - return 'nl' - elif 'de' in env_lang: - return 'de' - elif 'fr' in env_lang: - return 'fr' - elif 'pt' in env_lang: - return 'pt' - elif 'ru' in env_lang: - return 'ru' - elif 'tr' in env_lang: - return 'tr' - elif 'bg' in env_lang: - return 'bg' + # Get the system locale, it is lang_code.charset_encoding such as: en_US.UTF-8 + locale.setlocale(locale.LC_ALL, '') + system_locale = locale.getlocale()[0].lower() or os.getenv('LANG').lower() # Use $LANG variable as a fall back - return 'en' + if not system_locale: + return final_lang_code # Fallback to English if can not detect Unix system language + + # We do not need the charset encoding, so: + final_lang_code = system_locale.split('.')[0] # Extract lang_code from locale if can detect Unix system language + + if final_lang_code == 'zh': + final_lang_code = 'zh_cn' # Default to Simplified Chinese + if final_lang_code == 'zh_hk': + final_lang_code = 'zh_tw' # Hongkong + return final_lang_code # Fallback except: - return 'en' + return final_lang_code # Fallback def load_translations(self): """Load all available translations"""