Compare commits

...

8 Commits

13 changed files with 1391 additions and 245 deletions

4
.env
View File

@@ -1,2 +1,2 @@
version=1.7.10
VERSION=1.7.10
version=1.7.12
VERSION=1.7.12

View File

@@ -1,6 +1,22 @@
# Change Log
## v1.7.10 ( Pre - Release 版本 )
## v1.7.12
1. Add: Changelog Show in Menu | 增加更新日志在菜單中
2. Remake Create Mail Logic | 重做創建郵箱邏輯
3. Fix: Some Issues | 修復一些問題
## v1.7.11 ( Skip & Merge to v1.7.12 )
1. Add: Multi-language Support | 增加多語言支持
2. Add: German Language | 增加德語
3. Add: Dutch Language | 增加荷蘭語
4. Add: French Language | 增加法語
5. Add: Auto Detect Max Use Count | 增加自動檢測最大使用次數
6. Add: Detect & Auto Delete Account | 增加檢測 & 自動刪除賬號
7. Add: Optimize Some Logic | 優化一些邏輯
8. Add: Local Blocked Domains | 增加本地被屏蔽域名
9. Fix : Get Verification Code for None | 修復獲取驗證碼為 None
## v1.7.10
1. Add: Totally Reset Cursor | 增加完全重置 Cursor
2. Add: Multi-language Support for Totally Reset | 增加完全重置多語言支持

View File

@@ -3,3 +3,7 @@ famamail.com
2925.com
indigobook.com
teihu.com
raleigh-construction.com
pastryofistanbul.com
linshiyouxiang.net
Mohmal.com

View File

