mirror of
https://git.axenov.dev/mirrors/cursor-free-vip.git
synced 2025-12-27 14:10:38 +03:00
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47e4a752a3 | ||
|
|
bd254cb43c | ||
|
|
b5d50ac15a | ||
|
|
dd190fac8e | ||
|
|
7971b6449e | ||
|
|
e58acce44e | ||
|
|
dc8cbca8ce | ||
|
|
2385cc2b3f | ||
|
|
52348d565d | ||
|
|
93f4f05ac4 | ||
|
|
869f1e5225 | ||
|
|
f6c958ccbb | ||
|
|
8fd4235fba | ||
|
|
5d3439a7d8 | ||
|
|
684323e328 | ||
|
|
8115a0b397 | ||
|
|
cca8ba1ae7 | ||
|
|
a392c8cc27 | ||
|
|
63209d6ed6 | ||
|
|
cbdd4fae4a | ||
|
|
414b5a7837 | ||
|
|
cba470344f | ||
|
|
12a3a522be | ||
|
|
6346059916 | ||
|
|
ab8489cdb9 | ||
|
|
bcb3565b9e | ||
|
|
c30e7dc3df | ||
|
|
aad19d89e4 | ||
|
|
4eac8a9e0e | ||
|
|
fd2da5d701 | ||
|
|
a7433ec032 | ||
|
|
bef2162509 | ||
|
|
eb6a5d5ac7 | ||
|
|
17212081ae | ||
|
|
5544a78f6f | ||
|
|
415da78768 |
85
CHANGELOG.md
85
CHANGELOG.md
@@ -1,6 +1,89 @@
|
||||
# Change Log
|
||||
|
||||
## v1.7.10 ( Pre - Release 版本 )
|
||||
## v1.7.14
|
||||
1. Added a Russian locale to program, fixed a typo in readme.md. Also translated other files |
|
||||
為程式新增了俄語語系,修正了 readme.md 的拼寫錯誤,並翻譯了其他文件。
|
||||
|
||||
2. Changing the directory from ~/.config/Cursor to ~/.config/cursor |
|
||||
將目錄從 `~/.config/Cursor` 更改為 `~/.config/cursor`。
|
||||
|
||||
3. Changing the filename from machineId to machineid |
|
||||
將檔案名稱從 `machineId` 更改為 `machineid`。
|
||||
|
||||
4. Updated all related paths in: |
|
||||
更新了以下檔案中的相關路徑:
|
||||
- `reset_machine_manual.py`
|
||||
- `config.py`
|
||||
|
||||
5. Added Linux path note in README.md |
|
||||
在 `README.md` 中新增了 Linux 路徑的說明。
|
||||
|
||||
6. These changes align with Linux filesystem conventions and fix issues with Chrome/Chromium integration |
|
||||
這些變更符合 Linux 文件系統的規範,並修復了與 Chrome/Chromium 整合的問題。
|
||||
|
||||
**#337**
|
||||
|
||||
7. This PR adds retry logic to handle the 'Can't verify the user is human' error during registration |
|
||||
此 PR 新增了重試機制,以處理註冊時的「無法驗證用戶是否為人類」錯誤。
|
||||
|
||||
8. Added max 5 retries for form submission when human verification fails |
|
||||
當人類驗證失敗時,最多允許 5 次表單提交重試。
|
||||
|
||||
9. Added random delays between retries (2-4 seconds) |
|
||||
在重試之間隨機延遲 2-4 秒。
|
||||
|
||||
10. Enhanced browser fingerprint randomization to better bypass detection |
|
||||
增強了瀏覽器指紋的隨機性,以更好地繞過檢測。
|
||||
|
||||
11. Added new translation strings for retry status messages |
|
||||
新增了重試狀態訊息的翻譯字串。
|
||||
|
||||
12. Improved error handling and user feedback |
|
||||
改進了錯誤處理和用戶回饋機制。
|
||||
|
||||
13. The changes ensure a more robust registration process by automatically retrying when human verification fails, while maintaining human-like behavior through randomized delays and improved browser fingerprinting |
|
||||
這些變更確保了更穩定的註冊流程,透過自動重試機制處理人類驗證失敗的情況,同時透過隨機延遲與增強的瀏覽器指紋技術,維持類似人類的行為模式。
|
||||
|
||||
## v1.7.13
|
||||
1. Added _delete_current_account method to handle account deletion via API | 新增 _delete_current_account 方法,透過 API 處理帳號刪除
|
||||
|
||||
2. Updated account reset logic to use the appropriate auth method based on auth_type | 更新帳號重置邏輯,根據 auth_type 選擇適當的驗證方式
|
||||
|
||||
3. Maintained existing Google OAuth reset functionality | 維持現有的 Google OAuth 重置功能
|
||||
|
||||
4. Added proper error handling for account deletion failures | 新增帳號刪除失敗時的錯誤處理
|
||||
|
||||
5. Ensures GitHub authentication maintains its flow when resetting accounts | 確保 GitHub 認證在帳號重置時保持正常流程
|
||||
|
||||
6. The _delete_current_account method makes a POST request to https://www.cursor.com/api/dashboard/delete-account |
|
||||
_delete_current_account 方法會發送 POST 請求至 https://www.cursor.com/api/dashboard/delete-account
|
||||
|
||||
7. After successful deletion, redirects back to the authentication page | 刪除成功後,會導回驗證頁面
|
||||
|
||||
8. Uses Promise-based JavaScript for reliable API communication | 使用 Promise-based JavaScript,確保 API 通訊穩定
|
||||
|
||||
9. Includes proper error handling and logging | 包含適當的錯誤處理與日誌記錄
|
||||
|
||||
10. Add Brazilian Portuguese language | 新增巴西葡萄牙語
|
||||
|
||||
|
||||
## 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 | 增加完全重置多語言支持
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Cursor's configuration.
|
||||
這是一個自動化工具,自動註冊,支持 Windows 和 macOS 系統,完成 Auth 驗證,重置 Cursor 的配置。
|
||||
|
||||
<p align="center">
|
||||
<img src="./images/new_2025-02-27_10-42-44.png" alt="new" width="400" style="border-radius: 6px;"/><br>
|
||||
<img src="./images/new_2025-03-19_00-19-09.png" alt="new" width="400" style="border-radius: 6px;"/><br>
|
||||
</p>
|
||||
|
||||
##### If you don't have Google Chrome, you can download it from [here](https://www.google.com/intl/en_pk/chrome/)
|
||||
@@ -121,6 +121,7 @@ storage_path = /Users/username/Library/Application Support/Cursor/User/globalSto
|
||||
sqlite_path = /Users/username/Library/Application Support/Cursor/User/globalStorage/state.vscdb
|
||||
# Machine ID Path | 機器ID路徑
|
||||
machine_id_path = /Users/username/Library/Application Support/Cursor/machineId
|
||||
# For Linux users: ~/.config/cursor/machineid
|
||||
|
||||
[Timing]
|
||||
# Min Random Time | 最小隨機時間
|
||||
@@ -168,7 +169,7 @@ max_timeout = 160
|
||||
| 如果遇到權限問題,請確保: | 此腳本以管理員身份運行 |
|
||||
|:--------------------------------------------------:|:------------------------------------------------:|
|
||||
| If you encounter permission issues, please ensure: | This script is run with administrator privileges |
|
||||
|
||||
| Error 'User is not authorized' | This means your account was banned for using temporary (disposal) mail. Ensure using a non-temporary mail service |
|
||||
## 🤩 Contribution | 貢獻
|
||||
|
||||
歡迎提交 Issue 和 Pull Request!
|
||||
|
||||
@@ -3,3 +3,16 @@ famamail.com
|
||||
2925.com
|
||||
indigobook.com
|
||||
teihu.com
|
||||
raleigh-construction.com
|
||||
pastryofistanbul.com
|
||||
linshiyouxiang.net
|
||||
Mohmal.com
|
||||
pusmail.com
|
||||
questtechsystems.com
|
||||
ikomail.com
|
||||
ofanda.com
|
||||
pusmail.com
|
||||
ikomail.com
|
||||
mailpull.com
|
||||
drewzen.com
|
||||
begemail.com
|
||||
|
||||
@@ -33,7 +33,8 @@ a = Analysis(
|
||||
('new_tempemail.py', '.'),
|
||||
('quit_cursor.py', '.'),
|
||||
('cursor_register_manual.py', '.'),
|
||||
('.env', '.')
|
||||
('.env', '.'),
|
||||
('block_domain.txt', '.')
|
||||
],
|
||||
hiddenimports=[
|
||||
'cursor_auth',
|
||||
|
||||
@@ -64,9 +64,9 @@ def setup_config(translator=None):
|
||||
actual_home = f"/home/{sudo_user}" if sudo_user else os.path.expanduser("~")
|
||||
|
||||
default_config['LinuxPaths'] = {
|
||||
'storage_path': os.path.abspath(os.path.join(actual_home, ".config/Cursor/User/globalStorage/storage.json")),
|
||||
'sqlite_path': os.path.abspath(os.path.join(actual_home, ".config/Cursor/User/globalStorage/state.vscdb")),
|
||||
'machine_id_path': os.path.expanduser("~/.config/Cursor/machineId"),
|
||||
'storage_path': os.path.abspath(os.path.join(actual_home, ".config/cursor/User/globalStorage/storage.json")),
|
||||
'sqlite_path': os.path.abspath(os.path.join(actual_home, ".config/cursor/User/globalStorage/state.vscdb")),
|
||||
'machine_id_path': os.path.expanduser("~/.config/cursor/machineid"),
|
||||
'cursor_path': get_linux_cursor_path(),
|
||||
'updater_path': os.path.expanduser("~/.config/cursor-updater")
|
||||
}
|
||||
|
||||
BIN
images/new_2025-03-19_00-19-09.png
Normal file
BIN
images/new_2025-03-19_00-19-09.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
374
locales/de.json
Normal file
374
locales/de.json
Normal file
@@ -0,0 +1,374 @@
|
||||
{
|
||||
"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": "Englisch",
|
||||
"zh_cn": "Vereinfachtes Chinesisch",
|
||||
"zh_tw": "Traditionelles Chinesisch",
|
||||
"vi": "Vietnamesisch",
|
||||
"nl": "Niederländisch",
|
||||
"de": "Deutsch",
|
||||
"fr": "Französisch",
|
||||
"pt": "Portugiesisch",
|
||||
"ru": "Russisch"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,12 @@
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"vi": "Vietnamese",
|
||||
"nl": "Dutch",
|
||||
"de": "German",
|
||||
"fr": "French",
|
||||
"pt": "Portuguese",
|
||||
"ru": "Russian"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Start Quitting Cursor",
|
||||
@@ -167,7 +172,9 @@
|
||||
"password_submitted": "Password Submitted",
|
||||
"total_usage": "Total Usage: {usage}",
|
||||
"setting_on_password": "Setting Password",
|
||||
"getting_code": "Getting Verification Code, Will Try in 60s"
|
||||
"getting_code": "Getting Verification Code, Will Try in 60s",
|
||||
"human_verify_error": "Can't verify the user is human. Retrying...",
|
||||
"max_retries_reached": "Maximum retry attempts reached. Registration failed."
|
||||
},
|
||||
"auth": {
|
||||
"title": "Cursor Auth Manager",
|
||||
@@ -225,7 +232,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 +263,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 +289,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",
|
||||
|
||||
374
locales/fr.json
Normal file
374
locales/fr.json
Normal file
@@ -0,0 +1,374 @@
|
||||
{
|
||||
"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": "Anglais",
|
||||
"zh_cn": "Chinois simplifié",
|
||||
"zh_tw": "Chinois traditionnel",
|
||||
"vi": "Vietnamien",
|
||||
"nl": "Néerlandais",
|
||||
"de": "Allemand",
|
||||
"fr": "Français",
|
||||
"pt": "Portugais",
|
||||
"ru": "Russe"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
374
locales/nl.json
Normal file
374
locales/nl.json
Normal file
@@ -0,0 +1,374 @@
|
||||
{
|
||||
"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": "Engels",
|
||||
"zh_cn": "Vereenvoudigd Chinees",
|
||||
"zh_tw": "Traditioneel Chinees",
|
||||
"vi": "Vietnamees",
|
||||
"nl": "Nederlands",
|
||||
"de": "Duits",
|
||||
"fr": "Frans",
|
||||
"pt": "Portugees",
|
||||
"ru": "Russisch"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
383
locales/pt.json
Normal file
383
locales/pt.json
Normal file
@@ -0,0 +1,383 @@
|
||||
{
|
||||
"menu": {
|
||||
"title": "Opções Disponíveis",
|
||||
"exit": "Sair do Programa",
|
||||
"reset": "Redefinir ID da Máquina",
|
||||
"register": "Registrar Nova Conta no Cursor",
|
||||
"register_google": "Registrar com Conta do Google",
|
||||
"register_github": "Registrar com Conta do GitHub",
|
||||
"register_manual": "Registrar Cursor com E-mail Personalizado",
|
||||
"quit": "Fechar Cursor",
|
||||
"select_language": "Alterar Idioma",
|
||||
"input_choice": "Por favor, insira sua escolha ({choices})",
|
||||
"invalid_choice": "Seleção inválida. Insira um número de {choices}",
|
||||
"program_terminated": "Programa encerrado pelo usuário",
|
||||
"error_occurred": "Ocorreu um erro: {error}. Por favor, tente novamente",
|
||||
"press_enter": "Pressione Enter para Sair",
|
||||
"disable_auto_update": "Desativar Atualização Automática do Cursor",
|
||||
"lifetime_access_enabled": "ACESSO VITALÍCIO HABILITADO",
|
||||
"totally_reset": "Redefinir Cursor Completamente"
|
||||
},
|
||||
"languages": {
|
||||
"en": "Inglês",
|
||||
"zh_cn": "Chinês Simplificado",
|
||||
"zh_tw": "Chinês Tradicional",
|
||||
"vi": "Vietnamita",
|
||||
"nl": "Holandês",
|
||||
"de": "Alemão",
|
||||
"fr": "Francês",
|
||||
"pt": "Português do Brasil",
|
||||
"ru": "Russo"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Iniciando fechamento do Cursor",
|
||||
"no_process": "Nenhum processo do Cursor em execução",
|
||||
"terminating": "Encerrando processo {pid}",
|
||||
"waiting": "Aguardando o processo ser finalizado",
|
||||
"success": "Todos os processos do Cursor foram encerrados",
|
||||
"timeout": "Tempo limite do processo: {pids}",
|
||||
"error": "Ocorreu um erro: {error}"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Ferramenta de Redefinição de ID da Máquina",
|
||||
"checking": "Verificando arquivo de configuração",
|
||||
"not_found": "Arquivo de configuração não encontrado",
|
||||
"no_permission": "Não é possível ler ou escrever no arquivo de configuração. Verifique as permissões do arquivo",
|
||||
"reading": "Lendo configuração atual",
|
||||
"creating_backup": "Criando backup da configuração",
|
||||
"backup_exists": "Arquivo de backup já existe, pulando etapa de backup",
|
||||
"generating": "Gerando novo ID da máquina",
|
||||
"saving_json": "Salvando nova configuração no JSON",
|
||||
"success": "ID da Máquina redefinido com sucesso",
|
||||
"new_id": "Novo ID da Máquina",
|
||||
"permission_error": "Erro de permissão: {error}",
|
||||
"run_as_admin": "Tente executar este programa como Administrador",
|
||||
"process_error": "Erro no processo de redefinição: {error}",
|
||||
"updating_sqlite": "Atualizando banco de dados SQLite",
|
||||
"updating_pair": "Atualizando chave-valor",
|
||||
"sqlite_success": "Banco de dados SQLite atualizado com sucesso",
|
||||
"sqlite_error": "Falha na atualização do banco de dados SQLite: {error}",
|
||||
"press_enter": "Pressione Enter para sair",
|
||||
"unsupported_os": "Sistema operacional não suportado: {os}",
|
||||
"linux_path_not_found": "Caminho do Linux não encontrado",
|
||||
"updating_system_ids": "Atualizando IDs do sistema",
|
||||
"system_ids_updated": "IDs do sistema atualizados com sucesso",
|
||||
"system_ids_update_failed": "Falha na atualização dos IDs do sistema: {error}",
|
||||
"windows_guid_updated": "GUID do Windows atualizado com sucesso",
|
||||
"windows_permission_denied": "Permissão negada no Windows",
|
||||
"windows_guid_update_failed": "Falha na atualização do GUID do Windows",
|
||||
"macos_uuid_updated": "UUID do macOS atualizado com sucesso",
|
||||
"plutil_command_failed": "Falha no comando plutil",
|
||||
"start_patching": "Iniciando correção de getMachineId",
|
||||
"macos_uuid_update_failed": "Falha na atualização do UUID do macOS",
|
||||
"current_version": "Versão atual do Cursor: {version}",
|
||||
"patch_completed": "Correção de getMachineId concluída",
|
||||
"patch_failed": "Falha na correção de getMachineId: {error}",
|
||||
"version_check_passed": "Verificação de versão do Cursor aprovada",
|
||||
"file_modified": "Arquivo modificado",
|
||||
"version_less_than_0_45": "Versão do Cursor < 0.45.0, pulando correção de getMachineId",
|
||||
"detecting_version": "Detectando versão do Cursor",
|
||||
"patching_getmachineid": "Corrigindo getMachineId",
|
||||
"version_greater_than_0_45": "Versão do Cursor >= 0.45.0, corrigindo getMachineId",
|
||||
"permission_denied": "Permissão negada: {error}",
|
||||
"backup_created": "Backup criado",
|
||||
"update_success": "Atualização concluída com sucesso",
|
||||
"update_failed": "Falha na atualização: {error}",
|
||||
"windows_machine_guid_updated": "GUID da máquina do Windows atualizado com sucesso",
|
||||
"reading_package_json": "Lendo package.json {path}",
|
||||
"invalid_json_object": "Objeto JSON inválido",
|
||||
"no_version_field": "Campo de versão não encontrado no package.json",
|
||||
"version_field_empty": "Campo de versão está vazio",
|
||||
"invalid_version_format": "Formato de versão inválido: {version}",
|
||||
"found_version": "Versão encontrada: {version}",
|
||||
"version_parse_error": "Erro ao analisar versão: {error}",
|
||||
"package_not_found": "Package.json não encontrado: {path}",
|
||||
"check_version_failed": "Falha ao verificar versão: {error}",
|
||||
"stack_trace": "Rastreamento de pilha",
|
||||
"version_too_low": "Versão do Cursor muito baixa: {version} < 0.45.0"
|
||||
},
|
||||
"register": {
|
||||
"title": "Ferramenta de Registro do Cursor",
|
||||
"start": "Iniciando o processo de registro...",
|
||||
"handling_turnstile": "Processando verificação de segurança...",
|
||||
"retry_verification": "Tentando novamente a verificação...",
|
||||
"detect_turnstile": "Verificando validação de segurança...",
|
||||
"verification_success": "Verificação de segurança bem-sucedida",
|
||||
"starting_browser": "Abrindo navegador...",
|
||||
"form_success": "Formulário enviado com sucesso",
|
||||
"browser_started": "Navegador aberto com sucesso",
|
||||
"waiting_for_second_verification": "Aguardando verificação por e-mail...",
|
||||
"waiting_for_verification_code": "Aguardando código de verificação...",
|
||||
"password_success": "Senha definida com sucesso",
|
||||
"password_error": "Não foi possível definir a senha: {error}. Por favor, tente novamente",
|
||||
"waiting_for_page_load": "Carregando página...",
|
||||
"first_verification_passed": "Verificação inicial bem-sucedida",
|
||||
"mailbox": "Caixa de entrada de e-mail acessada com sucesso",
|
||||
"register_start": "Iniciar Registro",
|
||||
"form_submitted": "Formulário Enviado, Iniciando Verificação...",
|
||||
"filling_form": "Preenchendo Formulário",
|
||||
"visiting_url": "Visitando URL",
|
||||
"basic_info": "Informações básicas enviadas",
|
||||
"handle_turnstile": "Processar Turnstile",
|
||||
"no_turnstile": "Turnstile Não Detectado",
|
||||
"turnstile_passed": "Turnstile Passado",
|
||||
"verification_start": "Iniciando Obtenção do Código de Verificação",
|
||||
"verification_timeout": "Tempo Esgotado para Obter Código de Verificação",
|
||||
"verification_not_found": "Nenhum Código de Verificação Encontrado",
|
||||
"try_get_code": "Tentativa | {attempt} Obter Código de Verificação | Tempo Restante: {time}s",
|
||||
"get_account": "Obtendo Informações da Conta",
|
||||
"get_token": "Obtendo Token da Sessão do Cursor",
|
||||
"token_success": "Token Obtido com Sucesso",
|
||||
"token_attempt": "Tentativa | {attempt} de obter o Token | Tentando novamente em {time}s",
|
||||
"token_max_attempts": "Número máximo de tentativas atingido ({max}) | Falha ao obter o Token",
|
||||
"token_failed": "Falha ao Obter Token: {error}",
|
||||
"account_error": "Falha ao Obter Informações da Conta: {error}",
|
||||
"press_enter": "Pressione Enter para sair",
|
||||
"browser_start": "Iniciando Navegador",
|
||||
"open_mailbox": "Abrindo Página da Caixa de Entrada",
|
||||
"email_error": "Falha ao obter endereço de e-mail",
|
||||
"setup_error": "Erro de configuração do e-mail: {error}",
|
||||
"start_getting_verification_code": "Iniciando obtenção do código de verificação, tentará em 60s",
|
||||
"get_verification_code_timeout": "Tempo Esgotado para Obter Código de Verificação",
|
||||
"get_verification_code_success": "Código de Verificação Obtido com Sucesso",
|
||||
"try_get_verification_code": "Tentativa | {attempt} Obter Código de Verificação | Tempo Restante: {remaining_time}s",
|
||||
"verification_code_filled": "Código de Verificação Preenchido",
|
||||
"login_success_and_jump_to_settings_page": "Login bem-sucedido, indo para a página de configurações",
|
||||
"detect_login_page": "Página de login detectada, iniciando login...",
|
||||
"cursor_registration_completed": "Registro do Cursor Concluído!",
|
||||
"set_password": "Definir Senha",
|
||||
"basic_info_submitted": "Informações Básicas Enviadas",
|
||||
"cursor_auth_info_updated": "Informações de Autenticação do Cursor Atualizadas",
|
||||
"cursor_auth_info_update_failed": "Falha ao Atualizar Informações de Autenticação do Cursor",
|
||||
"reset_machine_id": "Reiniciar ID da Máquina",
|
||||
"account_info_saved": "Informações da Conta Salvas",
|
||||
"save_account_info_failed": "Falha ao Salvar Informações da Conta",
|
||||
"get_email_address": "Obtendo Endereço de E-mail",
|
||||
"update_cursor_auth_info": "Atualizar Informações de Autenticação do Cursor",
|
||||
"register_process_error": "Erro no Processo de Registro: {error}",
|
||||
"setting_password": "Configurando Senha",
|
||||
"manual_code_input": "Inserção Manual do Código",
|
||||
"manual_email_input": "Inserção Manual de E-mail",
|
||||
"password": "Senha",
|
||||
"first_name": "Nome",
|
||||
"last_name": "Sobrenome",
|
||||
"exit_signal": "Sinal para Sair",
|
||||
"email_address": "Endereço de E-mail",
|
||||
"config_created": "Configuração Criada",
|
||||
"verification_failed": "Falha na Verificação",
|
||||
"verification_error": "Erro de Verificação: {error}",
|
||||
"config_option_added": "Opção de Configuração Adicionada: {option}",
|
||||
"config_updated": "Configuração Atualizada",
|
||||
"password_submitted": "Senha Enviada",
|
||||
"total_usage": "Uso Total: {usage}",
|
||||
"setting_on_password": "Configurando Senha",
|
||||
"getting_code": "Obtendo Código de Verificação, Tentará em 60s"
|
||||
},
|
||||
"auth": {
|
||||
"title": "Gerenciador de Autenticação do Cursor",
|
||||
"checking_auth": "Verificando arquivo de autenticação",
|
||||
"auth_not_found": "Arquivo de autenticação não encontrado",
|
||||
"auth_file_error": "Erro no arquivo de autenticação: {error}",
|
||||
"reading_auth": "Lendo arquivo de autenticação",
|
||||
"updating_auth": "Atualizando informações de autenticação",
|
||||
"auth_updated": "Informações de autenticação atualizadas com sucesso",
|
||||
"auth_update_failed": "Falha ao atualizar informações de autenticação: {error}",
|
||||
"auth_file_created": "Arquivo de autenticação criado",
|
||||
"auth_file_create_failed": "Falha ao criar arquivo de autenticação: {error}",
|
||||
"press_enter": "Pressione Enter para sair",
|
||||
"reset_machine_id": "Redefinir ID da máquina",
|
||||
"database_connection_closed": "Conexão com o banco de dados fechada",
|
||||
"database_updated_successfully": "Banco de dados atualizado com sucesso",
|
||||
"connected_to_database": "Conectado ao banco de dados",
|
||||
"updating_pair": "Atualizando par chave-valor",
|
||||
"db_not_found": "Arquivo do banco de dados não encontrado em: {path}",
|
||||
"db_permission_error": "Não é possível acessar o arquivo do banco de dados. Verifique as permissões",
|
||||
"db_connection_error": "Falha ao conectar ao banco de dados: {error}"
|
||||
},
|
||||
"control": {
|
||||
"generate_email": "Gerando novo e-mail",
|
||||
"blocked_domain": "Domínio bloqueado",
|
||||
"select_domain": "Selecionando domínio aleatório",
|
||||
"copy_email": "Copiando endereço de e-mail",
|
||||
"enter_mailbox": "Entrando na caixa de entrada",
|
||||
"refresh_mailbox": "Atualizando caixa de entrada",
|
||||
"check_verification": "Verificando código de verificação",
|
||||
"verification_found": "Código de verificação encontrado",
|
||||
"verification_not_found": "Nenhum código de verificação encontrado",
|
||||
"browser_error": "Erro no controle do navegador: {error}",
|
||||
"navigation_error": "Erro de navegação: {error}",
|
||||
"email_copy_error": "Erro ao copiar e-mail: {error}",
|
||||
"mailbox_error": "Erro na caixa de entrada: {error}",
|
||||
"token_saved_to_file": "Token salvo em cursor_tokens.txt",
|
||||
"navigate_to": "Navegando para {url}",
|
||||
"generate_email_success": "E-mail gerado com sucesso",
|
||||
"select_email_domain": "Selecionar domínio de e-mail",
|
||||
"select_email_domain_success": "Domínio de e-mail selecionado com sucesso",
|
||||
"get_email_name": "Obtendo nome do e-mail",
|
||||
"get_email_name_success": "Nome do e-mail obtido com sucesso",
|
||||
"get_email_address": "Obtendo endereço de e-mail",
|
||||
"get_email_address_success": "Endereço de e-mail obtido com sucesso",
|
||||
"enter_mailbox_success": "Entrada na caixa de entrada bem-sucedida",
|
||||
"found_verification_code": "Código de verificação encontrado",
|
||||
"get_cursor_session_token": "Obtendo token da sessão do Cursor",
|
||||
"get_cursor_session_token_success": "Token da sessão do Cursor obtido com sucesso",
|
||||
"get_cursor_session_token_failed": "Falha ao obter token da sessão do Cursor",
|
||||
"save_token_failed": "Falha ao salvar o token",
|
||||
"database_updated_successfully": "Banco de dados atualizado com sucesso",
|
||||
"database_connection_closed": "Conexão com o banco de dados fechada",
|
||||
"no_valid_verification_code": "Nenhum código de verificação válido"
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "Iniciando navegador",
|
||||
"visiting_site": "Visitando domínios de e-mail",
|
||||
"create_success": "E-mail criado com sucesso",
|
||||
"create_failed": "Falha ao criar e-mail",
|
||||
"create_error": "Erro ao criar e-mail: {error}",
|
||||
"refreshing": "Atualizando e-mail",
|
||||
"refresh_success": "E-mail atualizado com sucesso",
|
||||
"refresh_error": "Erro ao atualizar e-mail: {error}",
|
||||
"refresh_button_not_found": "Botão de atualização não encontrado",
|
||||
"verification_found": "Verificação encontrada",
|
||||
"verification_not_found": "Verificação não encontrada",
|
||||
"verification_error": "Erro na verificação: {error}",
|
||||
"verification_code_found": "Código de verificação encontrado",
|
||||
"verification_code_not_found": "Código de verificação não encontrado",
|
||||
"verification_code_error": "Erro no código de verificação: {error}",
|
||||
"address": "Endereço de e-mail",
|
||||
"all_domains_blocked": "Todos os domínios bloqueados, alternando serviço",
|
||||
"no_available_domains_after_filtering": "Nenhum domínio disponível após filtragem",
|
||||
"switching_service": "Alternando para o serviço {service}",
|
||||
"domains_list_error": "Falha ao obter lista de domínios: {error}",
|
||||
"failed_to_get_available_domains": "Falha ao obter domínios disponíveis",
|
||||
"domains_excluded": "Domínios excluídos: {domains}",
|
||||
"failed_to_create_account": "Falha ao criar conta",
|
||||
"account_creation_error": "Erro na criação da conta: {error}",
|
||||
"blocked_domains": "Domínios bloqueados: {domains}",
|
||||
"blocked_domains_loaded": "Domínios bloqueados carregados: {count}",
|
||||
"blocked_domains_loaded_error": "Erro ao carregar domínios bloqueados: {error}",
|
||||
"blocked_domains_loaded_success": "Domínios bloqueados carregados com sucesso",
|
||||
"blocked_domains_loaded_timeout": "Tempo esgotado ao carregar domínios bloqueados: {timeout}s",
|
||||
"blocked_domains_loaded_timeout_error": "Erro de tempo esgotado ao carregar domínios bloqueados: {error}",
|
||||
"available_domains_loaded": "Domínios disponíveis carregados: {count}",
|
||||
"domains_filtered": "Domínios filtrados: {count}",
|
||||
"trying_to_create_email": "Tentando criar e-mail: {email}",
|
||||
"domain_blocked": "Domínio bloqueado: {domain}"
|
||||
},
|
||||
"update": {
|
||||
"title": "Desativar atualização automática do Cursor",
|
||||
"disable_success": "Atualização automática desativada com sucesso",
|
||||
"disable_failed": "Falha ao desativar atualização automática: {error}",
|
||||
"press_enter": "Pressione Enter para sair",
|
||||
"start_disable": "Iniciando desativação da atualização automática",
|
||||
"killing_processes": "Finalizando processos",
|
||||
"processes_killed": "Processos finalizados",
|
||||
"removing_directory": "Removendo diretório",
|
||||
"directory_removed": "Diretório removido",
|
||||
"creating_block_file": "Criando arquivo de bloqueio",
|
||||
"block_file_created": "Arquivo de bloqueio criado"
|
||||
},
|
||||
"updater": {
|
||||
"checking": "Verificando atualizações...",
|
||||
"new_version_available": "Nova versão disponível! (Atual: {current}, Última: {latest})",
|
||||
"updating": "Atualizando para a última versão. O programa será reiniciado automaticamente.",
|
||||
"up_to_date": "Você está usando a versão mais recente.",
|
||||
"check_failed": "Falha ao verificar atualizações: {error}",
|
||||
"continue_anyway": "Continuando com a versão atual...",
|
||||
"update_confirm": "Deseja atualizar para a última versão? (Y/n)",
|
||||
"update_skipped": "Atualização ignorada.",
|
||||
"invalid_choice": "Escolha inválida. Por favor, digite 'Y' ou 'n'.",
|
||||
"development_version": "Versão de desenvolvimento {current} > {latest}",
|
||||
"changelog_title": "Registro de mudanças"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Redefinir Cursor Completamente",
|
||||
"checking_config": "Verificando Arquivo de Configuração",
|
||||
"config_not_found": "Arquivo de Configuração Não Encontrado",
|
||||
"no_permission": "Não é possível Ler ou Escrever o Arquivo de Configuração, Verifique as Permissões do Arquivo",
|
||||
"reading_config": "Lendo Configuração Atual",
|
||||
"creating_backup": "Criando Backup da Configuração",
|
||||
"backup_exists": "Arquivo de Backup Já Existe, Pulando Etapa de Backup",
|
||||
"generating_new_machine_id": "Gerando Novo ID da Máquina",
|
||||
"saving_new_config": "Salvando Nova Configuração no JSON",
|
||||
"success": "Cursor Redefinido com Sucesso",
|
||||
"error": "Falha ao Redefinir Cursor: {error}",
|
||||
"press_enter": "Pressione Enter para Sair",
|
||||
"reset_machine_id": "Redefinir ID da Máquina",
|
||||
"database_connection_closed": "Conexão com o Banco de Dados Fechada",
|
||||
"database_updated_successfully": "Banco de Dados Atualizado com Sucesso",
|
||||
"connected_to_database": "Conectado ao Banco de Dados",
|
||||
"updating_pair": "Atualizando Par Chave-Valor",
|
||||
"db_not_found": "Arquivo de banco de dados não encontrado em: {path}",
|
||||
"db_permission_error": "Não é possível acessar o arquivo do banco de dados. Verifique as permissões",
|
||||
"db_connection_error": "Falha ao conectar ao banco de dados: {error}",
|
||||
"feature_title": "RECURSOS",
|
||||
"feature_1": "Remoção completa das configurações e preferências do Cursor AI",
|
||||
"feature_2": "Limpa todos os dados em cache, incluindo histórico e prompts de IA",
|
||||
"feature_3": "Redefine o ID da máquina para contornar a detecção de período de teste",
|
||||
"feature_4": "Cria novos identificadores de máquina aleatórios",
|
||||
"feature_5": "Remove extensões e preferências personalizadas",
|
||||
"feature_6": "Redefine informações de período de teste e dados de ativação",
|
||||
"feature_7": "Varredura profunda por arquivos ocultos relacionados à licença e período de teste",
|
||||
"feature_8": "Preserva com segurança arquivos e aplicativos não relacionados ao Cursor",
|
||||
"feature_9": "Compatível com Windows, macOS e Linux",
|
||||
"disclaimer_title": "AVISO",
|
||||
"disclaimer_1": "Esta ferramenta excluirá permanentemente todas as configurações,",
|
||||
"disclaimer_2": "preferências e dados em cache do Cursor AI. Essa ação não pode ser desfeita.",
|
||||
"disclaimer_3": "Seus arquivos de código NÃO serão afetados, e a ferramenta é projetada",
|
||||
"disclaimer_4": "para atingir somente os arquivos do editor Cursor AI e mecanismos de detecção de teste.",
|
||||
"disclaimer_5": "Outros aplicativos em seu sistema não serão afetados.",
|
||||
"disclaimer_6": "Será necessário configurar o Cursor AI novamente após executar esta ferramenta.",
|
||||
"disclaimer_7": "Use por sua conta e risco",
|
||||
"confirm_title": "Tem certeza que deseja prosseguir?",
|
||||
"confirm_1": "Esta ação excluirá todas as configurações do Cursor AI,",
|
||||
"confirm_2": "preferências e dados em cache. Essa ação não pode ser desfeita.",
|
||||
"confirm_3": "Seus arquivos de código NÃO serão afetados, e a ferramenta é projetada",
|
||||
"confirm_4": "para atingir somente os arquivos do editor Cursor AI e mecanismos de detecção de teste.",
|
||||
"confirm_5": "Outros aplicativos em seu sistema não serão afetados.",
|
||||
"confirm_6": "Será necessário configurar o Cursor AI novamente após executar esta ferramenta.",
|
||||
"confirm_7": "Use por sua conta e risco",
|
||||
"invalid_choice": "Por favor, digite 'Y' ou 'n'",
|
||||
"skipped_for_safety": "Ignorado por segurança (não relacionado ao Cursor): {path}",
|
||||
"deleted": "Excluído: {path}",
|
||||
"error_deleting": "Erro ao excluir {path}: {error}",
|
||||
"not_found": "Arquivo não encontrado: {path}",
|
||||
"resetting_machine_id": "Redefinindo identificadores da máquina para contornar a detecção de período de teste...",
|
||||
"created_machine_id": "Novo ID da máquina criado: {path}",
|
||||
"error_creating_machine_id": "Erro ao criar arquivo de ID da máquina {path}: {error}",
|
||||
"error_searching": "Erro ao procurar arquivos em {path}: {error}",
|
||||
"created_extended_trial_info": "Novas informações de período de teste criadas: {path}",
|
||||
"error_creating_trial_info": "Erro ao criar arquivo de informações de teste {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Redefinindo Editor Cursor AI... Por favor, aguarde.",
|
||||
"reset_cancelled": "Redefinição cancelada. Saindo sem realizar alterações.",
|
||||
"windows_machine_id_modification_skipped": "Modificação de ID da máquina no Windows ignorada: {error}",
|
||||
"linux_machine_id_modification_skipped": "Modificação do machine-id do Linux ignorada: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Nota: Redefinir totalmente o ID da máquina pode exigir a execução como administrador",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Nota: Redefinir totalmente o machine-id do sistema pode exigir privilégios sudo",
|
||||
"windows_registry_instructions": "📝 NOTA: Para uma redefinição completa no Windows, talvez você precise também limpar entradas do registro.",
|
||||
"windows_registry_instructions_2": " Execute 'regedit', pesquise chaves contendo 'Cursor' ou 'CursorAI' em HKEY_CURRENT_USER\\Software\\ e exclua-as.\n",
|
||||
"reset_log_1": "Cursor AI foi completamente redefinido e a detecção de teste foi contornada!",
|
||||
"reset_log_2": "Por favor, reinicie o sistema para que as alterações tenham efeito.",
|
||||
"reset_log_3": "Você precisará reinstalar o Cursor AI e deverá ter um novo período de teste disponível.",
|
||||
"reset_log_4": "Para melhores resultados, considere também:",
|
||||
"reset_log_5": "Utilizar um endereço de e-mail diferente ao registrar um novo período de teste",
|
||||
"reset_log_6": "Se disponível, utilizar uma VPN para alterar seu endereço IP",
|
||||
"reset_log_7": "Limpar cookies e cache do navegador antes de acessar o site do Cursor AI",
|
||||
"reset_log_8": "Se os problemas persistirem, tente instalar o Cursor AI em outro local",
|
||||
"reset_log_9": "Se encontrar problemas, abra uma issue no Github em https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"unexpected_error": "Ocorreu um erro inesperado: {error}",
|
||||
"report_issue": "Por favor, relate este problema no Github em https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"keyboard_interrupt": "Processo interrompido pelo usuário. Saindo...",
|
||||
"return_to_main_menu": "Retornando ao menu principal...",
|
||||
"process_interrupted": "Processo interrompido. Saindo...",
|
||||
"press_enter_to_return_to_main_menu": "Pressione Enter para retornar ao menu principal...",
|
||||
"removing_known": "Removendo arquivos conhecidos de teste/licença",
|
||||
"performing_deep_scan": "Realizando varredura profunda por arquivos adicionais de teste/licença",
|
||||
"found_additional_potential_license_trial_files": "{count} arquivos adicionais de licença/teste potencialmente encontrados",
|
||||
"checking_for_electron_localstorage_files": "Verificando arquivos localStorage do Electron",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "Nenhum arquivo adicional de licença/teste encontrado na varredura profunda",
|
||||
"removing_electron_localstorage_files": "Removendo arquivos localStorage do Electron",
|
||||
"electron_localstorage_files_removed": "Arquivos localStorage do Electron removidos",
|
||||
"electron_localstorage_files_removal_error": "Erro ao remover arquivos localStorage do Electron: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Remoção dos arquivos localStorage do Electron concluída"
|
||||
}
|
||||
}
|
||||
383
locales/ru.json
Normal file
383
locales/ru.json
Normal file
@@ -0,0 +1,383 @@
|
||||
{
|
||||
"menu": {
|
||||
"title": "Доступные опции",
|
||||
"exit": "Выйти из программы",
|
||||
"reset": "Сбросить ID машины",
|
||||
"register": "Зарегистрировать новый аккаунт Cursor",
|
||||
"register_google": "Зарегистрироваться через Google",
|
||||
"register_github": "Зарегистрироваться через GitHub",
|
||||
"register_manual": "Зарегистрировать Cursor используя свою почту",
|
||||
"quit": "Закрыть приложение Cursor",
|
||||
"select_language": "Выбрать язык",
|
||||
"input_choice": "Пожалуйста, введите ваш выбор ({choices})",
|
||||
"invalid_choice": "Неверный выбор. Пожалуйста, введите число из {choices}",
|
||||
"program_terminated": "Программа была завершена пользователем",
|
||||
"error_occurred": "Произошла ошибка: {error}. Пожалуйста, попробуйте снова",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"disable_auto_update": "Отключить автоматическое обновление Cursor",
|
||||
"lifetime_access_enabled": "ВКЛЮЧЕН ПОЖИЗНЕННЫЙ ДОСТУП",
|
||||
"totally_reset": "Полностью сбросить Cursor"
|
||||
},
|
||||
"languages": {
|
||||
"en": "Английский",
|
||||
"zh_cn": "Упрощенный китайский",
|
||||
"zh_tw": "Традиционный китайский",
|
||||
"vi": "Вьетнамский",
|
||||
"nl": "Нидерландский",
|
||||
"de": "Немецкий",
|
||||
"fr": "Французский",
|
||||
"pt": "Бразильский португальский",
|
||||
"ru": "Русский"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Начало закрытия Cursor",
|
||||
"no_process": "Нет запущенных процессов Cursor",
|
||||
"terminating": "Завершение процесса {pid}",
|
||||
"waiting": "Ожидание завершения процесса",
|
||||
"success": "Все процессы Cursor закрыты",
|
||||
"timeout": "Таймаут процесса: {pids}",
|
||||
"error": "Произошла ошибка: {error}"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Инструмент сброса ID машины Cursor",
|
||||
"checking": "Проверка конфигурационного файла",
|
||||
"not_found": "Конфигурационный файл не найден",
|
||||
"no_permission": "Невозможно прочитать или записать конфигурационный файл, проверьте права доступа",
|
||||
"reading": "Чтение текущей конфигурации",
|
||||
"creating_backup": "Создание резервной копии конфигурации",
|
||||
"backup_exists": "Резервный файл уже существует, пропускаем шаг резервного копирования",
|
||||
"generating": "Генерация нового ID машины",
|
||||
"saving_json": "Сохранение новой конфигурации в JSON",
|
||||
"success": "ID машины успешно сброшен",
|
||||
"new_id": "Новый ID машины",
|
||||
"permission_error": "Ошибка прав доступа: {error}",
|
||||
"run_as_admin": "Пожалуйста, запустите программу от имени администратора",
|
||||
"process_error": "Ошибка процесса сброса: {error}",
|
||||
"updating_sqlite": "Обновление базы данных SQLite",
|
||||
"updating_pair": "Обновление пары ключ-значение",
|
||||
"sqlite_success": "База данных SQLite успешно обновлена",
|
||||
"sqlite_error": "Ошибка обновления базы данных SQLite: {error}",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"unsupported_os": "Неподдерживаемая ОС: {os}",
|
||||
"linux_path_not_found": "Путь Linux не найден",
|
||||
"updating_system_ids": "Обновление системных ID",
|
||||
"system_ids_updated": "Системные ID успешно обновлены",
|
||||
"system_ids_update_failed": "Ошибка обновления системных ID: {error}",
|
||||
"windows_guid_updated": "Windows GUID успешно обновлен",
|
||||
"windows_permission_denied": "Отказано в доступе Windows",
|
||||
"windows_guid_update_failed": "Ошибка обновления Windows GUID",
|
||||
"macos_uuid_updated": "macOS UUID успешно обновлен",
|
||||
"plutil_command_failed": "Ошибка команды plutil",
|
||||
"start_patching": "Начало патчинга getMachineId",
|
||||
"macos_uuid_update_failed": "Ошибка обновления macOS UUID",
|
||||
"current_version": "Текущая версия Cursor: {version}",
|
||||
"patch_completed": "Патчинг getMachineId завершен",
|
||||
"patch_failed": "Ошибка патчинга getMachineId: {error}",
|
||||
"version_check_passed": "Проверка версии Cursor пройдена",
|
||||
"file_modified": "Файл изменен",
|
||||
"version_less_than_0_45": "Версия Cursor < 0.45.0, пропускаем патчинг getMachineId",
|
||||
"detecting_version": "Определение версии Cursor",
|
||||
"patching_getmachineid": "Патчинг getMachineId",
|
||||
"version_greater_than_0_45": "Версия Cursor >= 0.45.0, патчинг getMachineId",
|
||||
"permission_denied": "Отказано в доступе: {error}",
|
||||
"backup_created": "Резервная копия создана",
|
||||
"update_success": "Обновление успешно",
|
||||
"update_failed": "Ошибка обновления: {error}",
|
||||
"windows_machine_guid_updated": "Windows Machine GUID успешно обновлен",
|
||||
"reading_package_json": "Чтение package.json {path}",
|
||||
"invalid_json_object": "Неверный JSON объект",
|
||||
"no_version_field": "Поле версии не найдено в package.json",
|
||||
"version_field_empty": "Поле версии пусто",
|
||||
"invalid_version_format": "Неверный формат версии: {version}",
|
||||
"found_version": "Найдена версия: {version}",
|
||||
"version_parse_error": "Ошибка разбора версии: {error}",
|
||||
"package_not_found": "Package.json не найден: {path}",
|
||||
"check_version_failed": "Ошибка проверки версии: {error}",
|
||||
"stack_trace": "Трассировка стека",
|
||||
"version_too_low": "Версия Cursor слишком низкая: {version} < 0.45.0"
|
||||
},
|
||||
"register": {
|
||||
"title": "Инструмент регистрации Cursor",
|
||||
"start": "Запуск процесса регистрации...",
|
||||
"handling_turnstile": "Обработка проверки безопасности...",
|
||||
"retry_verification": "Повторная попытка проверки...",
|
||||
"detect_turnstile": "Проверка безопасности...",
|
||||
"verification_success": "Проверка безопасности успешна",
|
||||
"starting_browser": "Открытие браузера...",
|
||||
"form_success": "Форма успешно отправлена",
|
||||
"browser_started": "Браузер успешно открыт",
|
||||
"waiting_for_second_verification": "Ожидание проверки email...",
|
||||
"waiting_for_verification_code": "Ожидание кода подтверждения...",
|
||||
"password_success": "Пароль успешно установлен",
|
||||
"password_error": "Не удалось установить пароль: {error}. Пожалуйста, попробуйте снова",
|
||||
"waiting_for_page_load": "Загрузка страницы...",
|
||||
"first_verification_passed": "Первичная проверка успешна",
|
||||
"mailbox": "Успешный доступ к почтовому ящику",
|
||||
"register_start": "Начать регистрацию",
|
||||
"form_submitted": "Форма отправлена, начало проверки...",
|
||||
"filling_form": "Заполнение формы",
|
||||
"visiting_url": "Переход по URL",
|
||||
"basic_info": "Основная информация отправлена",
|
||||
"handle_turnstile": "Обработка Turnstile",
|
||||
"no_turnstile": "Turnstile не обнаружен",
|
||||
"turnstile_passed": "Turnstile пройден",
|
||||
"verification_start": "Начало получения кода подтверждения",
|
||||
"verification_timeout": "Таймаут получения кода подтверждения",
|
||||
"verification_not_found": "Код подтверждения не найден",
|
||||
"try_get_code": "Попытка | {attempt} Получение кода подтверждения | Осталось времени: {time}с",
|
||||
"get_account": "Получение информации об аккаунте",
|
||||
"get_token": "Получение токена сессии Cursor",
|
||||
"token_success": "Токен успешно получен",
|
||||
"token_attempt": "Попытка | {attempt} раз получить токен | Повторная попытка через {time}с",
|
||||
"token_max_attempts": "Достигнуто максимальное количество попыток ({max}) | Не удалось получить токен",
|
||||
"token_failed": "Ошибка получения токена: {error}",
|
||||
"account_error": "Ошибка получения информации об аккаунте: {error}",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"browser_start": "Запуск браузера",
|
||||
"open_mailbox": "Открытие страницы почтового ящика",
|
||||
"email_error": "Не удалось получить email адрес",
|
||||
"setup_error": "Ошибка настройки email: {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": "Обнаружена страница входа, начало входа...",
|
||||
"cursor_registration_completed": "Регистрация Cursor завершена!",
|
||||
"set_password": "Установка пароля",
|
||||
"basic_info_submitted": "Основная информация отправлена",
|
||||
"cursor_auth_info_updated": "Информация авторизации Cursor обновлена",
|
||||
"cursor_auth_info_update_failed": "Ошибка обновления информации авторизации Cursor",
|
||||
"reset_machine_id": "Сброс ID машины",
|
||||
"account_info_saved": "Информация об аккаунте сохранена",
|
||||
"save_account_info_failed": "Ошибка сохранения информации об аккаунте",
|
||||
"get_email_address": "Получение email адреса",
|
||||
"update_cursor_auth_info": "Обновление информации авторизации Cursor",
|
||||
"register_process_error": "Ошибка процесса регистрации: {error}",
|
||||
"setting_password": "Установка пароля",
|
||||
"manual_code_input": "Ручной ввод кода",
|
||||
"manual_email_input": "Ручной ввод email",
|
||||
"password": "Пароль",
|
||||
"first_name": "Имя",
|
||||
"last_name": "Фамилия",
|
||||
"exit_signal": "Сигнал выхода",
|
||||
"email_address": "Email адрес",
|
||||
"config_created": "Конфигурация создана",
|
||||
"verification_failed": "Проверка не пройдена",
|
||||
"verification_error": "Ошибка проверки: {error}",
|
||||
"config_option_added": "Опция конфигурации добавлена: {option}",
|
||||
"config_updated": "Конфигурация обновлена",
|
||||
"password_submitted": "Пароль отправлен",
|
||||
"total_usage": "Общее использование: {usage}",
|
||||
"setting_on_password": "Установка пароля",
|
||||
"getting_code": "Получение кода подтверждения, попытка через 60с"
|
||||
},
|
||||
"auth": {
|
||||
"title": "Менеджер авторизации Cursor",
|
||||
"checking_auth": "Проверка файла авторизации",
|
||||
"auth_not_found": "Файл авторизации не найден",
|
||||
"auth_file_error": "Ошибка файла авторизации: {error}",
|
||||
"reading_auth": "Чтение файла авторизации",
|
||||
"updating_auth": "Обновление информации авторизации",
|
||||
"auth_updated": "Информация авторизации успешно обновлена",
|
||||
"auth_update_failed": "Ошибка обновления информации авторизации: {error}",
|
||||
"auth_file_created": "Файл авторизации создан",
|
||||
"auth_file_create_failed": "Ошибка создания файла авторизации: {error}",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"reset_machine_id": "Сброс ID машины",
|
||||
"database_connection_closed": "Соединение с базой данных закрыто",
|
||||
"database_updated_successfully": "База данных успешно обновлена",
|
||||
"connected_to_database": "Подключено к базе данных",
|
||||
"updating_pair": "Обновление пары ключ-значение",
|
||||
"db_not_found": "Файл базы данных не найден по пути: {path}",
|
||||
"db_permission_error": "Невозможно получить доступ к файлу базы данных. Проверьте права доступа",
|
||||
"db_connection_error": "Ошибка подключения к базе данных: {error}"
|
||||
},
|
||||
"control": {
|
||||
"generate_email": "Генерация нового email",
|
||||
"blocked_domain": "Заблокированный домен",
|
||||
"select_domain": "Выбор случайного домена",
|
||||
"copy_email": "Копирование email адреса",
|
||||
"enter_mailbox": "Вход в почтовый ящик",
|
||||
"refresh_mailbox": "Обновление почтового ящика",
|
||||
"check_verification": "Проверка кода подтверждения",
|
||||
"verification_found": "Код подтверждения найден",
|
||||
"verification_not_found": "Код подтверждения не найден",
|
||||
"browser_error": "Ошибка управления браузером: {error}",
|
||||
"navigation_error": "Ошибка навигации: {error}",
|
||||
"email_copy_error": "Ошибка копирования email: {error}",
|
||||
"mailbox_error": "Ошибка почтового ящика: {error}",
|
||||
"token_saved_to_file": "Токен сохранен в cursor_tokens.txt",
|
||||
"navigate_to": "Переход на {url}",
|
||||
"generate_email_success": "Email успешно сгенерирован",
|
||||
"select_email_domain": "Выбор домена email",
|
||||
"select_email_domain_success": "Домен email успешно выбран",
|
||||
"get_email_name": "Получение имени email",
|
||||
"get_email_name_success": "Имя email успешно получено",
|
||||
"get_email_address": "Получение email адреса",
|
||||
"get_email_address_success": "Email адрес успешно получен",
|
||||
"enter_mailbox_success": "Успешный вход в почтовый ящик",
|
||||
"found_verification_code": "Найден код подтверждения",
|
||||
"get_cursor_session_token": "Получение токена сессии Cursor",
|
||||
"get_cursor_session_token_success": "Токен сессии Cursor успешно получен",
|
||||
"get_cursor_session_token_failed": "Ошибка получения токена сессии Cursor",
|
||||
"save_token_failed": "Ошибка сохранения токена",
|
||||
"database_updated_successfully": "База данных успешно обновлена",
|
||||
"database_connection_closed": "Соединение с базой данных закрыто",
|
||||
"no_valid_verification_code": "Нет действительного кода подтверждения"
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "Запуск браузера",
|
||||
"visiting_site": "Переход на сайты почтовых доменов",
|
||||
"create_success": "Email успешно создан",
|
||||
"create_failed": "Не удалось создать email",
|
||||
"create_error": "Ошибка создания email: {error}",
|
||||
"refreshing": "Обновление email",
|
||||
"refresh_success": "Email успешно обновлен",
|
||||
"refresh_error": "Ошибка обновления email: {error}",
|
||||
"refresh_button_not_found": "Кнопка обновления не найдена",
|
||||
"verification_found": "Проверка найдена",
|
||||
"verification_not_found": "Проверка не найдена",
|
||||
"verification_error": "Ошибка проверки: {error}",
|
||||
"verification_code_found": "Код подтверждения найден",
|
||||
"verification_code_not_found": "Код подтверждения не найден",
|
||||
"verification_code_error": "Ошибка кода подтверждения: {error}",
|
||||
"address": "Email адрес",
|
||||
"all_domains_blocked": "Все домены заблокированы, переключение сервиса",
|
||||
"no_available_domains_after_filtering": "Нет доступных доменов после фильтрации",
|
||||
"switching_service": "Переключение на сервис {service}",
|
||||
"domains_list_error": "Не удалось получить список доменов: {error}",
|
||||
"failed_to_get_available_domains": "Не удалось получить доступные домены",
|
||||
"domains_excluded": "Исключенные домены: {domains}",
|
||||
"failed_to_create_account": "Не удалось создать аккаунт",
|
||||
"account_creation_error": "Ошибка создания аккаунта: {error}",
|
||||
"blocked_domains": "Заблокированные домены: {domains}",
|
||||
"blocked_domains_loaded": "Загружены заблокированные домены: {count}",
|
||||
"blocked_domains_loaded_error": "Ошибка загрузки заблокированных доменов: {error}",
|
||||
"blocked_domains_loaded_success": "Заблокированные домены успешно загружены",
|
||||
"blocked_domains_loaded_timeout": "Таймаут загрузки заблокированных доменов: {timeout}с",
|
||||
"blocked_domains_loaded_timeout_error": "Ошибка таймаута загрузки заблокированных доменов: {error}",
|
||||
"available_domains_loaded": "Загружены доступные домены: {count}",
|
||||
"domains_filtered": "Отфильтрованы домены: {count}",
|
||||
"trying_to_create_email": "Попытка создания email: {email}",
|
||||
"domain_blocked": "Домен заблокирован: {domain}"
|
||||
},
|
||||
"update": {
|
||||
"title": "Отключение автоматического обновления Cursor",
|
||||
"disable_success": "Автоматическое обновление успешно отключено",
|
||||
"disable_failed": "Ошибка отключения автоматического обновления: {error}",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"start_disable": "Начало отключения автоматического обновления",
|
||||
"killing_processes": "Завершение процессов",
|
||||
"processes_killed": "Процессы завершены",
|
||||
"removing_directory": "Удаление директории",
|
||||
"directory_removed": "Директория удалена",
|
||||
"creating_block_file": "Создание файла блокировки",
|
||||
"block_file_created": "Файл блокировки создан"
|
||||
},
|
||||
"updater": {
|
||||
"checking": "Проверка обновлений...",
|
||||
"new_version_available": "Доступна новая версия! (Текущая: {current}, Последняя: {latest})",
|
||||
"updating": "Обновление до последней версии. Программа перезапустится автоматически.",
|
||||
"up_to_date": "У вас установлена последняя версия.",
|
||||
"check_failed": "Не удалось проверить обновления: {error}",
|
||||
"continue_anyway": "Продолжение работы с текущей версией...",
|
||||
"update_confirm": "Хотите обновить до последней версии? (Y/n)",
|
||||
"update_skipped": "Обновление пропущено.",
|
||||
"invalid_choice": "Неверный выбор. Пожалуйста, введите 'Y' или 'n'.",
|
||||
"development_version": "Версия разработки {current} > {latest}",
|
||||
"changelog_title": "Журнал изменений"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Полный сброс Cursor",
|
||||
"checking_config": "Проверка конфигурационного файла",
|
||||
"config_not_found": "Конфигурационный файл не найден",
|
||||
"no_permission": "Невозможно прочитать или записать конфигурационный файл, проверьте права доступа",
|
||||
"reading_config": "Чтение текущей конфигурации",
|
||||
"creating_backup": "Создание резервной копии конфигурации",
|
||||
"backup_exists": "Резервный файл уже существует, пропускаем шаг резервного копирования",
|
||||
"generating_new_machine_id": "Генерация нового ID машины",
|
||||
"saving_new_config": "Сохранение новой конфигурации в JSON",
|
||||
"success": "Cursor успешно сброшен",
|
||||
"error": "Ошибка сброса Cursor: {error}",
|
||||
"press_enter": "Нажмите Enter для выхода",
|
||||
"reset_machine_id": "Сброс ID машины",
|
||||
"database_connection_closed": "Соединение с базой данных закрыто",
|
||||
"database_updated_successfully": "База данных успешно обновлена",
|
||||
"connected_to_database": "Подключено к базе данных",
|
||||
"updating_pair": "Обновление пары ключ-значение",
|
||||
"db_not_found": "Файл базы данных не найден по пути: {path}",
|
||||
"db_permission_error": "Невозможно получить доступ к файлу базы данных. Проверьте права доступа",
|
||||
"db_connection_error": "Ошибка подключения к базе данных: {error}",
|
||||
"feature_title": "ФУНКЦИИ",
|
||||
"feature_1": "Полное удаление настроек и конфигураций Cursor AI",
|
||||
"feature_2": "Очистка всех кэшированных данных, включая историю AI и промпты",
|
||||
"feature_3": "Сброс ID машины для обхода обнаружения пробной версии",
|
||||
"feature_4": "Создание новых случайных идентификаторов машины",
|
||||
"feature_5": "Удаление пользовательских расширений и настроек",
|
||||
"feature_6": "Сброс информации о пробной версии и данных активации",
|
||||
"feature_7": "Глубокий поиск скрытых файлов лицензии и пробной версии",
|
||||
"feature_8": "Безопасное сохранение файлов и приложений, не относящихся к Cursor",
|
||||
"feature_9": "Совместимость с Windows, macOS и Linux",
|
||||
"disclaimer_title": "ПРЕДУПРЕЖДЕНИЕ",
|
||||
"disclaimer_1": "Этот инструмент навсегда удалит все настройки Cursor AI,",
|
||||
"disclaimer_2": "конфигурации и кэшированные данные. Это действие нельзя отменить.",
|
||||
"disclaimer_3": "Ваши файлы кода НЕ будут затронуты, и инструмент разработан",
|
||||
"disclaimer_4": "только для файлов редактора Cursor AI и механизмов обнаружения пробной версии.",
|
||||
"disclaimer_5": "Другие приложения на вашей системе не будут затронуты.",
|
||||
"disclaimer_6": "После запуска этого инструмента вам нужно будет настроить Cursor AI заново.",
|
||||
"disclaimer_7": "Используйте на свой страх и риск",
|
||||
"confirm_title": "Вы уверены, что хотите продолжить?",
|
||||
"confirm_1": "Это действие удалит все настройки Cursor AI,",
|
||||
"confirm_2": "конфигурации и кэшированные данные. Это действие нельзя отменить.",
|
||||
"confirm_3": "Ваши файлы кода НЕ будут затронуты, и инструмент разработан",
|
||||
"confirm_4": "только для файлов редактора Cursor AI и механизмов обнаружения пробной версии.",
|
||||
"confirm_5": "Другие приложения на вашей системе не будут затронуты.",
|
||||
"confirm_6": "После запуска этого инструмента вам нужно будет настроить Cursor AI заново.",
|
||||
"confirm_7": "Используйте на свой страх и риск",
|
||||
"invalid_choice": "Пожалуйста, введите 'Y' или 'n'",
|
||||
"skipped_for_safety": "Пропущено для безопасности (не относится к Cursor): {path}",
|
||||
"deleted": "Удалено: {path}",
|
||||
"error_deleting": "Ошибка удаления {path}: {error}",
|
||||
"not_found": "Файл не найден: {path}",
|
||||
"resetting_machine_id": "Сброс идентификаторов машины для обхода обнаружения пробной версии...",
|
||||
"created_machine_id": "Создан новый ID машины: {path}",
|
||||
"error_creating_machine_id": "Ошибка создания файла ID машины {path}: {error}",
|
||||
"error_searching": "Ошибка поиска файлов в {path}: {error}",
|
||||
"created_extended_trial_info": "Создана новая расширенная информация о пробной версии: {path}",
|
||||
"error_creating_trial_info": "Ошибка создания файла информации о пробной версии {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Сброс редактора Cursor AI... Пожалуйста, подождите.",
|
||||
"reset_cancelled": "Сброс отменен. Выход без внесения изменений.",
|
||||
"windows_machine_id_modification_skipped": "Изменение ID машины Windows пропущено: {error}",
|
||||
"linux_machine_id_modification_skipped": "Изменение machine-id Linux пропущено: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Примечание: полный сброс ID машины может потребовать запуска от имени администратора",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Примечание: полный сброс системного machine-id может потребовать прав sudo",
|
||||
"windows_registry_instructions": "📝 ПРИМЕЧАНИЕ: Для полного сброса в Windows может потребоваться очистка записей реестра.",
|
||||
"windows_registry_instructions_2": " Запустите 'regedit' и найдите ключи, содержащие 'Cursor' или 'CursorAI' в HKEY_CURRENT_USER\\Software\\ и удалите их.\n",
|
||||
"reset_log_1": "Cursor AI полностью сброшен и обнаружение пробной версии обойдено!",
|
||||
"reset_log_2": "Пожалуйста, перезагрузите систему для применения изменений.",
|
||||
"reset_log_3": "Вам нужно будет переустановить Cursor AI, и теперь у вас должен быть новый пробный период.",
|
||||
"reset_log_4": "Для лучших результатов рекомендуется также:",
|
||||
"reset_log_5": "Использовать другой email адрес при регистрации нового пробного периода",
|
||||
"reset_log_6": "Если возможно, использовать VPN для изменения IP адреса",
|
||||
"reset_log_7": "Очистить куки и кэш браузера перед посещением сайта Cursor AI",
|
||||
"reset_log_8": "Если проблемы сохраняются, попробуйте установить Cursor AI в другое место",
|
||||
"reset_log_9": "Если вы столкнулись с проблемами, перейдите на Github Issue Tracker и создайте issue на https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"unexpected_error": "Произошла непредвиденная ошибка: {error}",
|
||||
"report_issue": "Пожалуйста, сообщите об этой проблеме на Github Issue Tracker на https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"keyboard_interrupt": "Процесс прерван пользователем. Выход...",
|
||||
"return_to_main_menu": "Возврат в главное меню...",
|
||||
"process_interrupted": "Процесс прерван. Выход...",
|
||||
"press_enter_to_return_to_main_menu": "Нажмите Enter для возврата в главное меню...",
|
||||
"removing_known": "Удаление известных файлов лицензии/пробной версии",
|
||||
"performing_deep_scan": "Выполнение глубокого поиска дополнительных файлов лицензии/пробной версии",
|
||||
"found_additional_potential_license_trial_files": "Найдено {count} дополнительных потенциальных файлов лицензии/пробной версии",
|
||||
"checking_for_electron_localstorage_files": "Проверка файлов localStorage Electron",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "Дополнительные файлы лицензии/пробной версии не найдены при глубоком поиске",
|
||||
"removing_electron_localstorage_files": "Удаление файлов localStorage Electron",
|
||||
"electron_localstorage_files_removed": "Файлы localStorage Electron удалены",
|
||||
"electron_localstorage_files_removal_error": "Ошибка удаления файлов localStorage Electron: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Удаление файлов localStorage Electron завершено"
|
||||
}
|
||||
}
|
||||
@@ -17,10 +17,15 @@
|
||||
"totally_reset": "Đặt lại hoàn toàn Cursor"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Tiếng Việt"
|
||||
"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",
|
||||
"nl": "Tiếng Hà Lan",
|
||||
"de": "Tiếng Đức",
|
||||
"fr": "Tiếng Pháp",
|
||||
"pt": "Tiếng Bồ Đào Nha",
|
||||
"ru": "Tiếng Nga"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Bắt Đầu Thoát Cursor",
|
||||
@@ -223,7 +228,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 +259,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 +285,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",
|
||||
|
||||
@@ -19,10 +19,15 @@
|
||||
"totally_reset": "完全重置 Cursor"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"en": "英语",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"zh_tw": "繁体中文",
|
||||
"vi": "越南语",
|
||||
"nl": "荷兰语",
|
||||
"de": "德语",
|
||||
"fr": "法语",
|
||||
"pt": "葡萄牙语",
|
||||
"ru": "俄语"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "开始退出 Cursor",
|
||||
@@ -221,7 +226,7 @@
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "启动浏览器",
|
||||
"visiting_site": "访问 mail.tm",
|
||||
"visiting_site": "访问 邮箱服务网站",
|
||||
"create_success": "邮箱创建成功",
|
||||
"create_failed": "邮箱创建失败",
|
||||
"create_error": "邮箱创建错误: {error}",
|
||||
@@ -252,7 +257,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 +283,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",
|
||||
|
||||
@@ -17,10 +17,15 @@
|
||||
"totally_reset": "完全重置 Cursor"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"en": "英文",
|
||||
"zh_cn": "簡體中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"vi": "越南文",
|
||||
"nl": "荷蘭文",
|
||||
"de": "德文",
|
||||
"fr": "法文",
|
||||
"pt": "葡萄牙文",
|
||||
"ru": "俄文"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "開始退出 Cursor",
|
||||
@@ -201,7 +206,7 @@
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "啟動瀏覽器",
|
||||
"visiting_site": "訪問 mail.tm",
|
||||
"visiting_site": "訪問 郵箱網站",
|
||||
"create_success": "郵箱創建成功",
|
||||
"create_failed": "郵箱創建失敗",
|
||||
"create_error": "郵箱創建錯誤: {error}",
|
||||
@@ -257,7 +262,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",
|
||||
|
||||
2
logo.py
2
logo.py
@@ -30,7 +30,7 @@ CURSOR_LOGO = f"""
|
||||
|
||||
Github: https://github.com/yeongpin/cursor-free-vip
|
||||
{Fore.RED}
|
||||
Press 5 to change language | 按下 5 键切换语言
|
||||
Press 7 to change language | 按下 7 键切换语言
|
||||
{Style.RESET_ALL}
|
||||
"""
|
||||
|
||||
|
||||
60
main.py
60
main.py
@@ -108,6 +108,7 @@ class Translator:
|
||||
0x0404: 'zh_tw', # Traditional Chinese
|
||||
0x0804: 'zh_cn', # Simplified Chinese
|
||||
0x0422: 'vi', # Vietnamese
|
||||
0x0419: 'ru', # Russian
|
||||
}
|
||||
|
||||
return language_map.get(layout_id, 'en')
|
||||
@@ -133,8 +134,17 @@ 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'
|
||||
elif system_locale.startswith('pt'):
|
||||
return 'pt'
|
||||
elif system_locale.startswith('ru'):
|
||||
return 'ru'
|
||||
|
||||
|
||||
# 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:
|
||||
@@ -143,7 +153,16 @@ 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'
|
||||
elif 'pt' in env_lang:
|
||||
return 'pt'
|
||||
elif 'ru' in env_lang:
|
||||
return 'ru'
|
||||
|
||||
return 'en'
|
||||
except:
|
||||
@@ -305,6 +324,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()
|
||||
|
||||
316
new_signup.py
316
new_signup.py
@@ -39,7 +39,7 @@ def signal_handler(signum, frame):
|
||||
os._exit(0)
|
||||
|
||||
def simulate_human_input(page, url, config, translator=None):
|
||||
"""Visit URL"""
|
||||
"""Visit URL with human-like behavior"""
|
||||
if translator:
|
||||
print(f"{Fore.CYAN}🚀 {translator.get('register.visiting_url')}: {url}{Style.RESET_ALL}")
|
||||
|
||||
@@ -47,53 +47,194 @@ def simulate_human_input(page, url, config, translator=None):
|
||||
page.get('about:blank')
|
||||
time.sleep(get_random_wait_time(config, 'page_load_wait'))
|
||||
|
||||
# Add random mouse movements before visiting target page
|
||||
try:
|
||||
page.run_js("""
|
||||
function simulateMouseMovement() {
|
||||
const points = [];
|
||||
const numPoints = Math.floor(Math.random() * 10) + 5;
|
||||
for (let i = 0; i < numPoints; i++) {
|
||||
points.push({
|
||||
x: Math.random() * window.innerWidth,
|
||||
y: Math.random() * window.innerHeight
|
||||
});
|
||||
}
|
||||
points.forEach((point, i) => {
|
||||
setTimeout(() => {
|
||||
const event = new MouseEvent('mousemove', {
|
||||
view: window,
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
clientX: point.x,
|
||||
clientY: point.y
|
||||
});
|
||||
document.dispatchEvent(event);
|
||||
}, i * (Math.random() * 200 + 50));
|
||||
});
|
||||
}
|
||||
simulateMouseMovement();
|
||||
""")
|
||||
except:
|
||||
pass # Ignore if JavaScript execution fails
|
||||
|
||||
# Visit target page
|
||||
page.get(url)
|
||||
time.sleep(get_random_wait_time(config, 'page_load_wait'))
|
||||
|
||||
# Add some random scrolling
|
||||
try:
|
||||
page.run_js("""
|
||||
function simulateHumanScroll() {
|
||||
const maxScroll = Math.max(
|
||||
document.body.scrollHeight,
|
||||
document.documentElement.scrollHeight,
|
||||
document.body.offsetHeight,
|
||||
document.documentElement.offsetHeight,
|
||||
document.body.clientHeight,
|
||||
document.documentElement.clientHeight
|
||||
);
|
||||
const scrollPoints = [];
|
||||
const numPoints = Math.floor(Math.random() * 3) + 2;
|
||||
for (let i = 0; i < numPoints; i++) {
|
||||
scrollPoints.push(Math.floor(Math.random() * maxScroll));
|
||||
}
|
||||
scrollPoints.sort((a, b) => a - b);
|
||||
scrollPoints.forEach((point, i) => {
|
||||
setTimeout(() => {
|
||||
window.scrollTo({
|
||||
top: point,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
}, i * (Math.random() * 1000 + 500));
|
||||
});
|
||||
}
|
||||
simulateHumanScroll();
|
||||
""")
|
||||
except:
|
||||
pass # Ignore if JavaScript execution fails
|
||||
|
||||
def simulate_human_typing(element, text, config):
|
||||
"""Simulate human-like typing with random delays between keystrokes"""
|
||||
for char in text:
|
||||
element.input(char)
|
||||
# Random delay between keystrokes (30-100ms)
|
||||
time.sleep(random.uniform(0.03, 0.1))
|
||||
time.sleep(get_random_wait_time(config, 'input_wait'))
|
||||
|
||||
def fill_signup_form(page, first_name, last_name, email, config, translator=None):
|
||||
"""Fill signup form"""
|
||||
try:
|
||||
if translator:
|
||||
print(f"{Fore.CYAN}📧 {translator.get('register.filling_form')}{Style.RESET_ALL}")
|
||||
else:
|
||||
print("\n正在填写注册表单...")
|
||||
|
||||
# Fill first name
|
||||
first_name_input = page.ele("@name=first_name")
|
||||
if first_name_input:
|
||||
first_name_input.input(first_name)
|
||||
time.sleep(get_random_wait_time(config, 'input_wait'))
|
||||
|
||||
# Fill last name
|
||||
last_name_input = page.ele("@name=last_name")
|
||||
if last_name_input:
|
||||
last_name_input.input(last_name)
|
||||
time.sleep(get_random_wait_time(config, 'input_wait'))
|
||||
|
||||
# Fill email
|
||||
email_input = page.ele("@name=email")
|
||||
if email_input:
|
||||
email_input.input(email)
|
||||
time.sleep(get_random_wait_time(config, 'input_wait'))
|
||||
|
||||
# Click submit button
|
||||
submit_button = page.ele("@type=submit")
|
||||
if submit_button:
|
||||
submit_button.click()
|
||||
time.sleep(get_random_wait_time(config, 'submit_wait'))
|
||||
"""Fill signup form with human-like behavior"""
|
||||
max_retries = 5
|
||||
retry_count = 0
|
||||
|
||||
while retry_count < max_retries:
|
||||
try:
|
||||
if translator:
|
||||
print(f"{Fore.CYAN}📧 {translator.get('register.filling_form')} (Attempt {retry_count + 1}/{max_retries}){Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"\n正在填写注册表单... (Attempt {retry_count + 1}/{max_retries})")
|
||||
|
||||
# Add random initial delay
|
||||
time.sleep(random.uniform(0.5, 1.5))
|
||||
|
||||
# Fill first name with human-like typing
|
||||
first_name_input = page.ele("@name=first_name")
|
||||
if first_name_input:
|
||||
simulate_human_typing(first_name_input, first_name, config)
|
||||
# Add random pause between fields
|
||||
time.sleep(random.uniform(0.3, 0.8))
|
||||
|
||||
# Fill last name with human-like typing
|
||||
last_name_input = page.ele("@name=last_name")
|
||||
if last_name_input:
|
||||
simulate_human_typing(last_name_input, last_name, config)
|
||||
# Add random pause between fields
|
||||
time.sleep(random.uniform(0.3, 0.8))
|
||||
|
||||
# Fill email with human-like typing
|
||||
email_input = page.ele("@name=email")
|
||||
if email_input:
|
||||
simulate_human_typing(email_input, email, config)
|
||||
# Add random pause before submitting
|
||||
time.sleep(random.uniform(0.5, 1.2))
|
||||
|
||||
# Move mouse to submit button with human-like movement
|
||||
submit_button = page.ele("@type=submit")
|
||||
if submit_button:
|
||||
try:
|
||||
# Simulate mouse movement to button
|
||||
page.run_js("""
|
||||
function moveToButton(button) {
|
||||
const rect = button.getBoundingClientRect();
|
||||
const centerX = rect.left + rect.width / 2;
|
||||
const centerY = rect.top + rect.height / 2;
|
||||
|
||||
// Create a curved path to the button
|
||||
const startX = Math.random() * window.innerWidth;
|
||||
const startY = Math.random() * window.innerHeight;
|
||||
const controlX = (startX + centerX) / 2 + (Math.random() - 0.5) * 100;
|
||||
const controlY = (startY + centerY) / 2 + (Math.random() - 0.5) * 100;
|
||||
|
||||
const steps = 20;
|
||||
for (let i = 0; i <= steps; i++) {
|
||||
const t = i / steps;
|
||||
const x = Math.pow(1-t, 2) * startX + 2 * (1-t) * t * controlX + Math.pow(t, 2) * centerX;
|
||||
const y = Math.pow(1-t, 2) * startY + 2 * (1-t) * t * controlY + Math.pow(t, 2) * centerY;
|
||||
|
||||
setTimeout(() => {
|
||||
const event = new MouseEvent('mousemove', {
|
||||
view: window,
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
clientX: x,
|
||||
clientY: y
|
||||
});
|
||||
document.dispatchEvent(event);
|
||||
}, i * (Math.random() * 20 + 10));
|
||||
}
|
||||
}
|
||||
moveToButton(document.querySelector('button[type="submit"]'));
|
||||
""")
|
||||
time.sleep(random.uniform(0.3, 0.6))
|
||||
except:
|
||||
pass # Ignore if JavaScript execution fails
|
||||
|
||||
submit_button.click()
|
||||
time.sleep(get_random_wait_time(config, 'submit_wait'))
|
||||
|
||||
# Check for human verification error
|
||||
error_message = page.ele("text:Can't verify the user is human")
|
||||
if error_message:
|
||||
if translator:
|
||||
print(f"{Fore.YELLOW}⚠️ {translator.get('register.human_verify_error')} (Attempt {retry_count + 1}/{max_retries}){Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"Can't verify the user is human. Retrying... (Attempt {retry_count + 1}/{max_retries})")
|
||||
retry_count += 1
|
||||
# Add longer random delay between retries
|
||||
time.sleep(random.uniform(2, 4))
|
||||
continue
|
||||
|
||||
if translator:
|
||||
print(f"{Fore.GREEN}✅ {translator.get('register.form_success')}{Style.RESET_ALL}")
|
||||
else:
|
||||
print("Form filled successfully")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
if translator:
|
||||
print(f"{Fore.RED}❌ {translator.get('register.form_error', error=str(e))}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"Error filling form: {e}")
|
||||
retry_count += 1
|
||||
if retry_count < max_retries:
|
||||
time.sleep(get_random_wait_time(config, 'verification_retry_wait'))
|
||||
continue
|
||||
return False
|
||||
|
||||
if retry_count >= max_retries:
|
||||
if translator:
|
||||
print(f"{Fore.GREEN}✅ {translator.get('register.form_success')}{Style.RESET_ALL}")
|
||||
print(f"{Fore.RED}❌ {translator.get('register.max_retries_reached')}{Style.RESET_ALL}")
|
||||
else:
|
||||
print("Form filled successfully")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
if translator:
|
||||
print(f"{Fore.RED}❌ {translator.get('register.form_error', error=str(e))}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"Error filling form: {e}")
|
||||
print("Maximum retry attempts reached. Registration failed.")
|
||||
return False
|
||||
|
||||
def get_default_chrome_path():
|
||||
@@ -163,7 +304,7 @@ def get_random_wait_time(config, timing_type='page_load_wait'):
|
||||
return random.uniform(0.1, 0.8) # Return default value when error
|
||||
|
||||
def setup_driver(translator=None):
|
||||
"""Setup browser driver"""
|
||||
"""Setup browser driver with randomized fingerprint"""
|
||||
try:
|
||||
# Get config
|
||||
config = get_config(translator)
|
||||
@@ -185,10 +326,42 @@ def setup_driver(translator=None):
|
||||
# Use incognito mode
|
||||
co.set_argument("--incognito")
|
||||
|
||||
# Set random port
|
||||
co.set_argument("--no-sandbox")
|
||||
# Randomize browser fingerprint
|
||||
# Random screen resolution
|
||||
resolutions = [
|
||||
"1920,1080", "1366,768", "1536,864", "1440,900",
|
||||
"1280,720", "1600,900", "1024,768", "1680,1050"
|
||||
]
|
||||
window_size = random.choice(resolutions)
|
||||
co.set_argument(f"--window-size={window_size}")
|
||||
|
||||
# Random user agent
|
||||
user_agents = [
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
||||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
|
||||
]
|
||||
co.set_argument(f"--user-agent={random.choice(user_agents)}")
|
||||
|
||||
# Random color depth
|
||||
color_depths = ["24", "30", "48"]
|
||||
co.set_argument(f"--color-depth={random.choice(color_depths)}")
|
||||
|
||||
# Additional fingerprint randomization
|
||||
co.set_argument("--disable-blink-features=AutomationControlled") # Hide automation
|
||||
co.set_argument("--disable-features=IsolateOrigins,site-per-process")
|
||||
|
||||
# Random platform
|
||||
platforms = ["Win32", "Win64", "MacIntel", "Linux x86_64"]
|
||||
co.set_argument(f"--platform={random.choice(platforms)}")
|
||||
|
||||
# Random language
|
||||
languages = ["en-US", "en-GB", "fr-FR", "de-DE", "es-ES", "it-IT"]
|
||||
co.set_argument(f"--lang={random.choice(languages)}")
|
||||
|
||||
# Set random port
|
||||
co.set_argument("--no-sandbox")
|
||||
co.auto_port()
|
||||
|
||||
# Use headless mode (must be set to False, simulate human operation)
|
||||
@@ -212,6 +385,63 @@ def setup_driver(translator=None):
|
||||
print("Starting browser...")
|
||||
|
||||
page = ChromiumPage(co)
|
||||
|
||||
# Additional JavaScript-based fingerprint randomization
|
||||
try:
|
||||
page.run_js("""
|
||||
// Override navigator properties
|
||||
const originalNavigator = window.navigator;
|
||||
const navigatorProxy = new Proxy(originalNavigator, {
|
||||
get: function(target, key) {
|
||||
switch (key) {
|
||||
case 'webdriver':
|
||||
return undefined;
|
||||
case 'plugins':
|
||||
return [
|
||||
{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer' },
|
||||
{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai' },
|
||||
{ name: 'Native Client', filename: 'internal-nacl-plugin' }
|
||||
];
|
||||
case 'languages':
|
||||
return ['en-US', 'en'];
|
||||
default:
|
||||
return target[key];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Override permissions
|
||||
const originalPermissions = window.Permissions;
|
||||
window.Permissions = new Proxy(originalPermissions, {
|
||||
get: function(target, key) {
|
||||
if (key === 'prototype') {
|
||||
return {
|
||||
query: async () => ({ state: 'prompt' })
|
||||
};
|
||||
}
|
||||
return target[key];
|
||||
}
|
||||
});
|
||||
|
||||
// Random canvas fingerprint
|
||||
const originalGetContext = HTMLCanvasElement.prototype.getContext;
|
||||
HTMLCanvasElement.prototype.getContext = function() {
|
||||
const context = originalGetContext.apply(this, arguments);
|
||||
if (context && arguments[0] === '2d') {
|
||||
const originalFillText = context.fillText;
|
||||
context.fillText = function() {
|
||||
const noise = Math.random() * 0.1;
|
||||
context.rotate(noise);
|
||||
originalFillText.apply(this, arguments);
|
||||
context.rotate(-noise);
|
||||
};
|
||||
}
|
||||
return context;
|
||||
};
|
||||
""")
|
||||
except:
|
||||
pass # Ignore if JavaScript execution fails
|
||||
|
||||
return config, page
|
||||
|
||||
except Exception as e:
|
||||
|
||||
391
new_tempemail.py
391
new_tempemail.py
@@ -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()
|
||||
@@ -378,9 +378,12 @@ class OAuthHandler:
|
||||
|
||||
# Delete current account
|
||||
if self._delete_current_account():
|
||||
# Start new authentication
|
||||
# Start new authentication based on auth type
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Starting new authentication process...{Style.RESET_ALL}")
|
||||
return self.handle_google_auth()
|
||||
if auth_type == "google":
|
||||
return self.handle_google_auth()
|
||||
else: # github
|
||||
return self.handle_github_auth()
|
||||
else:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to delete expired account{Style.RESET_ALL}")
|
||||
|
||||
@@ -573,7 +576,7 @@ class OAuthHandler:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Usage count: {usage_text}{Style.RESET_ALL}")
|
||||
|
||||
# Check if account is expired
|
||||
if usage_text.strip() == "150 / 150": # Changed back to actual condition
|
||||
if usage_text.strip() == "150 / 150":
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Account has reached maximum usage, deleting...{Style.RESET_ALL}")
|
||||
|
||||
delete_js = """
|
||||
@@ -610,8 +613,8 @@ class OAuthHandler:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Redirecting to authenticator.cursor.sh...{Style.RESET_ALL}")
|
||||
|
||||
# Explicitly navigate to the authentication page
|
||||
#self.browser.get("https://authenticator.cursor.sh/sign-up")
|
||||
# time.sleep(get_random_wait_time(self.config, 'page_load_wait'))
|
||||
self.browser.get("https://authenticator.cursor.sh/sign-up")
|
||||
time.sleep(get_random_wait_time(self.config, 'page_load_wait'))
|
||||
|
||||
# Call handle_google_auth again to repeat the entire process
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Starting new Google authentication...{Style.RESET_ALL}")
|
||||
@@ -659,7 +662,7 @@ class OAuthHandler:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Usage count: {usage_text}{Style.RESET_ALL}")
|
||||
|
||||
# Check if account is expired
|
||||
if usage_text.strip() == "150 / 150": # Changed back to actual condition
|
||||
if usage_text.strip() == "150 / 150":
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Account has reached maximum usage, deleting...{Style.RESET_ALL}")
|
||||
|
||||
delete_js = """
|
||||
@@ -787,6 +790,48 @@ class OAuthHandler:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to extract auth info: {str(e)}{Style.RESET_ALL}")
|
||||
return False, None
|
||||
|
||||
def _delete_current_account(self):
|
||||
"""Delete the current account using the API"""
|
||||
try:
|
||||
delete_js = """
|
||||
function deleteAccount() {
|
||||
return new Promise((resolve, reject) => {
|
||||
fetch('https://www.cursor.com/api/dashboard/delete-account', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
credentials: 'include'
|
||||
})
|
||||
.then(response => {
|
||||
if (response.status === 200) {
|
||||
resolve('Account deleted successfully');
|
||||
} else {
|
||||
reject('Failed to delete account: ' + response.status);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
reject('Error: ' + error);
|
||||
});
|
||||
});
|
||||
}
|
||||
return deleteAccount();
|
||||
"""
|
||||
|
||||
result = self.browser.run_js(delete_js)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Delete account result: {result}{Style.RESET_ALL}")
|
||||
|
||||
# Navigate back to auth page
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Redirecting to authenticator.cursor.sh...{Style.RESET_ALL}")
|
||||
self.browser.get("https://authenticator.cursor.sh/sign-up")
|
||||
time.sleep(get_random_wait_time(self.config, 'page_load_wait'))
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to delete account: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def main(auth_type, translator=None):
|
||||
"""Main function to handle OAuth authentication
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ def get_cursor_machine_id_path(translator=None) -> str:
|
||||
if not config.has_section('LinuxPaths'):
|
||||
config.add_section('LinuxPaths')
|
||||
config.set('LinuxPaths', 'machine_id_path',
|
||||
os.path.expanduser("~/.config/Cursor/machineId"))
|
||||
os.path.expanduser("~/.config/cursor/machineid"))
|
||||
return config.get('LinuxPaths', 'machine_id_path')
|
||||
|
||||
elif sys.platform == "darwin": # macOS
|
||||
@@ -451,11 +451,11 @@ class MachineIDResetter:
|
||||
|
||||
config.set('LinuxPaths', 'storage_path', os.path.abspath(os.path.join(
|
||||
actual_home,
|
||||
".config/Cursor/User/globalStorage/storage.json"
|
||||
".config/cursor/User/globalStorage/storage.json"
|
||||
)))
|
||||
config.set('LinuxPaths', 'sqlite_path', os.path.abspath(os.path.join(
|
||||
actual_home,
|
||||
".config/Cursor/User/globalStorage/state.vscdb"
|
||||
".config/cursor/User/globalStorage/state.vscdb"
|
||||
)))
|
||||
|
||||
self.db_path = config.get('LinuxPaths', 'storage_path')
|
||||
|
||||
Reference in New Issue
Block a user