@@ -33,7 +33,8 @@ a = Analysis(
('new_tempemail.py', '.'),
('quit_cursor.py', '.'),
('cursor_register_manual.py', '.'),
('.env', '.')
('.env', '.'),
('block_domain.txt', '.')
],
hiddenimports=[
'cursor_auth',

372
locales/de.json Normal file
View File

@@ -0,0 +1,372 @@
{
"menu": {
"title": "Verfügbare Optionen",
"exit": "Programm Beenden",
"reset": "Maschinen-ID Zurücksetzen",
"register": "Neues Cursor-Konto Registrieren",
"register_google": "Mit Google-Konto Registrieren",
"register_github": "Mit GitHub-Konto Registrieren",
"register_manual": "Cursor mit Benutzerdefinierter E-Mail Registrieren",
"quit": "Cursor-Anwendung Schließen",
"select_language": "Sprache Ändern",
"input_choice": "Bitte Auswahl eingeben ({choices})",
"invalid_choice": "Ungültige Auswahl. Bitte eine Nummer von {choices} eingeben",
"program_terminated": "Programm wurde vom Benutzer beendet",
"error_occurred": "Ein Fehler ist aufgetreten: {error}. Bitte erneut versuchen",
"press_enter": "Drücken Sie Enter zum Beenden",
"disable_auto_update": "Cursor Auto-Update Deaktivieren",
"lifetime_access_enabled": "LEBENSLANGER ZUGRIFF AKTIVIERT",
"totally_reset": "Cursor Vollständig Zurücksetzen"
},
"languages": {
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Tiếng Việt",
"nl": "Nederlands",
"de": "Deutsch",
"fr": "Français"
},
"quit_cursor": {
"start": "Beginne Cursor zu Beenden",
"no_process": "Kein Laufender Cursor-Prozess",
"terminating": "Beende Prozess {pid}",
"waiting": "Warte auf Prozessende",
"success": "Alle Cursor-Prozesse Beendet",
"timeout": "Prozess-Timeout: {pids}",
"error": "Fehler Aufgetreten: {error}"
},
"reset": {
"title": "Cursor Maschinen-ID Zurücksetzen Tool",
"checking": "Konfigurationsdatei Überprüfen",
"not_found": "Konfigurationsdatei Nicht Gefunden",
"no_permission": "Kann Konfigurationsdatei Nicht Lesen oder Schreiben, Bitte Dateiberechtigungen Überprüfen",
"reading": "Aktuelle Konfiguration Lesen",
"creating_backup": "Konfigurations-Backup Erstellen",
"backup_exists": "Backup-Datei Existiert Bereits, Backup-Schritt Überspringen",
"generating": "Neue Maschinen-ID Generieren",
"saving_json": "Neue Konfiguration in JSON Speichern",
"success": "Maschinen-ID Erfolgreich Zurückgesetzt",
"new_id": "Neue Maschinen-ID",
"permission_error": "Berechtigungsfehler: {error}",
"run_as_admin": "Bitte Versuchen Sie, Dieses Programm als Administrator Auszuführen",
"process_error": "Zurücksetzungsprozessfehler: {error}",
"updating_sqlite": "SQLite-Datenbank Aktualisieren",
"updating_pair": "Schlüssel-Wert-Paar Aktualisieren",
"sqlite_success": "SQLite-Datenbank Erfolgreich Aktualisiert",
"sqlite_error": "SQLite-Datenbank Aktualisierung Fehlgeschlagen: {error}",
"press_enter": "Drücken Sie Enter zum Fortfahren",
"unsupported_os": "Nicht Unterstütztes Betriebssystem: {os}",
"linux_path_not_found": "Linux-Pfad Nicht Gefunden",
"updating_system_ids": "System-IDs Aktualisieren",
"system_ids_updated": "System-IDs Erfolgreich Aktualisiert",
"system_ids_update_failed": "System-IDs Aktualisierung Fehlgeschlagen: {error}",
"windows_guid_updated": "Windows GUID Erfolgreich Aktualisiert",
"windows_permission_denied": "Windows Berechtigung Verweigert",
"windows_guid_update_failed": "Windows GUID Aktualisierung Fehlgeschlagen",
"macos_uuid_updated": "macOS UUID Erfolgreich Aktualisiert",
"plutil_command_failed": "plutil-Befehl Fehlgeschlagen",
"start_patching": "Patching getMachineId Starten",
"macos_uuid_update_failed": "macOS UUID Aktualisierung Fehlgeschlagen",
"current_version": "Aktuelle Cursor-Version: {version}",
"patch_completed": "Patching getMachineId Abgeschlossen",
"patch_failed": "Patching getMachineId Fehlgeschlagen: {error}",
"version_check_passed": "Cursor-Version Überprüfung Erfolgreich",
"file_modified": "Datei Geändert",
"version_less_than_0_45": "Cursor-Version < 0.45.0, Patching getMachineId Überspringen",
"detecting_version": "Cursor-Version Erkennen",
"patching_getmachineid": "Patching getMachineId",
"version_greater_than_0_45": "Cursor-Version >= 0.45.0, Patching getMachineId",
"permission_denied": "Berechtigung Verweigert: {error}",
"backup_created": "Backup Erstellt",
"update_success": "Update Erfolgreich",
"update_failed": "Update Fehlgeschlagen: {error}",
"windows_machine_guid_updated": "Windows Maschinen-GUID Erfolgreich Aktualisiert",
"reading_package_json": "package.json Lesen {path}",
"invalid_json_object": "Ungültiges JSON-Objekt",
"no_version_field": "Kein Versionsfeld in package.json Gefunden",
"version_field_empty": "Versionsfeld ist Leer",
"invalid_version_format": "Ungültiges Versionsformat: {version}",
"found_version": "Gefundene Version: {version}",
"version_parse_error": "Versions-Parse-Fehler: {error}",
"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"
},
"register": {
"title": "Cursor Registrierungstool",
"start": "Registrierungsprozess Starten...",
"handling_turnstile": "Sicherheitsüberprüfung Verarbeiten...",
"retry_verification": "Überprüfung Erneut Versuchen...",
"detect_turnstile": "Sicherheitsüberprüfung Überprüfen...",
"verification_success": "Sicherheitsüberprüfung Erfolgreich",
"starting_browser": "Browser Öffnen...",
"form_success": "Formular Erfolgreich Eingereicht",
"browser_started": "Browser Erfolgreich Geöffnet",
"waiting_for_second_verification": "Warten auf E-Mail-Verifizierung...",
"waiting_for_verification_code": "Warten auf Verifizierungscode...",
"password_success": "Passwort Erfolgreich Eingestellt",
"password_error": "Konnte Passwort Nicht Einstellen: {error}. Bitte Erneut Versuchen",
"waiting_for_page_load": "Seite Laden...",
"first_verification_passed": "Erste Überprüfung Erfolgreich",
"mailbox": "E-Mail-Postfach Erfolgreich Geöffnet",
"register_start": "Registrierung Starten",
"form_submitted": "Formular Eingereicht, Überprüfung Starten...",
"filling_form": "Formular Ausfüllen",
"visiting_url": "URL Besuchen",
"basic_info": "Grundlegende Informationen Eingereicht",
"handle_turnstile": "Turnstile Verarbeiten",
"no_turnstile": "Kein Turnstile Erkannt",
"turnstile_passed": "Turnstile Erfolgreich",
"verification_start": "Verifizierungscode Erhalten Starten",
"verification_timeout": "Verifizierungscode Timeout",
"verification_not_found": "Kein Verifizierungscode Gefunden",
"try_get_code": "Versuchen | {attempt} Verifizierungscode Erhalten | Verbleibende Zeit: {time}s",
"get_account": "Kontoinformationen Erhalten",
"get_token": "Cursor-Sitzungstoken Erhalten",
"token_success": "Token Erfolgreich Erhalten",
"token_attempt": "Versuchen | {attempt} Mal Token zu Erhalten | Erneut Versuchen in {time}s",
"token_max_attempts": "Maximale Versuche Erreicht ({max}) | Token Erhalten Fehlgeschlagen",
"token_failed": "Token Erhalten Fehlgeschlagen: {error}",
"account_error": "Kontoinformationen Erhalten Fehlgeschlagen: {error}",
"press_enter": "Drücken Sie Enter zum Fortfahren",
"browser_start": "Browser Starten",
"open_mailbox": "Mailbox-Seite Öffnen",
"email_error": "E-Mail-Adresse Erhalten Fehlgeschlagen",
"setup_error": "E-Mail-Einrichtungsfehler: {error}",
"start_getting_verification_code": "Verifizierungscode Erhalten Starten, Erneut Versuchen in 60s",
"get_verification_code_timeout": "Verifizierungscode Erhalten Timeout",
"get_verification_code_success": "Verifizierungscode Erfolgreich Erhalten",
"try_get_verification_code": "Versuchen | {attempt} Verifizierungscode Erhalten | Verbleibende Zeit: {remaining_time}s",
"verification_code_filled": "Verifizierungscode Ausgefüllt",
"login_success_and_jump_to_settings_page": "Anmeldung Erfolgreich und zu Einstellungsseite Springen",
"detect_login_page": "Anmeldeseite Erkennen, Anmeldung Starten...",
"cursor_registration_completed": "Cursor-Registrierung Abgeschlossen!",
"set_password": "Passwort Einstellen",
"basic_info_submitted": "Grundlegende Informationen Eingereicht",
"cursor_auth_info_updated": "Cursor-Authentifizierungsinformationen Aktualisiert",
"cursor_auth_info_update_failed": "Cursor-Authentifizierungsinformationen Aktualisierung Fehlgeschlagen",
"reset_machine_id": "Maschinen-ID Zurücksetzen",
"account_info_saved": "Kontoinformationen Gespeichert",
"save_account_info_failed": "Kontoinformationen Speichern Fehlgeschlagen",
"get_email_address": "E-Mail-Adresse Erhalten",
"update_cursor_auth_info": "Cursor-Authentifizierungsinformationen Aktualisieren",
"register_process_error": "Registrierungsprozessfehler: {error}",
"setting_password": "Passwort Einstellen",
"manual_code_input": "Manuelle Code-Eingabe",
"manual_email_input": "Manuelle E-Mail-Eingabe",
"password": "Passwort",
"first_name": "Vorname",
"last_name": "Nachname",
"exit_signal": "Exit-Signal",
"email_address": "E-Mail-Adresse",
"config_created": "Konfiguration Erstellt",
"verification_failed": "Verifizierung Fehlgeschlagen",
"verification_error": "Verifizierungsfehler: {error}",
"config_option_added": "Konfigurationsoption Hinzugefügt: {option}",
"config_updated": "Konfiguration Aktualisiert",
"password_submitted": "Passwort Eingereicht",
"total_usage": "Gesamtnutzung: {usage}",
"setting_on_password": "Passwort Einstellen",
"getting_code": "Verifizierungscode Erhalten, Erneut Versuchen in 60s"
},
"auth": {
"title": "Cursor Authentifizierungsmanager",
"checking_auth": "Authentifizierungsdatei Überprüfen",
"auth_not_found": "Authentifizierungsdatei Nicht Gefunden",
"auth_file_error": "Authentifizierungsdateifehler: {error}",
"reading_auth": "Authentifizierungsdatei Lesen",
"updating_auth": "Authentifizierungsinformationen Aktualisieren",
"auth_updated": "Authentifizierungsinformationen Erfolgreich Aktualisiert",
"auth_update_failed": "Authentifizierungsinformationen Aktualisierung Fehlgeschlagen: {error}",
"auth_file_created": "Authentifizierungsdatei Erstellt",
"auth_file_create_failed": "Authentifizierungsdatei Erstellen Fehlgeschlagen: {error}",
"press_enter": "Drücken Sie Enter zum Fortfahren",
"reset_machine_id": "Maschinen-ID Zurücksetzen",
"database_connection_closed": "Datenbankverbindung Geschlossen",
"database_updated_successfully": "Datenbank Erfolgreich Aktualisiert",
"connected_to_database": "Mit Datenbank Verbunden",
"updating_pair": "Schlüssel-Wert-Paar Aktualisieren",
"db_not_found": "Datenbankdatei Nicht Gefunden bei: {path}",
"db_permission_error": "Kann Nicht auf Datenbankdatei Zugreifen. Bitte Berechtigungen Überprüfen",
"db_connection_error": "Verbindung zur Datenbank Fehlgeschlagen: {error}"
},
"control": {
"generate_email": "Neue E-Mail Generieren",
"blocked_domain": "Gesperrte Domain",
"select_domain": "Zufällige Domain Auswählen",
"copy_email": "E-Mail-Adresse Kopieren",
"enter_mailbox": "Mailbox Betreten",
"refresh_mailbox": "Mailbox Aktualisieren",
"check_verification": "Verifizierungscode Überprüfen",
"verification_found": "Verifizierungscode Gefunden",
"verification_not_found": "Kein Verifizierungscode Gefunden",
"browser_error": "Browsersteuerungsfehler: {error}",
"navigation_error": "Navigationsfehler: {error}",
"email_copy_error": "E-Mail-Kopierfehler: {error}",
"mailbox_error": "Mailbox-Fehler: {error}",
"token_saved_to_file": "Token Gespeichert in cursor_tokens.txt",
"navigate_to": "Navigieren zu {url}",
"generate_email_success": "E-Mail Erfolgreich Generiert",
"select_email_domain": "E-Mail-Domain Auswählen",
"select_email_domain_success": "E-Mail-Domain Erfolgreich Ausgewählt",
"get_email_name": "E-Mail-Name Erhalten",
"get_email_name_success": "E-Mail-Name Erfolgreich Erhalten",
"get_email_address": "E-Mail-Adresse Erhalten",
"get_email_address_success": "E-Mail-Adresse Erfolgreich Erhalten",
"enter_mailbox_success": "Mailbox Erfolgreich Betreten",
"found_verification_code": "Verifizierungscode Gefunden",
"get_cursor_session_token": "Cursor-Sitzungstoken Erhalten",
"get_cursor_session_token_success": "Cursor-Sitzungstoken Erfolgreich Erhalten",
"get_cursor_session_token_failed": "Cursor-Sitzungstoken Erhalten Fehlgeschlagen",
"save_token_failed": "Token Speichern Fehlgeschlagen",
"database_updated_successfully": "Datenbank Erfolgreich Aktualisiert",
"database_connection_closed": "Datenbankverbindung Geschlossen",
"no_valid_verification_code": "Kein Gültiger Verifizierungscode"
},
"email": {
"starting_browser": "Browser Starten",
"visiting_site": "Besuche mail domains",
"create_success": "E-Mail Erfolgreich Erstellt",
"create_failed": "E-Mail Erstellen Fehlgeschlagen",
"create_error": "E-Mail-Erstellungsfehler: {error}",
"refreshing": "E-Mail Aktualisieren",
"refresh_success": "E-Mail Erfolgreich Aktualisiert",
"refresh_error": "E-Mail-Aktualisierungsfehler: {error}",
"refresh_button_not_found": "Aktualisierungsknopf Nicht Gefunden",
"verification_found": "Verifizierung Gefunden",
"verification_not_found": "Verifizierung Nicht Gefunden",
"verification_error": "Verifizierungsfehler: {error}",
"verification_code_found": "Verifizierungscode Gefunden",
"verification_code_not_found": "Verifizierungscode Nicht Gefunden",
"verification_code_error": "Verifizierungscodefehler: {error}",
"address": "E-Mail-Adresse",
"all_domains_blocked": "Alle Domains Gesperrt, Service Wechseln",
"no_available_domains_after_filtering": "Keine Verfügbaren Domains Nach Filterung",
"switching_service": "Wechseln zu {service} Service",
"domains_list_error": "Domains-Liste Erhalten Fehlgeschlagen: {error}",
"failed_to_get_available_domains": "Verfügbare Domains Erhalten Fehlgeschlagen",
"domains_excluded": "Ausgeschlossene Domains: {domains}",
"failed_to_create_account": "Konto Erstellen Fehlgeschlagen",
"account_creation_error": "Konto-Erstellungsfehler: {error}",
"domain_blocked": "Domain Blocked: {domain}"
},
"update": {
"title": "Cursor Auto-Update Deaktivieren",
"disable_success": "Auto-Update Deaktiviert Erfolgreich",
"disable_failed": "Auto-Update Deaktivieren Fehlgeschlagen: {error}",
"press_enter": "Drücken Sie Enter zum Fortfahren",
"start_disable": "Auto-Update Deaktivieren Starten",
"killing_processes": "Prozesse Töten",
"processes_killed": "Prozesse Getötet",
"removing_directory": "Verzeichnis Entfernen",
"directory_removed": "Verzeichnis Entfernt",
"creating_block_file": "Block-Datei Erstellen",
"block_file_created": "Block-Datei Erstellt"
},
"updater": {
"checking": "Updates prüfen...",
"new_version_available": "Neue Version verfügbar! (Aktuell: {current}, Neueste: {latest})",
"updating": "Zur neuesten Version aktualisieren. Das Programm wird automatisch neu starten.",
"up_to_date": "Sie verwenden die neueste Version.",
"check_failed": "Überprüfung auf Updates fehlgeschlagen: {error}",
"continue_anyway": "Mit der aktuellen Version fortfahren...",
"update_confirm": "Möchten Sie die neueste Version aktualisieren? (Y/n)",
"update_skipped": "Update überspringen.",
"invalid_choice": "Ungültige Auswahl. Bitte geben Sie 'Y' oder 'n' ein.",
"development_version": "Entwickler-Version {current} > {latest}",
"changelog_title": "Changelog"
},
"totally_reset": {
"title": "Cursor Vollständig Zurücksetzen",
"checking_config": "Konfigurationsdatei Überprüfen",
"config_not_found": "Konfigurationsdatei Nicht Gefunden",
"no_permission": "Kann Konfigurationsdatei Nicht Lesen oder Schreiben, Bitte Berechtigungen Überprüfen",
"reading_config": "Aktuelle Konfiguration Lesen",
"creating_backup": "Konfigurationsdatei Sichern",
"backup_exists": "Backup-Datei bereits vorhanden, Sicherungsschritt überspringen",
"generating_new_machine_id": "Neue Maschinen-ID Generieren",
"saving_new_config": "Neue Konfiguration in JSON Speichern",
"success": "Cursor Erfolgreich Zurückgesetzt",
"error": "Cursor Zurücksetzen Fehlgeschlagen: {error}",
"press_enter": "Drücken Sie Enter zum Beenden",
"reset_machine_id": "Maschinen-ID Zurücksetzen",
"database_connection_closed": "Datenbankverbindung Geschlossen",
"database_updated_successfully": "Datenbank Erfolgreich Aktualisiert",
"connected_to_database": "Mit Datenbank Verbunden",
"updating_pair": "Schlüssel-Wert-Paar Aktualisieren",
"db_not_found": "Datenbankdatei Nicht Gefunden bei: {path}",
"db_permission_error": "Kann Nicht auf Datenbankdatei Zugreifen. Bitte Berechtigungen Überprüfen",
"db_connection_error": "Verbindung zur Datenbank Fehlgeschlagen: {error}",
"feature_title": "FEATURES",
"feature_1": "Vollständige Entfernung von Cursor AI Einstellungen und Konfigurationen",
"feature_2": "Entfernt alle zwischengespeicherten Daten, einschließlich AI-Verlauf und Prompts",
"feature_3": "Maschinen-ID Zurücksetzen, um Trial-Erkennung zu umgehen",
"feature_4": "Erstellt neue zufällige Maschinen-IDs",
"feature_5": "Entfernt benutzerdefinierte Erweiterungen und Einstellungen",
"feature_6": "Zurücksetzt Trial-Informationen und Aktivierungsdaten",
"feature_7": "Tiefes Scannen für versteckte Lizenz- und Trial-bezogene Dateien",
"feature_8": "Sichert nicht-Cursor-Dateien und Anwendungen",
"feature_9": "Kompatibel mit Windows, macOS und Linux",
"disclaimer_title": "Disclaimer",
"disclaimer_1": "Dieses Tool wird alle Cursor AI Einstellungen,",
"disclaimer_2": "Konfigurationen und zwischengespeicherte Daten löschen. Diese Aktion kann nicht rückgängig gemacht werden.",
"disclaimer_3": "Ihre Code-Dateien werden NICHT beeinflusst, und das Tool ist so konzipiert,",
"disclaimer_4": "nur Cursor AI Editor-Dateien und Trial-Erkennungsmechanismen zu zielen.",
"disclaimer_5": "Andere Anwendungen auf Ihrem System werden NICHT beeinflusst.",
"disclaimer_6": "Sie müssen Cursor AI erneut einrichten, nachdem Sie dieses Tool ausgeführt haben.",
"disclaimer_7": "Verwenden Sie auf eigene Gefahr",
"confirm_title": "Sind Sie sicher, dass Sie fortfahren möchten?",
"confirm_1": "Diese Aktion wird alle Cursor AI Einstellungen,",
"confirm_2": "Konfigurationen und zwischengespeicherte Daten löschen. Diese Aktion kann nicht rückgängig gemacht werden.",
"confirm_3": "Ihre Code-Dateien werden NICHT beeinflusst, und das Tool ist so konzipiert,",
"confirm_4": "nur Cursor AI Editor-Dateien und Trial-Erkennungsmechanismen zu zielen.",
"confirm_5": "Andere Anwendungen auf Ihrem System werden NICHT beeinflusst.",
"confirm_6": "Sie müssen Cursor AI erneut einrichten, nachdem Sie dieses Tool ausgeführt haben.",
"confirm_7": "Verwenden Sie auf eigene Gefahr",
"invalid_choice": "Bitte geben Sie 'Y' oder 'n' ein",
"skipped_for_safety": "Übersprungen für Sicherheit (nicht Cursor-bezogen): {path}",
"deleted": "Gelöscht: {path}",
"error_deleting": "Fehler beim Löschen von {path}: {error}",
"not_found": "Datei nicht gefunden: {path}",
"resetting_machine_id": "Maschinen-IDs zurücksetzen, um Trial-Erkennung zu umgehen...",
"created_machine_id": "Neue Maschinen-ID erstellt: {path}",
"error_creating_machine_id": "Fehler beim Erstellen der Maschinen-ID-Datei {path}: {error}",
"error_searching": "Fehler beim Suchen nach Dateien in {path}: {error}",
"created_extended_trial_info": "Neue erweiterte Trial-Informationen erstellt: {path}",
"error_creating_trial_info": "Fehler beim Erstellen der Trial-Informationen-Datei {path}: {error}",
"resetting_cursor_ai_editor": "Cursor AI Editor zurücksetzen... Bitte warten.",
"reset_cancelled": "Reset abgebrochen. Ohne Änderungen verlassen.",
"windows_machine_id_modification_skipped": "Windows Maschinen-ID-Änderung übersprungen: {error}",
"linux_machine_id_modification_skipped": "Linux machine-id-Änderung übersprungen: {error}",
"note_complete_machine_id_reset_may_require_running_as_administrator": "Hinweis: Vollständiges Zurücksetzen der Maschinen-ID kann erfordern, dass Sie als Administrator ausführen",
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Hinweis: Vollständiges System-Maschinen-ID-Zurücksetzen kann sudo-Berechtigungen erfordern",
"windows_registry_instructions": "📝 HINWEIS: Für vollständiges Zurücksetzen auf Windows müssen Sie möglicherweise auch die Registrierungseinträge bereinigen.",
"windows_registry_instructions_2": " Führen Sie 'regedit' aus und suchen Sie nach Schlüsseln, die 'Cursor' oder 'CursorAI' enthalten, unter HKEY_CURRENT_USER\\Software\\ und löschen Sie sie.\n",
"reset_log_1": "Cursor AI wurde vollständig zurückgesetzt und Trial-Erkennung umgangen!",
"reset_log_2": "Bitte starten Sie Ihr System neu, um die Änderungen zu übernehmen.",
"reset_log_3": "Sie müssen Cursor AI erneut installieren und sollten jetzt einen neuen Trial-Zeitraum haben.",
"reset_log_4": "Für die besten Ergebnisse betrachten Sie auch:",
"reset_log_5": "Verwenden Sie eine andere E-Mail-Adresse beim Registrieren für einen neuen Trial",
"reset_log_6": "Wenn verfügbar, verwenden Sie einen VPN, um Ihre IP-Adresse zu ändern",
"reset_log_7": "Löschen Sie Ihre Browser-Cookies und Cache vor dem Besuch der Cursor AI-Website",
"reset_log_8": "Wenn Probleme bestehen, versuchen Sie, Cursor AI in einem anderen Speicherort zu installieren",
"reset_log_9": "Wenn Sie irgendwelche Probleme haben, gehen Sie zu Github Issue Tracker und erstellen Sie ein Problem unter https://github.com/yeongpin/cursor-free-vip/issues",
"unexpected_error": "Ein unerwarteter Fehler ist aufgetreten: {error}",
"report_issue": "Bitte melden Sie dieses Problem bei Github Issue Tracker unter https://github.com/yeongpin/cursor-free-vip/issues",
"keyboard_interrupt": "Prozess von Benutzer unterbrochen. Beenden...",
"return_to_main_menu": "Zurück zur Hauptseite...",
"process_interrupted": "Prozess unterbrochen. Beenden...",
"press_enter_to_return_to_main_menu": "Drücken Sie Enter, um zur Hauptseite zurückzukehren...",
"removing_known": "Bekannte Trial/Lizenz-Dateien entfernen",
"performing_deep_scan": "Tiefes Scannen nach zusätzlichen Trial/Lizenz-Dateien",
"found_additional_potential_license_trial_files": "Gefundene {count} zusätzliche potentielle Lizenz/Trial-Dateien",
"checking_for_electron_localstorage_files": "Überprüfen auf Electron localStorage-Dateien",
"no_additional_license_trial_files_found_in_deep_scan": "Keine zusätzlichen Lizenz/Trial-Dateien in tiefem Scan gefunden",
"removing_electron_localstorage_files": "Electron localStorage-Dateien entfernen",
"electron_localstorage_files_removed": "Electron localStorage-Dateien entfernt",
"electron_localstorage_files_removal_error": "Fehler beim Entfernen von Electron localStorage-Dateien: {error}",
"removing_electron_localstorage_files_completed": "Entfernen von Electron localStorage-Dateien abgeschlossen"
}
}

View File

@@ -22,7 +22,10 @@
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Vietnamese"
"vi": "Vietnamese",
"nl": "Dutch",
"de": "German",
"fr": "French"
},
"quit_cursor": {
"start": "Start Quitting Cursor",
@@ -225,7 +228,7 @@
},
"email": {
"starting_browser": "Starting Browser",
"visiting_site": "Visiting mail.tm",
"visiting_site": "Visiting mail domains",
"create_success": "Email Created Successfully",
"create_failed": "Failed to Create Email",
"create_error": "Email Creation Error: {error}",
@@ -256,7 +259,8 @@
"blocked_domains_loaded_timeout_error": "Blocked Domains Loaded Timeout Error: {error}",
"available_domains_loaded": "Available Domains Loaded: {count}",
"domains_filtered": "Domains Filtered: {count}",
"trying_to_create_email": "Trying to create email: {email}"
"trying_to_create_email": "Trying to create email: {email}",
"domain_blocked": "Domain Blocked: {domain}"
},
"update": {
"title": "Disable Cursor Auto Update",
@@ -281,7 +285,8 @@
"update_confirm": "Do you want to update to the latest version? (Y/n)",
"update_skipped": "Skipping update.",
"invalid_choice": "Invalid choice. Please enter 'Y' or 'n'.",
"development_version": "Development Version {current} > {latest}"
"development_version": "Development Version {current} > {latest}",
"changelog_title": "Changelog"
},
"totally_reset": {
"title": "Totally Reset Cursor",

372
locales/fr.json Normal file
View File

@@ -0,0 +1,372 @@
{
"menu": {
"title": "Options Disponibles",
"exit": "Quitter le Programme",
"reset": "Réinitialiser l'ID Machine",
"register": "Enregistrer un Nouveau Compte Cursor",
"register_google": "S'inscrire avec un Compte Google",
"register_github": "S'inscrire avec un Compte GitHub",
"register_manual": "Enregistrer Cursor avec un E-mail Personnalisé",
"quit": "Fermer l'Application Cursor",
"select_language": "Changer de Langue",
"input_choice": "Veuillez entrer votre choix ({choices})",
"invalid_choice": "Sélection invalide. Veuillez entrer un numéro de {choices}",
"program_terminated": "Programme terminé par l'utilisateur",
"error_occurred": "Une erreur s'est produite : {error}. Veuillez réessayer",
"press_enter": "Appuyez sur Entrée pour quitter",
"disable_auto_update": "Désactiver la Mise à Jour Automatique de Cursor",
"lifetime_access_enabled": "ACCÈS À VIE ACTIVÉ",
"totally_reset": "Réinitialisation Complète de Cursor"
},
"languages": {
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Tiếng Việt",
"nl": "Nederlands",
"de": "Deutsch",
"fr": "Français"
},
"quit_cursor": {
"start": "Début de la Fermeture de Cursor",
"no_process": "Aucun Processus Cursor en Cours",
"terminating": "Arrêt du Processus {pid}",
"waiting": "En Attente de la Fin du Processus",
"success": "Tous les Processus Cursor sont Fermés",
"timeout": "Délai d'Attente du Processus : {pids}",
"error": "Erreur Survenue : {error}"
},
"reset": {
"title": "Outil de Réinitialisation de l'ID Machine de Cursor",
"checking": "Vérification du Fichier de Configuration",
"not_found": "Fichier de Configuration Non Trouvé",
"no_permission": "Impossible de Lire ou d'Écrire le Fichier de Configuration, Veuillez Vérifier les Permissions",
"reading": "Lecture de la Configuration Actuelle",
"creating_backup": "Création d'une Sauvegarde de la Configuration",
"backup_exists": "Fichier de Sauvegarde Existe Déjà, Étape de Sauvegarde Ignorée",
"generating": "Génération d'un Nouvel ID Machine",
"saving_json": "Sauvegarde de la Nouvelle Configuration en JSON",
"success": "ID Machine Réinitialisé avec Succès",
"new_id": "Nouvel ID Machine",
"permission_error": "Erreur de Permission : {error}",
"run_as_admin": "Veuillez Essayer d'Exécuter ce Programme en tant qu'Administrateur",
"process_error": "Erreur de Processus de Réinitialisation : {error}",
"updating_sqlite": "Mise à Jour de la Base de Données SQLite",
"updating_pair": "Mise à Jour de la Paire Clé-Valeur",
"sqlite_success": "Base de Données SQLite Mise à Jour avec Succès",
"sqlite_error": "Échec de la Mise à Jour de la Base de Données SQLite : {error}",
"press_enter": "Appuyez sur Entrée pour Continuer",
"unsupported_os": "Système d'Exploitation Non Pris en Charge : {os}",
"linux_path_not_found": "Chemin Linux Non Trouvé",
"updating_system_ids": "Mise à Jour des IDs Système",
"system_ids_updated": "IDs Système Mis à Jour avec Succès",
"system_ids_update_failed": "Échec de la Mise à Jour des IDs Système : {error}",
"windows_guid_updated": "GUID Windows Mis à Jour avec Succès",
"windows_permission_denied": "Permission Windows Refusée",
"windows_guid_update_failed": "Échec de la Mise à Jour du GUID Windows",
"macos_uuid_updated": "UUID macOS Mis à Jour avec Succès",
"plutil_command_failed": "Commande plutil Échouée",
"start_patching": "Démarrage du Patching de getMachineId",
"macos_uuid_update_failed": "Échec de la Mise à Jour de l'UUID macOS",
"current_version": "Version Actuelle de Cursor : {version}",
"patch_completed": "Patching de getMachineId Terminé",
"patch_failed": "Échec du Patching de getMachineId : {error}",
"version_check_passed": "Vérification de la Version de Cursor Réussie",
"file_modified": "Fichier Modifié",
"version_less_than_0_45": "Version de Cursor < 0.45.0, Patching de getMachineId Ignoré",
"detecting_version": "Détection de la Version de Cursor",
"patching_getmachineid": "Patching de getMachineId",
"version_greater_than_0_45": "Version de Cursor >= 0.45.0, Patching de getMachineId",
"permission_denied": "Permission Refusée : {error}",
"backup_created": "Sauvegarde Créée",
"update_success": "Mise à Jour Réussie",
"update_failed": "Échec de la Mise à Jour : {error}",
"windows_machine_guid_updated": "GUID de la Machine Windows Mis à Jour avec Succès",
"reading_package_json": "Lecture du package.json {path}",
"invalid_json_object": "Objet JSON Invalide",
"no_version_field": "Aucun Champ de Version Trouvé dans le package.json",
"version_field_empty": "Champ de Version Vide",
"invalid_version_format": "Format de Version Invalide : {version}",
"found_version": "Version Trouvée : {version}",
"version_parse_error": "Erreur d'Analyse de la Version : {error}",
"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"
},
"register": {
"title": "Outil d'Enregistrement de Cursor",
"start": "Démarrage du Processus d'Enregistrement...",
"handling_turnstile": "Traitement de la Vérification de Sécurité...",
"retry_verification": "Nouvelle Tentative de Vérification...",
"detect_turnstile": "Vérification de la Sécurité...",
"verification_success": "Vérification de Sécurité Réussie",
"starting_browser": "Ouverture du Navigateur...",
"form_success": "Formulaire Soumis avec Succès",
"browser_started": "Navigateur Ouvert avec Succès",
"waiting_for_second_verification": "En Attente de la Vérification par E-mail...",
"waiting_for_verification_code": "En Attente du Code de Vérification...",
"password_success": "Mot de Passe Défini avec Succès",
"password_error": "Impossible de Définir le Mot de Passe : {error}. Veuillez Réessayer",
"waiting_for_page_load": "Chargement de la Page...",
"first_verification_passed": "Première Vérification Réussie",
"mailbox": "Boîte de Réception Accédée avec Succès",
"register_start": "Démarrer l'Enregistrement",
"form_submitted": "Formulaire Soumis, Démarrage de la Vérification...",
"filling_form": "Remplissage du Formulaire",
"visiting_url": "Visite de l'URL",
"basic_info": "Informations de Base Soumises",
"handle_turnstile": "Traitement du Tourniquet",
"no_turnstile": "Aucun Tourniquet Détecté",
"turnstile_passed": "Tourniquet Réussi",
"verification_start": "Démarrage de l'Obtention du Code de Vérification",
"verification_timeout": "Délai d'Attente du Code de Vérification",
"verification_not_found": "Aucun Code de Vérification Trouvé",
"try_get_code": "Essayer | {attempt} d'Obtenir le Code de Vérification | Temps Restant : {time}s",
"get_account": "Obtention des Informations du Compte",
"get_token": "Obtention du Jeton de Session Cursor",
"token_success": "Jeton Obtenu avec Succès",
"token_attempt": "Essayer | {attempt} fois d'Obtenir le Jeton | Nouvelle Tentative dans {time}s",
"token_max_attempts": "Nombre Maximum de Tentatives Atteint ({max}) | Échec de l'Obtention du Jeton",
"token_failed": "Échec de l'Obtention du Jeton : {error}",
"account_error": "Échec de l'Obtention des Informations du Compte : {error}",
"press_enter": "Appuyez sur Entrée pour Continuer",
"browser_start": "Démarrage du Navigateur",
"open_mailbox": "Ouverture de la Page de la Boîte de Réception",
"email_error": "Échec de l'Obtention de l'Adresse E-mail",
"setup_error": "Erreur de Configuration de l'E-mail : {error}",
"start_getting_verification_code": "Démarrage de l'Obtention du Code de Vérification, Nouvelle Tentative dans 60s",
"get_verification_code_timeout": "Délai d'Attente de l'Obtention du Code de Vérification",
"get_verification_code_success": "Code de Vérification Obtenu avec Succès",
"try_get_verification_code": "Essayer | {attempt} d'Obtenir le Code de Vérification | Temps Restant : {remaining_time}s",
"verification_code_filled": "Code de Vérification Rempli",
"login_success_and_jump_to_settings_page": "Connexion Réussie et Accès à la Page des Paramètres",
"detect_login_page": "Détection de la Page de Connexion, Démarrage de la Connexion...",
"cursor_registration_completed": "Enregistrement de Cursor Terminé!",
"set_password": "Définir le Mot de Passe",
"basic_info_submitted": "Informations de Base Soumises",
"cursor_auth_info_updated": "Informations d'Authentification de Cursor Mises à Jour",
"cursor_auth_info_update_failed": "Échec de la Mise à Jour des Informations d'Authentification de Cursor",
"reset_machine_id": "Réinitialiser l'ID Machine",
"account_info_saved": "Informations du Compte Enregistrées",
"save_account_info_failed": "Échec de l'Enregistrement des Informations du Compte",
"get_email_address": "Obtenir l'Adresse E-mail",
"update_cursor_auth_info": "Mettre à Jour les Informations d'Authentification de Cursor",
"register_process_error": "Erreur du Processus d'Enregistrement : {error}",
"setting_password": "Définir le Mot de Passe",
"manual_code_input": "Saisie Manuelle du Code",
"manual_email_input": "Saisie Manuelle de l'E-mail",
"password": "Mot de Passe",
"first_name": "Prénom",
"last_name": "Nom de Famille",
"exit_signal": "Signal de Sortie",
"email_address": "Adresse E-mail",
"config_created": "Configuration Créée",
"verification_failed": "Échec de la Vérification",
"verification_error": "Erreur de Vérification : {error}",
"config_option_added": "Option de Configuration Ajoutée : {option}",
"config_updated": "Configuration Mise à Jour",
"password_submitted": "Mot de Passe Soumis",
"total_usage": "Utilisation Totale : {usage}",
"setting_on_password": "Définir le Mot de Passe",
"getting_code": "Obtention du Code de Vérification, Nouvelle Tentative dans 60s"
},
"auth": {
"title": "Gestionnaire d'Authentification de Cursor",
"checking_auth": "Vérification du Fichier d'Authentification",
"auth_not_found": "Fichier d'Authentification Non Trouvé",
"auth_file_error": "Erreur du Fichier d'Authentification : {error}",
"reading_auth": "Lecture du Fichier d'Authentification",
"updating_auth": "Mise à Jour des Informations d'Authentification",
"auth_updated": "Informations d'Authentification Mises à Jour avec Succès",
"auth_update_failed": "Échec de la Mise à Jour des Informations d'Authentification : {error}",
"auth_file_created": "Fichier d'Authentification Créé",
"auth_file_create_failed": "Échec de la Création du Fichier d'Authentification : {error}",
"press_enter": "Appuyez sur Entrée pour Continuer",
"reset_machine_id": "Réinitialiser l'ID Machine",
"database_connection_closed": "Connexion à la Base de Données Fermée",
"database_updated_successfully": "Base de Données Mise à Jour avec Succès",
"connected_to_database": "Connecté à la Base de Données",
"updating_pair": "Mise à Jour de la Paire Clé-Valeur",
"db_not_found": "Fichier de Base de Données Non Trouvé à : {path}",
"db_permission_error": "Impossible d'Accéder au Fichier de Base de Données. Veuillez Vérifier les Permissions",
"db_connection_error": "Échec de la Connexion à la Base de Données : {error}"
},
"control": {
"generate_email": "Générer un Nouvel E-mail",
"blocked_domain": "Domaine Bloqué",
"select_domain": "Sélectionner un Domaine Aléatoire",
"copy_email": "Copier l'Adresse E-mail",
"enter_mailbox": "Entrer dans la Boîte de Réception",
"refresh_mailbox": "Actualiser la Boîte de Réception",
"check_verification": "Vérifier le Code de Vérification",
"verification_found": "Code de Vérification Trouvé",
"verification_not_found": "Aucun Code de Vérification Trouvé",
"browser_error": "Erreur de Contrôle du Navigateur : {error}",
"navigation_error": "Erreur de Navigation : {error}",
"email_copy_error": "Erreur de Copie de l'E-mail : {error}",
"mailbox_error": "Erreur de la Boîte de Réception : {error}",
"token_saved_to_file": "Jeton Enregistré dans cursor_tokens.txt",
"navigate_to": "Naviguer vers {url}",
"generate_email_success": "E-mail Généré avec Succès",
"select_email_domain": "Sélectionner le Domaine de l'E-mail",
"select_email_domain_success": "Domaine de l'E-mail Sélectionné avec Succès",
"get_email_name": "Obtenir le Nom de l'E-mail",
"get_email_name_success": "Nom de l'E-mail Obtenu avec Succès",
"get_email_address": "Obtenir l'Adresse E-mail",
"get_email_address_success": "Adresse E-mail Obtenue avec Succès",
"enter_mailbox_success": "Entrée dans la Boîte de Réception Réussie",
"found_verification_code": "Code de Vérification Trouvé",
"get_cursor_session_token": "Obtenir le Jeton de Session Cursor",
"get_cursor_session_token_success": "Jeton de Session Cursor Obtenu avec Succès",
"get_cursor_session_token_failed": "Échec de l'Obtention du Jeton de Session Cursor",
"save_token_failed": "Échec de l'Enregistrement du Jeton",
"database_updated_successfully": "Base de Données Mise à Jour avec Succès",
"database_connection_closed": "Connexion à la Base de Données Fermée",
"no_valid_verification_code": "Aucun Code de Vérification Valide"
},
"email": {
"starting_browser": "Démarrage du Navigateur",
"visiting_site": "Visite de mail domains",
"create_success": "E-mail Créé avec Succès",
"create_failed": "Échec de la Création de l'E-mail",
"create_error": "Erreur de Création de l'E-mail : {error}",
"refreshing": "Actualisation de l'E-mail",
"refresh_success": "E-mail Actualisé avec Succès",
"refresh_error": "Erreur d'Actualisation de l'E-mail : {error}",
"refresh_button_not_found": "Bouton d'Actualisation Non Trouvé",
"verification_found": "Vérification Trouvée",
"verification_not_found": "Vérification Non Trouvée",
"verification_error": "Erreur de Vérification : {error}",
"verification_code_found": "Code de Vérification Trouvé",
"verification_code_not_found": "Code de Vérification Non Trouvé",
"verification_code_error": "Erreur de Code de Vérification : {error}",
"address": "Adresse E-mail",
"all_domains_blocked": "Tous les Domaines Sont Bloqués, Changement de Service",
"no_available_domains_after_filtering": "Aucun Domaine Disponible Après Filtrage",
"switching_service": "Changement vers le Service {service}",
"domains_list_error": "Échec de l'Obtention de la Liste des Domaines : {error}",
"failed_to_get_available_domains": "Échec de l'Obtention des Domaines Disponibles",
"domains_excluded": "Domaines Exclus : {domains}",
"failed_to_create_account": "Échec de la Création du Compte",
"account_creation_error": "Erreur de Création du Compte : {error}",
"domain_blocked": "Domaine Bloqué : {domain}"
},
"update": {
"title": "Désactivation de la Mise à Jour Automatique de Cursor",
"disable_success": "Mise à Jour Automatique Désactivée avec Succès",
"disable_failed": "Échec de la Désactivation de la Mise à Jour Automatique : {error}",
"press_enter": "Appuyez sur Entrée pour Continuer",
"start_disable": "Démarrage de la Désactivation de la Mise à Jour Automatique",
"killing_processes": "Tuer les Processus",
"processes_killed": "Processus Tuer",
"removing_directory": "Suppression du Dossier",
"directory_removed": "Dossier Supprimé",
"creating_block_file": "Création du Fichier de Blocage",
"block_file_created": "Fichier de Blocage Créé"
},
"updater": {
"checking": "Vérification des mises à jour...",
"new_version_available": "Nouvelle version disponible! (Version actuelle: {current}, Version la plus récente: {latest})",
"updating": "Mise à jour vers la version la plus récente. Le programme redémarrera automatiquement.",
"up_to_date": "Vous utilisez la version la plus récente.",
"check_failed": "Échec de la vérification des mises à jour: {error}",
"continue_anyway": "Continuer avec la version actuelle...",
"update_confirm": "Voulez-vous mettre à jour vers la version la plus récente? (O/n)",
"update_skipped": "Mise à jour ignorée.",
"invalid_choice": "Choix invalide. Veuillez entrer 'O' ou 'n'.",
"development_version": "Version de Développement {current} > {latest}",
"changelog_title": "Journal des modifications"
},
"totally_reset": {
"title": "Réinitialiser Complètement Cursor",
"checking_config": "Vérification du Fichier de Configuration",
"config_not_found": "Fichier de Configuration Non Trouvé",
"no_permission": "Impossible de Lire ou d'Écrire le Fichier de Configuration, Veuillez Vérifier les Permissions du Fichier",
"reading_config": "Lecture de la Configuration Actuelle",
"creating_backup": "Création de la Sauvegarde de la Configuration",
"backup_exists": "Fichier de Sauvegarde Déjà Existant, Passer à la Sauvegarde",
"generating_new_machine_id": "Génération d'un Nouvel ID Machine",
"saving_new_config": "Enregistrement de la Nouvelle Configuration dans JSON",
"success": "Réinitialisation de Cursor Réussie",
"error": "Réinitialisation de Cursor Échouée: {error}",
"press_enter": "Appuyez sur Entrée pour Continuer",
"reset_machine_id": "Réinitialiser l'ID Machine",
"database_connection_closed": "Connexion à la Base de Données Fermée",
"database_updated_successfully": "Base de Données Mise à Jour avec Succès",
"connected_to_database": "Connecté à la Base de Données",
"updating_pair": "Updating Key-Value Pair",
"db_not_found": "Database file not found at: {path}",
"db_permission_error": "Impossible d'Accéder au Fichier de Base de Données. Veuillez Vérifier les Permissions",
"db_connection_error": "Échec de la Connexion à la Base de Données : {error}",
"feature_title": "Fonctionnalités",
"feature_1": "Suppression complète des paramètres et configurations de Cursor AI",
"feature_2": "Efface tous les données mises en cache, y compris l'historique et les prompts",
"feature_3": "Réinitialise l'ID Machine pour contourner la détection de la période d'essai",
"feature_4": "Crée de nouveaux identifiants de machine aléatoires",
"feature_5": "Supprime les extensions personnalisées et les préférences",
"feature_6": "Réinitialise les informations de la période d'essai et les données d'activation",
"feature_7": "Analyse approfondie pour les fichiers cachés liés à la licence et à la période d'essai",
"feature_8": "Sauvegarde sécurisée des fichiers non liés à Cursor et applications",
"feature_9": "Compatible avec Windows, macOS et Linux",
"disclaimer_title": "DISCLAIMER",
"disclaimer_1": "Cet outil supprimera définitivement tous les paramètres et configurations de Cursor AI,",
"disclaimer_2": "configurations, et les données mises en cache. Cette action ne peut pas être annulée.",
"disclaimer_3": "Vos fichiers de code ne seront PAS affectés, et l'outil est conçu",
"disclaimer_4": "pour ne cibler que les fichiers de l'éditeur Cursor AI et les mécanismes de détection de la période d'essai.",
"disclaimer_5": "Les autres applications sur votre système ne seront PAS affectées.",
"disclaimer_6": "Vous devrez régler Cursor AI à nouveau après avoir exécuté cet outil.",
"disclaimer_7": "Utilisez à vos risques et périls",
"confirm_title": "Êtes-vous sûr de vouloir continuer?",
"confirm_1": "Cette action supprimera tous les paramètres et configurations de Cursor AI,",
"confirm_2": "configurations, et les données mises en cache. Cette action ne peut pas être annulée.",
"confirm_3": "Vos fichiers de code ne seront PAS affectés, et l'outil est conçu",
"confirm_4": "pour ne cibler que les fichiers de l'éditeur Cursor AI et les mécanismes de détection de la période d'essai.",
"confirm_5": "Les autres applications sur votre système ne seront PAS affectées.",
"confirm_6": "Vous devrez régler Cursor AI à nouveau après avoir exécuté cet outil.",
"confirm_7": "Utilisez à vos risques et périls",
"invalid_choice": "Veuillez entrer 'O' ou 'n'",
"skipped_for_safety": "Passé pour la sécurité (non lié à Cursor): {path}",
"deleted": "Supprimé: {path}",
"error_deleting": "Erreur de suppression de {path}: {error}",
"not_found": "Fichier non trouvé: {path}",
"resetting_machine_id": "Réinitialisation des identifiants de machine pour contourner la détection de la période d'essai...",
"created_machine_id": "Créé un nouvel ID machine: {path}",
"error_creating_machine_id": "Erreur de création du fichier ID machine {path}: {error}",
"error_searching": "Erreur de recherche dans {path}: {error}",
"created_extended_trial_info": "Créé un nouveau fichier d'informations de période d'essai étendue: {path}",
"error_creating_trial_info": "Erreur de création du fichier d'informations de période d'essai: {path}: {error}",
"resetting_cursor_ai_editor": "Réinitialisation de l'éditeur Cursor AI... Veuillez patienter.",
"reset_cancelled": "Réinitialisation annulée. Exiting sans faire de modifications.",
"windows_machine_id_modification_skipped": "Modification de l'ID machine Windows ignorée: {error}",
"linux_machine_id_modification_skipped": "Modification de l'ID machine Linux ignorée: {error}",
"note_complete_machine_id_reset_may_require_running_as_administrator": "Note: Réinitialisation complète de l'ID machine peut nécessiter d'exécuter en tant qu'administrateur",
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Note: Réinitialisation complète de l'ID machine peut nécessiter des privilèges sudo",
"windows_registry_instructions": "📝 NOTE: Pour la réinitialisation complète sur Windows, vous devrez peut-être également nettoyer les entrées du registre.",
"windows_registry_instructions_2": " Exécutez 'regedit' et recherchez les clés contenant 'Cursor' ou 'CursorAI' sous HKEY_CURRENT_USER\\Software\\ et supprimez-les.\n",
"reset_log_1": "Cursor AI a été complètement réinitialisé et la détection de la période d'essai a été contournée!",
"reset_log_2": "Veuillez redémarrer votre système pour que les modifications prennent effet.",
"reset_log_3": "Vous devrez réinstaller Cursor AI et devriez maintenant avoir une période d'essai fraîche.",
"reset_log_4": "Pour les meilleurs résultats, considérez également:",
"reset_log_5": "Utilisez une autre adresse e-mail lors de l'inscription pour une nouvelle période d'essai",
"reset_log_6": "Si disponible, utilisez un VPN pour changer votre adresse IP",
"reset_log_7": "Nettoyez les cookies et le cache de votre navigateur avant de visiter le site web de Cursor AI",
"reset_log_8": "Si les problèmes persistent, essayez d'installer Cursor AI dans un autre emplacement",
"reset_log_9": "Si vous rencontrez des problèmes, allez au suivi des problèmes Github et créez un problème à https://github.com/yeongpin/cursor-free-vip/issues",
"unexpected_error": "Une erreur inattendue est survenue: {error}",
"report_issue": "Veuillez signaler ce problème au suivi des problèmes Github à https://github.com/yeongpin/cursor-free-vip/issues",
"keyboard_interrupt": "Processus interrompu par l'utilisateur. Exiting...",
"return_to_main_menu": "Retour au menu principal...",
"process_interrupted": "Processus interrompu. Exiting...",
"press_enter_to_return_to_main_menu": "Appuyez sur Entrée pour retourner au menu principal...",
"removing_known": "Suppression des fichiers de période d'essai/licence connus",
"performing_deep_scan": "Exécution d'une analyse approfondie pour les fichiers de période d'essai/licence supplémentaires",
"found_additional_potential_license_trial_files": "Trouvé {count} fichiers de période d'essai/licence supplémentaires potentiels",
"checking_for_electron_localstorage_files": "Vérification des fichiers localStorage Electron",
"no_additional_license_trial_files_found_in_deep_scan": "Aucun fichier de licence/période d'essai supplémentaire trouvé dans l'analyse approfondie",
"removing_electron_localstorage_files": "Suppression des fichiers localStorage Electron",
"electron_localstorage_files_removed": "Fichiers localStorage Electron supprimés",
"electron_localstorage_files_removal_error": "Erreur de suppression des fichiers localStorage Electron: {error}",
"removing_electron_localstorage_files_completed": "Suppression des fichiers localStorage Electron terminée"
}
}

372
locales/nl.json Normal file
View File

@@ -0,0 +1,372 @@
{
"menu": {
"title": "Beschikbare opties",
"exit": "Programma afsluiten",
"reset": "Machine-ID resetten",
"register": "Nieuw Cursor-account registreren",
"register_google": "Registreren met Google-account",
"register_github": "Registreren met GitHub-account",
"register_manual": "Cursor registreren met aangepast e-mailadres",
"quit": "Cursor-applicatie sluiten",
"select_language": "Taal wijzigen",
"input_choice": "Voer uw keuze in: {choices}",
"invalid_choice": "Ongeldige selectie. Voer een nummer in uit {choices}.",
"program_terminated": "Programma is beëindigd door de gebruiker",
"error_occurred": "Er is een fout opgetreden: {error}. Probeer het opnieuw.",
"press_enter": "Druk op Enter om door te gaan.",
"disable_auto_update": "Cursor automatische updates uitschakelen",
"lifetime_access_enabled": "Levenslange toegang ingeschakeld",
"totally_reset": "Cursor volledig resetten"
},
"languages": {
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Tiếng Việt",
"nl": "Nederlands",
"de": "Deutsch",
"fr": "Français"
},
"quit_cursor": {
"start": "Start met afsluiten van Cursor",
"no_process": "Geen actief Cursor-proces",
"terminating": "Proces beëindigen {pid}",
"waiting": "Wachten tot het proces is afgesloten",
"success": "Alle Cursor-processen gesloten",
"timeout": "Proces time-out: {pids}",
"error": "Fout opgetreden: {error}"
},
"reset": {
"title": "Cursor Machine-ID Reset Tool",
"checking": "Configuratiebestand controleren",
"not_found": "Configuratiebestand niet gevonden",
"no_permission": "Kan configuratiebestand niet lezen of schrijven, controleer de bestandsrechten",
"reading": "Huidige configuratie lezen",
"creating_backup": "Configuratieback-up maken",
"backup_exists": "Back-upbestand bestaat al, back-upstap overslaan",
"generating": "Nieuwe Machine-ID genereren",
"saving_json": "Nieuwe configuratie opslaan naar JSON",
"success": "Machine-ID succesvol gereset",
"new_id": "Nieuwe Machine-ID",
"permission_error": "Toestemmingsfout: {error}",
"run_as_admin": "Probeer dit programma als beheerder uit te voeren",
"process_error": "Resetprocesfout: {error}",
"updating_sqlite": "SQLite-database bijwerken",
"updating_pair": "Sleutel-waarde paar bijwerken",
"sqlite_success": "SQLite-database succesvol bijgewerkt",
"sqlite_error": "SQLite-database bijwerken mislukt: {error}",
"press_enter": "Druk op Enter om door te gaan",
"unsupported_os": "Niet-ondersteund besturingssysteem: {os}",
"linux_path_not_found": "Linux-pad niet gevonden",
"updating_system_ids": "Systeem-ID's bijwerken",
"system_ids_updated": "Systeem-ID's succesvol bijgewerkt",
"system_ids_update_failed": "Systeem-ID's bijwerken mislukt: {error}",
"windows_guid_updated": "Windows GUID succesvol bijgewerkt",
"windows_permission_denied": "Windows toestemming geweigerd",
"windows_guid_update_failed": "Windows GUID bijwerken mislukt",
"macos_uuid_updated": "macOS UUID succesvol bijgewerkt",
"plutil_command_failed": "plutil-opdracht mislukt",
"start_patching": "Patching getMachineId starten",
"macos_uuid_update_failed": "macOS UUID bijwerken mislukt",
"current_version": "Huidige Cursor-versie: {version}",
"patch_completed": "Patching getMachineId voltooid",
"patch_failed": "Patching getMachineId mislukt: {error}",
"version_check_passed": "Cursor-versiecontrole geslaagd",
"file_modified": "Bestand gewijzigd",
"version_less_than_0_45": "Cursor-versie < 0.45.0, patching getMachineId overslaan",
"detecting_version": "Cursor-versie detecteren",
"patching_getmachineid": "Patching getMachineId",
"version_greater_than_0_45": "Cursor-versie >= 0.45.0, patching getMachineId",
"permission_denied": "Toestemming geweigerd: {error}",
"backup_created": "Back-up gemaakt",
"update_success": "Update geslaagd",
"update_failed": "Update mislukt: {error}",
"windows_machine_guid_updated": "Windows Machine GUID succesvol bijgewerkt",
"reading_package_json": "package.json lezen {path}",
"invalid_json_object": "Ongeldig JSON-object",
"no_version_field": "Geen versieveld gevonden in package.json",
"version_field_empty": "Versieveld is leeg",
"invalid_version_format": "Ongeldig versieformaat: {version}",
"found_version": "Gevonden versie: {version}",
"version_parse_error": "Versie parse-fout: {error}",
"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"
},
"register": {
"title": "Cursor Registratietool",
"start": "Registratieproces starten...",
"handling_turnstile": "Beveiligingsverificatie verwerken...",
"retry_verification": "Verificatie opnieuw proberen...",
"detect_turnstile": "Beveiligingsverificatie controleren...",
"verification_success": "Beveiligingsverificatie geslaagd",
"starting_browser": "Browser openen...",
"form_success": "Formulier succesvol ingediend",
"browser_started": "Browser succesvol geopend",
"waiting_for_second_verification": "Wachten op e-mailverificatie...",
"waiting_for_verification_code": "Wachten op verificatiecode...",
"password_success": "Wachtwoord succesvol ingesteld",
"password_error": "Kon wachtwoord niet instellen: {error}. Probeer het opnieuw",
"waiting_for_page_load": "Pagina laden...",
"first_verification_passed": "Eerste verificatie geslaagd",
"mailbox": "E-mailinbox succesvol geopend",
"register_start": "Registratie starten",
"form_submitted": "Formulier ingediend, verificatie starten...",
"filling_form": "Formulier invullen",
"visiting_url": "URL bezoeken",
"basic_info": "Basisinformatie ingediend",
"handle_turnstile": "Turnstile verwerken",
"no_turnstile": "Geen Turnstile gedetecteerd",
"turnstile_passed": "Turnstile geslaagd",
"verification_start": "Verificatiecode verkrijgen starten",
"verification_timeout": "Verificatiecode time-out",
"verification_not_found": "Geen verificatiecode gevonden",
"try_get_code": "Probeer | {attempt} Verificatiecode verkrijgen | Tijd over: {time}s",
"get_account": "Accountinformatie verkrijgen",
"get_token": "Cursor-sessietoken verkrijgen",
"token_success": "Token succesvol verkregen",
"token_attempt": "Probeer | {attempt} keer om token te verkrijgen | Opnieuw proberen in {time}s",
"token_max_attempts": "Maximale pogingen bereikt ({max}) | Token verkrijgen mislukt",
"token_failed": "Token verkrijgen mislukt: {error}",
"account_error": "Accountinformatie verkrijgen mislukt: {error}",
"press_enter": "Druk op Enter om door te gaan",
"browser_start": "Browser starten",
"open_mailbox": "Mailboxpagina openen",
"email_error": "E-mailadres verkrijgen mislukt",
"setup_error": "E-mailinstelling fout: {error}",
"start_getting_verification_code": "Verificatiecode verkrijgen starten, opnieuw proberen in 60s",
"get_verification_code_timeout": "Verificatiecode verkrijgen time-out",
"get_verification_code_success": "Verificatiecode succesvol verkregen",
"try_get_verification_code": "Probeer | {attempt} Verificatiecode verkrijgen | Tijd over: {remaining_time}s",
"verification_code_filled": "Verificatiecode ingevuld",
"login_success_and_jump_to_settings_page": "Inloggen geslaagd en naar instellingenpagina springen",
"detect_login_page": "Inlogpagina detecteren, inloggen starten...",
"cursor_registration_completed": "Cursor-registratie voltooid!",
"set_password": "Wachtwoord instellen",
"basic_info_submitted": "Basisinformatie ingediend",
"cursor_auth_info_updated": "Cursor-authenticatie-informatie bijgewerkt",
"cursor_auth_info_update_failed": "Cursor-authenticatie-informatie bijwerken mislukt",
"reset_machine_id": "Machine-ID resetten",
"account_info_saved": "Accountinformatie opgeslagen",
"save_account_info_failed": "Accountinformatie opslaan mislukt",
"get_email_address": "E-mailadres verkrijgen",
"update_cursor_auth_info": "Cursor-authenticatie-informatie bijwerken",
"register_process_error": "Registratieprocesfout: {error}",
"setting_password": "Wachtwoord instellen",
"manual_code_input": "Handmatige code-invoer",
"manual_email_input": "Handmatige e-mailinvoer",
"password": "Wachtwoord",
"first_name": "Voornaam",
"last_name": "Achternaam",
"exit_signal": "Exit-signaal",
"email_address": "E-mailadres",
"config_created": "Configuratie aangemaakt",
"verification_failed": "Verificatie mislukt",
"verification_error": "Verificatiefout: {error}",
"config_option_added": "Configuratieoptie toegevoegd: {option}",
"config_updated": "Configuratie bijgewerkt",
"password_submitted": "Wachtwoord ingediend",
"total_usage": "Totaal gebruik: {usage}",
"setting_on_password": "Wachtwoord instellen",
"getting_code": "Verificatiecode verkrijgen, opnieuw proberen in 60s"
},
"auth": {
"title": "Cursor Authenticatiebeheer",
"checking_auth": "Authenticatiebestand controleren",
"auth_not_found": "Authenticatiebestand niet gevonden",
"auth_file_error": "Authenticatiebestandfout: {error}",
"reading_auth": "Authenticatiebestand lezen",
"updating_auth": "Authenticatie-informatie bijwerken",
"auth_updated": "Authenticatie-informatie succesvol bijgewerkt",
"auth_update_failed": "Authenticatie-informatie bijwerken mislukt: {error}",
"auth_file_created": "Authenticatiebestand aangemaakt",
"auth_file_create_failed": "Authenticatiebestand aanmaken mislukt: {error}",
"press_enter": "Druk op Enter om door te gaan",
"reset_machine_id": "Machine-ID resetten",
"database_connection_closed": "Databaseverbinding gesloten",
"database_updated_successfully": "Database succesvol bijgewerkt",
"connected_to_database": "Verbonden met database",
"updating_pair": "Sleutel-waarde paar bijwerken",
"db_not_found": "Databasebestand niet gevonden op: {path}",
"db_permission_error": "Kan geen toegang krijgen tot databasebestand. Controleer de rechten",
"db_connection_error": "Verbinding met database mislukt: {error}"
},
"control": {
"generate_email": "Nieuw e-mailadres genereren",
"blocked_domain": "Geblokkeerd domein",
"select_domain": "Willekeurig domein selecteren",
"copy_email": "E-mailadres kopiëren",
"enter_mailbox": "Mailbox betreden",
"refresh_mailbox": "Mailbox vernieuwen",
"check_verification": "Verificatiecode controleren",
"verification_found": "Verificatiecode gevonden",
"verification_not_found": "Geen verificatiecode gevonden",
"browser_error": "Browserbesturingsfout: {error}",
"navigation_error": "Navigatiefout: {error}",
"email_copy_error": "E-mailkopieerfout: {error}",
"mailbox_error": "Mailboxfout: {error}",
"token_saved_to_file": "Token opgeslagen in cursor_tokens.txt",
"navigate_to": "Navigeren naar {url}",
"generate_email_success": "E-mailadres succesvol gegenereerd",
"select_email_domain": "E-maildomein selecteren",
"select_email_domain_success": "E-maildomein succesvol geselecteerd",
"get_email_name": "E-mailnaam verkrijgen",
"get_email_name_success": "E-mailnaam succesvol verkregen",
"get_email_address": "E-mailadres verkrijgen",
"get_email_address_success": "E-mailadres succesvol verkregen",
"enter_mailbox_success": "Mailbox succesvol betreden",
"found_verification_code": "Verificatiecode gevonden",
"get_cursor_session_token": "Cursor-sessietoken verkrijgen",
"get_cursor_session_token_success": "Cursor-sessietoken succesvol verkregen",
"get_cursor_session_token_failed": "Cursor-sessietoken verkrijgen mislukt",
"save_token_failed": "Token opslaan mislukt",
"database_updated_successfully": "Database succesvol bijgewerkt",
"database_connection_closed": "Databaseverbinding gesloten",
"no_valid_verification_code": "Geen geldige verificatiecode"
},
"email": {
"starting_browser": "Browser starten",
"visiting_site": "Bezoek mail domains",
"create_success": "E-mail succesvol aangemaakt",
"create_failed": "E-mail aanmaken mislukt",
"create_error": "E-mail aanmaakfout: {error}",
"refreshing": "E-mail vernieuwen",
"refresh_success": "E-mail succesvol vernieuwd",
"refresh_error": "E-mail vernieuwingsfout: {error}",
"refresh_button_not_found": "Vernieuwknop niet gevonden",
"verification_found": "Verificatie gevonden",
"verification_not_found": "Verificatie niet gevonden",
"verification_error": "Verificatiefout: {error}",
"verification_code_found": "Verificatiecode gevonden",
"verification_code_not_found": "Verificatiecode niet gevonden",
"verification_code_error": "Verificatiecodefout: {error}",
"address": "E-mailadres",
"all_domains_blocked": "Alle domeinen geblokkeerd, service wisselen",
"no_available_domains_after_filtering": "Geen beschikbare domeinen na filteren",
"switching_service": "Wisselen naar {service} service",
"domains_list_error": "Domeinenlijst verkrijgen mislukt: {error}",
"failed_to_get_available_domains": "Verkrijgen van beschikbare domeinen mislukt",
"domains_excluded": "Uitgesloten domeinen: {domains}",
"failed_to_create_account": "Account aanmaken mislukt",
"account_creation_error": "Account aanmaakfout: {error}",
"domain_blocked": "Domein geblokkeerd: {domain}"
},
"update": {
"title": "Cursor automatische update uitschakelen",
"disable_success": "Automatische update is uitgeschakeld",
"disable_failed": "Automatische update uitschakelen mislukt: {error}",
"press_enter": "Druk op Enter om door te gaan",
"start_disable": "Automatische update uitschakelen starten",
"killing_processes": "Processen verwijderen",
"processes_killed": "Processen verwijderd",
"removing_directory": "Map verwijderen",
"directory_removed": "Map verwijderd",
"creating_block_file": "Blokkeerbestand aanmaken",
"block_file_created": "Blokkeerbestand aangemaakt"
},
"updater": {
"checking": "Controleren op updates...",
"new_version_available": "Er is een nieuwe versie beschikbaar! (Huidige versie: {current}, Laatste versie: {latest})",
"updating": "Aan het bijwerken naar de nieuwste versie. Het programma zal automatisch herstart worden.",
"up_to_date": "U gebruikt de nieuwste versie.",
"check_failed": "Controle op updates mislukt: {error}",
"continue_anyway": "Doorgaan met de huidige versie...",
"update_confirm": "Wil je de nieuwste versie gebruiken? (Y/n)",
"update_skipped": "Update overgeslagen.",
"invalid_choice": "Ongeldige keuze. Voer 'Y' of 'n' in.",
"development_version": "Ontwikkelversie {current} > {latest}",
"changelog_title": "Changelog"
},
"totally_reset": {
"title": "Cursor volledig herstellen",
"checking_config": "Configuratiebestand controleren",
"config_not_found": "Configuratiebestand niet gevonden",
"no_permission": "Kan geen toegang krijgen tot configuratiebestand. Controleer de rechten",
"reading_config": "Huidige configuratie lezen",
"creating_backup": "Configuratie-back-up aanmaken",
"backup_exists": "Back-up bestand bestaat, back-up stap overgeslagen",
"generating_new_machine_id": "Nieuwe machine-ID genereren",
"saving_new_config": "Nieuwe configuratie opslaan als JSON",
"success": "Cursor succesvol hersteld",
"error": "Cursor herstellen mislukt: {error}",
"press_enter": "Druk op Enter om door te gaan",
"reset_machine_id": "Machine-ID resetten",
"database_connection_closed": "Databaseverbinding gesloten",
"database_updated_successfully": "Database succesvol bijgewerkt",
"connected_to_database": "Verbonden met database",
"updating_pair": "Sleutel-waarde paar bijwerken",
"db_not_found": "Databasebestand niet gevonden op: {path}",
"db_permission_error": "Kan geen toegang krijgen tot databasebestand. Controleer de rechten",
"db_connection_error": "Verbinding met database mislukt: {error}",
"feature_title": "Functiebeschrijving",
"feature_1": "Compleet verwijderen van Cursor AI-instellingen en configuratie",
"feature_2": "Alle cachegegevens, inclusief AI-geschiedenis en prompts",
"feature_3": "Machine-ID resetten om de proefperiode te omzeilen",
"feature_4": "Nieuwe willekeurige machine-ID maken",
"feature_5": "Aangepaste extensies en voorkeuren verwijderen",
"feature_6": "Proefperiode- en activatiegegevens resetten",
"feature_7": "Diepe scan voor verborgen licentie- en proefperiodebestanden",
"feature_8": "Beveiligde niet-Cursor-bestanden en -toepassingen behouden",
"feature_9": "Compatibel met Windows, macOS en Linux",
"disclaimer_title": "Disclaimer",
"disclaimer_1": "Deze tool verwijdert alle Cursor AI-instellingen,",
"disclaimer_2": "configuratie en cachegegevens. Deze actie is niet ongedaan te maken.",
"disclaimer_3": "Uw codebestanden **worden niet** beïnvloed, de tool is bedoeld om",
"disclaimer_4": "Alleen gericht op Cursor AI-editorbestanden en proefperiodecontrolemechanisme.",
"disclaimer_5": "Andere systemtoepassingen worden niet beïnvloed.",
"disclaimer_6": "Na het uitvoeren van deze tool moet u Cursor AI opnieuw instellen.",
"disclaimer_7": "U accepteert de risico's zelf.",
"confirm_title": "Weet u zeker dat u wilt doorgaan?",
"confirm_1": "Deze actie verwijdert alle Cursor AI-instellingen,",
"confirm_2": "configuratie en cachegegevens. Deze actie is niet ongedaan te maken.",
"confirm_3": "Uw codebestanden **worden niet** beïnvloed, de tool is bedoeld om",
"confirm_4": "Alleen gericht op Cursor AI-editorbestanden en proefperiodecontrolemechanisme.",
"confirm_5": "Andere systemtoepassingen worden niet beïnvloed.",
"confirm_6": "Na het uitvoeren van deze tool moet u Cursor AI opnieuw instellen.",
"confirm_7": "U accepteert de risico's zelf.",
"invalid_choice": "Ongeldige keuze. Voer 'Y' of 'n' in.",
"skipped_for_safety": "Uit veiligheidsoverwegingen overgeslagen (niet Cursor-gerelateerd): {path}",
"deleted": "Verwijderd: {path}",
"error_deleting": "Verwijdering van {path} mislukt: {error}",
"not_found": "Bestand niet gevonden: {path}",
"resetting_machine_id": "Machine-ID resetten om proefperiode te omzeilen...",
"created_machine_id": "Nieuwe machine-ID gemaakt: {path}",
"error_creating_machine_id": "Machine-ID-bestand {path} aanmaken mislukt: {error}",
"error_searching": "Fout bij het zoeken naar bestand {path}: {error}",
"created_extended_trial_info": "Nieuwe uitgebreide proefperiode-informatie gemaakt: {path}",
"error_creating_trial_info": "Fout bij het aanmaken van proefperiode-informatiebestand {path}: {error}",
"resetting_cursor_ai_editor": "Cursor AI-editor resetten... Wacht even.",
"reset_cancelled": "Reset geannuleerd, geen wijzigingen aangebracht.",
"windows_machine_id_modification_skipped": "Windows machine-ID-aanpassing overgeslagen: {error}",
"linux_machine_id_modification_skipped": "Linux machine-id-aanpassing overgeslagen: {error}",
"note_complete_machine_id_reset_may_require_running_as_administrator": "Opmerking: Compleet machine-ID-reset kan vereisen dat u als beheerder uitvoert",
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Opmerking: Compleet systeem machine-ID-reset kan vereisen dat u sudo-rechten hebt",
"windows_registry_instructions": "📝 Opmerking: Compleet machine-ID-reset kan vereisen dat u als beheerder uitvoert",
"windows_registry_instructions_2": " Run 'regedit' en zoek naar de sleutels 'Cursor' of 'CursorAI' in HKEY_CURRENT_USER\\Software\\ en verwijder ze.\n",
"reset_log_1": "Cursor AI is volledig hersteld en heeft de proefperiode omzeild!",
"reset_log_2": "Start het systeem opnieuw om de wijzigingen te activeren.",
"reset_log_3": "U moet Cursor AI opnieuw installeren, er zou nu een nieuwe proefperiode moeten zijn.",
"reset_log_4": "Voor de beste resultaten raden we aan ook:",
"reset_log_5": "Nieuwe proefperiode registreren met een ander e-mailadres",
"reset_log_6": "Als mogelijk, VPN gebruiken om IP-adres te wijzigen",
"reset_log_7": "Voordat u naar de Cursor AI-website gaat, verwijdert u de cookies en cache van uw browser",
"reset_log_8": "Als het nog steeds niet werkt, probeert u Cursor AI op een andere locatie te installeren",
"reset_log_9": "Als u eventuele problemen ondervindt, stuurt u een probleem naar de Github Issue Tracker: https://github.com/yeongpin/cursor-free-vip/issues",
"unexpected_error": "Onverwachte fout: {error}",
"report_issue": "Rapporteer dit probleem op de Github Issue Tracker: https://github.com/yeongpin/cursor-free-vip/issues",
"keyboard_interrupt": "Gebruiker heeft proces afgebroken, afsluiten...",
"return_to_main_menu": "Terug naar hoofdmenu...",
"process_interrupted": "Proces afgebroken, afsluiten...",
"press_enter_to_return_to_main_menu": "Druk op Enter om terug te gaan naar het hoofdmenu...",
"removing_known": "Het verwijderen van bekende proefperiode- en licentiebestanden...",
"performing_deep_scan": "Een diepe scan wordt uitgevoerd om andere proefperiode- en licentiebestanden te vinden...",
"found_additional_potential_license_trial_files": "Er zijn {count} andere potentiële proefperiode- en licentiebestanden gevonden",
"checking_for_electron_localstorage_files": "Controleren op Electron localStorage-bestanden...",
"no_additional_license_trial_files_found_in_deep_scan": "Geen andere proefperiode- of licentiebestanden gevonden in diepe scan",
"removing_electron_localstorage_files": "Het verwijderen van Electron localStorage-bestanden...",
"electron_localstorage_files_removed": "Electron localStorage-bestanden verwijderd",
"electron_localstorage_files_removal_error": "Fout bij het verwijderen van Electron localStorage-bestanden: {error}",
"removing_electron_localstorage_files_completed": "Electron localStorage-bestanden verwijderd"
}
}

View File

@@ -20,7 +20,10 @@
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Tiếng Việt"
"vi": "Tiếng Việt",
"nl": "Dutch",
"de": "Germa",
"fr": "French"
},
"quit_cursor": {
"start": "Bắt Đầu Thoát Cursor",
@@ -223,7 +226,7 @@
},
"email": {
"starting_browser": "Đang Khởi Động Trình Duyệt",
"visiting_site": "Đang Truy Cập mail.tm",
"visiting_site": "Đang Truy Cập mail domains",
"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}",
@@ -254,7 +257,8 @@
"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}"
"trying_to_create_email": "Đang cố gắng tạo email: {email}",
"domain_blocked": "Tên Miền Bị Chặn: {domain}"
},
"update": {
"title": "Tắt Tự Động Cập Nhật Cursor",
@@ -279,7 +283,8 @@
"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}"
"development_version": "Phiên Bản Phát Triển {current} > {latest}",
"changelog_title": "Changelog"
},
"totally_reset": {
"title": "Đặt lại hoàn toàn Cursor",

View File

@@ -22,7 +22,10 @@
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Vietnamese"
"vi": "Vietnamese",
"nl": "Dutch",
"de": "German",
"fr": "French"
},
"quit_cursor": {
"start": "开始退出 Cursor",
@@ -221,7 +224,7 @@
},
"email": {
"starting_browser": "启动浏览器",
"visiting_site": "访问 mail.tm",
"visiting_site": "访问 邮箱服务网站",
"create_success": "邮箱创建成功",
"create_failed": "邮箱创建失败",
"create_error": "邮箱创建错误: {error}",
@@ -252,7 +255,8 @@
"blocked_domains_loaded_timeout_error": "加载被屏蔽的域名超时错误: {error}",
"available_domains_loaded": "获取到 {count} 个可用域名",
"domains_filtered": "过滤后剩餘 {count} 個可用域名",
"trying_to_create_email": "尝试创建邮箱: {email}"
"trying_to_create_email": "尝试创建邮箱: {email}",
"domain_blocked": "域名被屏蔽: {domain}"
},
"update": {
"title": "禁用 Cursor 自动更新",
@@ -277,7 +281,8 @@
"update_confirm": "是否要更新到最新版本? (Y/n)",
"update_skipped": "跳过更新。",
"invalid_choice": "选择无效。请输入 'Y' 或 'n'.",
"development_version": "开发版本 {current} > {latest}"
"development_version": "开发版本 {current} > {latest}",
"changelog_title": "更新日志"
},
"totally_reset": {
"title": "完全重置 Cursor",

View File

@@ -20,7 +20,10 @@
"en": "English",
"zh_cn": "简体中文",
"zh_tw": "繁體中文",
"vi": "Vietnamese"
"vi": "Vietnamese",
"nl": "Dutch",
"de": "German",
"fr": "French"
},
"quit_cursor": {
"start": "開始退出 Cursor",
@@ -201,7 +204,7 @@
},
"email": {
"starting_browser": "啟動瀏覽器",
"visiting_site": "訪問 mail.tm",
"visiting_site": "訪問 郵箱網站",
"create_success": "郵箱創建成功",
"create_failed": "郵箱創建失敗",
"create_error": "郵箱創建錯誤: {error}",
@@ -257,7 +260,8 @@
"update_confirm": "是否要更新到最新版本? (Y/n)",
"update_skipped": "跳過更新。",
"invalid_choice": "選擇無效。請輸入 'Y' 或 'n'.",
"development_version": "開發版本 {current} > {latest}"
"development_version": "開發版本 {current} > {latest}",
"changelog_title": "更新日志"
},
"totally_reset": {
"title": "完全重置 Cursor",

51
main.py
View File

@@ -133,6 +133,13 @@ class Translator:
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'
# Try to get language from LANG environment variable as fallback
@@ -143,7 +150,12 @@ class Translator:
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'
return 'en'
except:
@@ -305,6 +317,43 @@ def check_latest_version():
if is_newer_version_available:
print(f"\n{Fore.YELLOW}{EMOJI['INFO']} {translator.get('updater.new_version_available', current=version, latest=latest_version)}{Style.RESET_ALL}")
# get and show changelog
try:
changelog_url = "https://raw.githubusercontent.com/yeongpin/cursor-free-vip/main/CHANGELOG.md"
changelog_response = requests.get(changelog_url, timeout=10)
if changelog_response.status_code == 200:
changelog_content = changelog_response.text
# get latest version changelog
latest_version_pattern = f"## v{latest_version}"
changelog_sections = changelog_content.split("## v")
latest_changes = None
for section in changelog_sections:
if section.startswith(latest_version):
latest_changes = section
break
if latest_changes:
print(f"\n{Fore.CYAN}{'' * 40}{Style.RESET_ALL}")
print(f"{Fore.CYAN}{translator.get('updater.changelog_title')}:{Style.RESET_ALL}")
# show changelog content (max 10 lines)
changes_lines = latest_changes.strip().split('\n')
for i, line in enumerate(changes_lines[1:11]): # skip version number line, max 10 lines
if line.strip():
print(f"{Fore.WHITE}{line.strip()}{Style.RESET_ALL}")
# if changelog more than 10 lines, show ellipsis
if len(changes_lines) > 11:
print(f"{Fore.WHITE}...{Style.RESET_ALL}")
print(f"{Fore.CYAN}{'' * 40}{Style.RESET_ALL}")
except Exception as changelog_error:
# get changelog failed
pass
# Ask user if they want to update
while True:
choice = input(f"\n{EMOJI['ARROW']} {Fore.CYAN}{translator.get('updater.update_confirm', choices='Y/n')}: {Style.RESET_ALL}").lower()

View File

@@ -6,6 +6,7 @@ from colorama import Fore, Style, init
import requests
import random
import string
from utils import get_random_wait_time
# Initialize colorama
init()
@@ -13,17 +14,8 @@ init()
class NewTempEmail:
def __init__(self, translator=None):
self.translator = translator
# Randomly choose between mail.tm and mail.gw
self.services = [
{"name": "mail.tm", "api_url": "https://api.mail.tm"},
{"name": "mail.gw", "api_url": "https://api.mail.gw"}
]
self.selected_service = random.choice(self.services)
self.api_url = self.selected_service["api_url"]
self.token = None
self.email = None
self.password = None
self.blocked_domains = self.get_blocked_domains()
self.page = None
self.setup_browser()
def get_blocked_domains(self):
"""Get blocked domains list"""
@@ -38,12 +30,37 @@ class NewTempEmail:
else:
print(f"{Fore.CYAN} 已加载 {len(domains)} 个被屏蔽的域名{Style.RESET_ALL}")
return domains
return []
return self._load_local_blocked_domains()
except Exception as e:
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.blocked_domains_error', error=str(e))}{Style.RESET_ALL}")
else:
print(f"{Fore.YELLOW}⚠️ 获取被屏蔽域名列表失败: {str(e)}{Style.RESET_ALL}")
return self._load_local_blocked_domains()
def _load_local_blocked_domains(self):
"""Load blocked domains from local file as fallback"""
try:
local_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "block_domain.txt")
if os.path.exists(local_path):
with open(local_path, 'r', encoding='utf-8') as f:
domains = [line.strip() for line in f.readlines() if line.strip()]
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.local_blocked_domains_loaded', count=len(domains))}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 已从本地加载 {len(domains)} 个被屏蔽的域名{Style.RESET_ALL}")
return domains
else:
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.local_blocked_domains_not_found')}{Style.RESET_ALL}")
else:
print(f"{Fore.YELLOW}⚠️ 本地被屏蔽域名文件不存在{Style.RESET_ALL}")
return []
except Exception as e:
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.local_blocked_domains_error', error=str(e))}{Style.RESET_ALL}")
else:
print(f"{Fore.YELLOW}⚠️ 读取本地被屏蔽域名文件失败: {str(e)}{Style.RESET_ALL}")
return []
def exclude_blocked_domains(self, domains):
@@ -65,184 +82,132 @@ class NewTempEmail:
return filtered_domains
def _generate_credentials(self):
"""generate random username and password"""
username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
password = ''.join(random.choices(string.ascii_letters + string.digits + string.punctuation, k=12))
return username, password
def create_email(self):
"""create temporary email"""
max_retries = 3 # Maximum number of retries
attempt = 0 # Current attempt count
def get_extension_block(self):
"""获取插件路径"""
root_dir = os.getcwd()
extension_path = os.path.join(root_dir, "PBlock")
while attempt < max_retries:
attempt += 1
if hasattr(sys, "_MEIPASS"):
extension_path = os.path.join(sys._MEIPASS, "PBlock")
if not os.path.exists(extension_path):
raise FileNotFoundError(f"插件不存在: {extension_path}")
return extension_path
def setup_browser(self):
"""设置浏览器"""
try:
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.starting_browser')}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 正在启动浏览器...{Style.RESET_ALL}")
# 创建浏览器选项
co = ChromiumOptions()
co.set_argument("--headless=new")
co.auto_port() # 自动设置端口
# 加载 uBlock 插件
try:
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.visiting_site').replace('mail.tm', self.selected_service['name'])}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 正在访问 {self.selected_service['name']}...{Style.RESET_ALL}")
# Get available domain list
try:
domains_response = requests.get(f"{self.api_url}/domains", timeout=10)
if domains_response.status_code != 200:
print(f"{Fore.RED}{self.translator.get('email.domains_list_error', error=domains_response.status_code)}{Style.RESET_ALL}")
print(f"{Fore.RED}{self.translator.get('email.domains_list_error', error=domains_response.text)}{Style.RESET_ALL}")
raise Exception(f"{self.translator.get('email.failed_to_get_available_domains') if self.translator else 'Failed to get available domains'}")
domains = domains_response.json()["hydra:member"]
print(f"{Fore.CYAN} {self.translator.get('email.available_domains_loaded', count=len(domains))}{Style.RESET_ALL}")
if not domains:
raise Exception(f"{self.translator.get('email.no_available_domains') if self.translator else '没有可用域名'}")
except Exception as e:
print(f"{Fore.RED}❌ 获取域名列表时出错: {str(e)}{Style.RESET_ALL}")
raise
# Exclude blocked domains
try:
filtered_domains = self.exclude_blocked_domains(domains)
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.domains_filtered', count=len(filtered_domains))}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 过滤后剩余 {len(filtered_domains)} 个可用域名{Style.RESET_ALL}")
if not filtered_domains:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.all_domains_blocked')}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 所有域名都被屏蔽了,尝试切换服务{Style.RESET_ALL}")
# Switch to another service
for service in self.services:
if service["api_url"] != self.api_url:
self.selected_service = service
self.api_url = service["api_url"]
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.switching_service', service=service['name'])}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 切换到 {service['name']} 服务{Style.RESET_ALL}")
return self.create_email() # Recursively call
raise Exception(f"{self.translator.get('email.no_available_domains_after_filtering') if self.translator else '过滤后没有可用域名'}")
except Exception as e:
print(f"{Fore.RED}❌ 过滤域名时出错: {str(e)}{Style.RESET_ALL}")
raise
# Generate random username and password
try:
username, password = self._generate_credentials()
self.password = password
# Create email account
selected_domain = filtered_domains[0]['domain']
email = f"{username}@{selected_domain}"
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.trying_to_create_email', email=email)}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 尝试创建邮箱: {email}{Style.RESET_ALL}")
account_data = {
"address": email,
"password": password
}
except Exception as e:
print(f"{Fore.RED}❌ 生成凭据时出错: {str(e)}{Style.RESET_ALL}")
raise
# Create account
try:
create_response = requests.post(f"{self.api_url}/accounts", json=account_data, timeout=15)
if create_response.status_code != 201:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.failed_to_create_account', error=create_response.status_code)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 创建账户失败: 状态码 {create_response.status_code}{Style.RESET_ALL}")
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.failed_to_create_account', error=create_response.text)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 响应内容: {create_response.text}{Style.RESET_ALL}")
# If it's a domain problem, try the next available domain
if len(filtered_domains) > 1 and ("domain" in create_response.text.lower() or "address" in create_response.text.lower()):
print(f"{Fore.YELLOW}⚠️ 尝试使用下一个可用域名...{Style.RESET_ALL}")
# Add current domain to blocked list
if selected_domain not in self.blocked_domains:
self.blocked_domains.append(selected_domain)
# Recursively call yourself
return self.create_email()
raise Exception(f"{self.translator.get('email.failed_to_create_account') if self.translator else '创建账户失败'}")
except Exception as e:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.failed_to_create_account', error=str(e))}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 创建账户时出错: {str(e)}{Style.RESET_ALL}")
raise
# Get access token
try:
token_data = {
"address": email,
"password": password
}
token_response = requests.post(f"{self.api_url}/token", json=token_data, timeout=10)
if token_response.status_code != 200:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.failed_to_get_access_token', error=token_response.status_code)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 获取令牌失败: 状态码 {token_response.status_code}{Style.RESET_ALL}")
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.failed_to_get_access_token', error=token_response.text)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 响应内容: {token_response.text}{Style.RESET_ALL}")
raise Exception(f"{self.translator.get('email.failed_to_get_access_token') if self.translator else '获取访问令牌失败'}")
self.token = token_response.json()["token"]
self.email = email
except Exception as e:
print(f"{Fore.RED}❌ 获取令牌时出错: {str(e)}{Style.RESET_ALL}")
raise
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.create_success')}: {email}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 创建邮箱成功: {email}{Style.RESET_ALL}")
return email
extension_path = self.get_extension_block()
co.set_argument("--allow-extensions-in-incognito")
co.add_extension(extension_path)
except Exception as e:
if attempt < max_retries:
print(f"{Fore.YELLOW}⚠️ 尝试重新创建邮箱... (尝试 {attempt}/{max_retries}){Style.RESET_ALL}")
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.extension_load_error')}: {str(e)}{Style.RESET_ALL}")
else:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.create_error')}: {str(e)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 创建邮箱出错: {str(e)}{Style.RESET_ALL}")
return None
print(f"{Fore.YELLOW}⚠️ 加载插件失败: {str(e)}{Style.RESET_ALL}")
self.page = ChromiumPage(co)
return True
except Exception as e:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.browser_start_error')}: {str(e)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 启动浏览器失败: {str(e)}{Style.RESET_ALL}")
return False
def create_email(self):
"""创建临时邮箱"""
try:
if self.translator:
print(f"{Fore.CYAN} {self.translator.get('email.visiting_site')}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN} 正在访问 smailpro.com...{Style.RESET_ALL}")
# 加载被屏蔽域名列表
self.blocked_domains = self.get_blocked_domains()
# 访问网站
self.page.get("https://smailpro.com/")
time.sleep(2)
# 点击创建邮箱按钮
create_button = self.page.ele('xpath://button[@title="Create temporary email"]')
if create_button:
create_button.click()
time.sleep(1)
# 点击弹窗中的 Create 按钮
modal_create_button = self.page.ele('xpath://button[contains(text(), "Create")]')
if modal_create_button:
modal_create_button.click()
time.sleep(2)
# 获取邮箱地址 - 修改选择器
email_div = self.page.ele('xpath://div[@class="text-base sm:text-lg md:text-xl text-gray-700"]')
if email_div:
email = email_div.text.strip()
if '@' in email: # 验证是否是有效的邮箱地址
# 检查域名是否被屏蔽
domain = email.split('@')[1]
if self.blocked_domains and domain in self.blocked_domains:
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.domain_blocked')}: {domain}{Style.RESET_ALL}")
else:
print(f"{Fore.YELLOW}⚠️ 域名已被屏蔽: {domain},尝试重新创建邮箱{Style.RESET_ALL}")
# 重新创建邮箱
return self.create_email()
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.create_success')}: {email}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 创建邮箱成功: {email}{Style.RESET_ALL}")
return email
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.create_failed')}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 创建邮箱失败{Style.RESET_ALL}")
return None
except Exception as e:
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.create_error')}: {str(e)}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}❌ 创建邮箱出错: {str(e)}{Style.RESET_ALL}")
return None
def close(self):
"""close browser"""
"""关闭浏览器"""
if self.page:
self.page.quit()
def refresh_inbox(self):
"""refresh inbox"""
"""刷新邮箱"""
try:
if self.translator:
print(f"{Fore.CYAN}🔄 {self.translator.get('email.refreshing')}{Style.RESET_ALL}")
else:
print(f"{Fore.CYAN}🔄 正在刷新邮箱...{Style.RESET_ALL}")
# Use API to get latest email
headers = {"Authorization": f"Bearer {self.token}"}
response = requests.get(f"{self.api_url}/messages", headers=headers)
if response.status_code == 200:
# 点击刷新按钮
refresh_button = self.page.ele('xpath://button[@id="refresh"]')
if refresh_button:
refresh_button.click()
time.sleep(2) # 等待刷新完成
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.refresh_success')}{Style.RESET_ALL}")
else:
@@ -250,9 +215,9 @@ class NewTempEmail:
return True
if self.translator:
print(f"{Fore.RED}{self.translator.get('email.refresh_failed')}{Style.RESET_ALL}")
print(f"{Fore.RED}{self.translator.get('email.refresh_button_not_found')}{Style.RESET_ALL}")
else:
print(f"{Fore.RED}刷新邮箱失败{Style.RESET_ALL}")
print(f"{Fore.RED}未找到刷新按钮{Style.RESET_ALL}")
return False
except Exception as e:
@@ -263,26 +228,19 @@ class NewTempEmail:
return False
def check_for_cursor_email(self):
"""Check if there is a Cursor verification email"""
"""检查是否有 Cursor 的验证邮件"""
try:
# Use API to get email list
headers = {"Authorization": f"Bearer {self.token}"}
response = requests.get(f"{self.api_url}/messages", headers=headers)
if response.status_code == 200:
messages = response.json()["hydra:member"]
for message in messages:
if message["from"]["address"] == "no-reply@cursor.sh" and "Verify your email address" in message["subject"]:
# Get email content
message_id = message["id"]
message_response = requests.get(f"{self.api_url}/messages/{message_id}", headers=headers)
if message_response.status_code == 200:
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.verification_found')}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 找到验证邮件{Style.RESET_ALL}")
return True
# 查找验证邮件 - 使用更精确的选择器
email_div = self.page.ele('xpath://div[contains(@class, "p-2") and contains(@class, "cursor-pointer") and contains(@class, "bg-white") and contains(@class, "shadow") and .//b[text()="no-reply@cursor.sh"] and .//span[text()="Verify your email address"]]')
if email_div:
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.verification_found')}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 找到验证邮件{Style.RESET_ALL}")
# 使用 JavaScript 点击元素
self.page.run_js('arguments[0].click()', email_div)
time.sleep(2) # 等待邮件内容加载
return True
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.verification_not_found')}{Style.RESET_ALL}")
else:
@@ -297,35 +255,18 @@ class NewTempEmail:
return False
def get_verification_code(self):
"""get verification code"""
"""获取验证码"""
try:
# Use API to get email list
headers = {"Authorization": f"Bearer {self.token}"}
response = requests.get(f"{self.api_url}/messages", headers=headers)
if response.status_code == 200:
messages = response.json()["hydra:member"]
for message in messages:
if message["from"]["address"] == "no-reply@cursor.sh" and "Verify your email address" in message["subject"]:
# Get email content
message_id = message["id"]
message_response = requests.get(f"{self.api_url}/messages/{message_id}", headers=headers)
if message_response.status_code == 200:
# Extract verification code from email content
email_content = message_response.json()["text"]
# Find 6-digit verification code
import re
code_match = re.search(r'\b\d{6}\b', email_content)
if code_match:
code = code_match.group(0)
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.verification_code_found')}: {code}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 获取验证码成功: {code}{Style.RESET_ALL}")
return code
# 查找验证码元素
code_element = self.page.ele('xpath://td//div[contains(@style, "font-size:28px") and contains(@style, "letter-spacing:2px")]')
if code_element:
code = code_element.text.strip()
if code.isdigit() and len(code) == 6:
if self.translator:
print(f"{Fore.GREEN}{self.translator.get('email.verification_code_found')}: {code}{Style.RESET_ALL}")
else:
print(f"{Fore.GREEN}✅ 获取验证码成功: {code}{Style.RESET_ALL}")
return code
if self.translator:
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.verification_code_not_found')}{Style.RESET_ALL}")
else:
@@ -350,7 +291,7 @@ def main(translator=None):
else:
print(f"\n{Fore.CYAN}📧 临时邮箱地址: {email}{Style.RESET_ALL}")
# Test refresh function
# 测试刷新功能
while True:
if translator:
choice = input(f"\n{translator.get('email.refresh_prompt')}: ").lower()
@@ -365,4 +306,4 @@ def main(translator=None):
temp_email.close()
if __name__ == "__main__":
main()
main()