forked from mirrors/cursor-free-vip
Compare commits
95 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80e9946294 | ||
|
|
4ef293da81 | ||
|
|
eb6ef6bb3b | ||
|
|
3700239c99 | ||
|
|
a8966de771 | ||
|
|
8943266f6e | ||
|
|
35ed9cb6f6 | ||
|
|
3d1450ced0 | ||
|
|
892fc85efa | ||
|
|
feaf9906ba | ||
|
|
568e38e70c | ||
|
|
ab7281921e | ||
|
|
58b4b0dece | ||
|
|
07bee3207d | ||
|
|
06a9d47dad | ||
|
|
048a69be8f | ||
|
|
0b2081175d | ||
|
|
eb31209b6a | ||
|
|
7a239d3348 | ||
|
|
a9eed9818c | ||
|
|
0260d6be04 | ||
|
|
cff7e05e4e | ||
|
|
9fe6d1ae2c | ||
|
|
b3f905acb6 | ||
|
|
492482199a | ||
|
|
846a044704 | ||
|
|
b131281515 | ||
|
|
b797d93db5 | ||
|
|
e0a7afd835 | ||
|
|
902f6bd6f8 | ||
|
|
56cdeaa116 | ||
|
|
225a24aad5 | ||
|
|
6464306958 | ||
|
|
5d70214a2f | ||
|
|
854e987927 | ||
|
|
8f47801dad | ||
|
|
05e4d7faa9 | ||
|
|
34f5c679a5 | ||
|
|
f90a2916b1 | ||
|
|
7b757c2d57 | ||
|
|
209c58e3f8 | ||
|
|
caa47fad03 | ||
|
|
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 | ||
|
|
2cb788ddc1 | ||
|
|
60ff9897f3 | ||
|
|
21ca0a6b2d | ||
|
|
1dba533e93 | ||
|
|
9146677bc4 | ||
|
|
50366e319a | ||
|
|
ad98bed98d | ||
|
|
6f2ec1b373 | ||
|
|
5574091273 | ||
|
|
0226c9e735 | ||
|
|
375347a7a5 | ||
|
|
8301ea74d5 | ||
|
|
96981a2c37 | ||
|
|
975647765d | ||
|
|
808b1ba3dc | ||
|
|
9595a8792f | ||
|
|
6b5dfab362 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
version:
|
||||
description: 'Version number (e.g. 1.0.9)'
|
||||
required: true
|
||||
default: '1.7.06'
|
||||
default: '1.7.17'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
124
CHANGELOG.md
124
CHANGELOG.md
@@ -1,5 +1,129 @@
|
||||
# Change Log
|
||||
|
||||
## v1.7.18
|
||||
1. Fix: No Write Permission | 修復沒有寫入權限
|
||||
2. Fix: Improve Linux path detection and config handling | 修正 linux 路徑和config寫入讀取
|
||||
3. Fix: Locale path_no_exist missing | 修正 path_no_exist 語言遺失
|
||||
4. Fix: Some Issues | 修復一些問題
|
||||
|
||||
## v1.7.17
|
||||
1. Fix: Remove 10 options Totally Reset Cursor | 修復完全重置 Cursor 選項
|
||||
|
||||
## v1.7.16
|
||||
1. Add bulgarian language | 增加保加利亚语
|
||||
2. Fix: Some Issues | 修復一些問題
|
||||
3. Add: Contributors | 增加貢獻者
|
||||
4. Fix: Total Reset Cursor | 修復完全重置 Cursor
|
||||
5. Add: Display Features and Warnings | 增加顯示功能與警告
|
||||
6. Fix: Totally Reset Cursor | 修復完全重置 Cursor
|
||||
7. Remake: Logo.py Center | 重做 Logo.py 居中
|
||||
|
||||
## v1.7.15
|
||||
1. Fix: Cant Verify the User is Human | 修復無法驗證用戶是否為人類
|
||||
2. Added temporary email & GitHub + Cursor AI registration automation | 增加临时邮箱 & GitHub + Cursor AI 注册自动化
|
||||
3. Added Turkish language support | 增加土耳其语支持
|
||||
4. Removed outdated temporary option in Option 2 | 移除选项2中的过期临时添加项
|
||||
5. Enhanced machine ID reset (Linux, Windows, macOS), bypasses Cursor free trial detection | 机器 ID 重置支持 Linux/Windows/macOS,绕过 Cursor 免费试用检测
|
||||
6. Expanded Cursor AI file detection, deep removal of leftover trial files | 扩展 Cursor AI 文件检测,深度清理残留试用文件
|
||||
7. Optimized logging, replaced print with logging module, added verification steps | 日志优化,统一采用 logging 模块,增加验证步骤提示
|
||||
8. Added retry mechanism for email verification | 增加邮箱验证重试机制
|
||||
9. Automated GitHub OAuth login for Cursor AI | 自动 GitHub OAuth 登录 Cursor AI
|
||||
10. Saved registered GitHub accounts and timestamps | 保存 GitHub 账户和注册时间戳
|
||||
11. Added user confirmation before execution | 添加用户确认步骤,防止误操作
|
||||
12. Displayed feature list & warnings before actions | 显示功能与风险警告
|
||||
13. Improved Selenium flow and error handling | 增强 Selenium 流程与错误处理
|
||||
14. Added Chrome process tracking and cleanup | 增加 Chrome 进程跟踪和清理
|
||||
|
||||
## 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 整合的問題。
|
||||
|
||||
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 | 增加完全重置多語言支持
|
||||
|
||||
## v1.7.09
|
||||
1. Add: Development Version Check | 增加開發版本檢查
|
||||
2. Remove: Github Trial Reset | 移除 Github 試用重置
|
||||
3. Fixed: Some Issues | 修復一些問題
|
||||
|
||||
## v1.7.08
|
||||
1. Add: Google OAuth Authentication | 增加 Google OAuth 認證
|
||||
2. Add: GitHub OAuth Authentication | 增加 GitHub OAuth 認證
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[](https://github.com/yeongpin/cursor-free-vip/releases/latest)
|
||||
[](https://creativecommons.org/licenses/by-nc-nd/4.0/)
|
||||
[](https://github.com/yeongpin/cursor-free-vip/stargazers)
|
||||
[](https://github.com/yeongpin/cursor-free-vip/releases/latest)
|
||||
[](https://github.com/yeongpin/cursor-free-vip/releases/latest)
|
||||
|
||||
</p>
|
||||
<h4>Support Latest 0.47.x Version | 支持最新 0.47.x 版本</h4>
|
||||
@@ -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-22_19-53-10.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,14 +169,14 @@ 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!
|
||||
|
||||
|
||||
<a href="https://github.com/yeongpin/cursor-free-vip/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=yeongpin/cursor-free-vip" />
|
||||
<img src="https://contrib.rocks/image?repo=yeongpin/cursor-free-vip&preview=true&max=&columns=" />
|
||||
</a>
|
||||
<br /><br />
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
701
github_cursor_register.py
Normal file
701
github_cursor_register.py
Normal file
@@ -0,0 +1,701 @@
|
||||
import os
|
||||
import time
|
||||
import uuid
|
||||
import json
|
||||
import random
|
||||
import string
|
||||
import requests
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from webdriver_manager.chrome import ChromeDriverManager
|
||||
import logging
|
||||
import platform
|
||||
from colorama import Fore, Style, init
|
||||
from selenium.common.exceptions import TimeoutException, WebDriverException, NoSuchElementException
|
||||
import shutil
|
||||
|
||||
# Initialize colorama
|
||||
init()
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
||||
|
||||
# Define emoji constants
|
||||
EMOJI = {
|
||||
'START': '🚀',
|
||||
'FORM': '📝',
|
||||
'VERIFY': '🔄',
|
||||
'PASSWORD': '🔑',
|
||||
'CODE': '📱',
|
||||
'DONE': '✨',
|
||||
'ERROR': '❌',
|
||||
'WAIT': '⏳',
|
||||
'SUCCESS': '✅',
|
||||
'MAIL': '📧',
|
||||
'KEY': '🔐',
|
||||
'UPDATE': '🔄',
|
||||
'INFO': 'ℹ️',
|
||||
'EMAIL': '📧',
|
||||
'REFRESH': '🔄',
|
||||
'LINK': '🔗',
|
||||
'WARNING': '⚠️'
|
||||
}
|
||||
|
||||
class GitHubCursorRegistration:
|
||||
def __init__(self, translator=None):
|
||||
self.translator = translator
|
||||
# Set browser to visible mode
|
||||
os.environ['BROWSER_HEADLESS'] = 'False'
|
||||
self.browser = None
|
||||
self.email_address = None
|
||||
|
||||
# Generate random credentials
|
||||
self.github_username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
|
||||
self.github_password = ''.join(random.choices(string.ascii_letters + string.digits + string.punctuation, k=16))
|
||||
|
||||
def setup_browser(self):
|
||||
"""Setup and configure the web browser"""
|
||||
try:
|
||||
print(f"{Fore.CYAN}{EMOJI['START']} Setting up browser...{Style.RESET_ALL}")
|
||||
|
||||
options = Options()
|
||||
options.add_argument('--incognito')
|
||||
options.add_argument('--no-sandbox')
|
||||
options.add_argument('--disable-dev-shm-usage')
|
||||
options.add_argument('--window-size=1920,1080')
|
||||
options.add_argument('--disable-notifications')
|
||||
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36')
|
||||
|
||||
self.browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
|
||||
self.browser.set_page_load_timeout(30)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to setup browser: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def get_temp_email(self):
|
||||
"""Get a temporary email address using YOPmail"""
|
||||
try:
|
||||
if not self.browser:
|
||||
if not self.setup_browser():
|
||||
return False
|
||||
|
||||
print(f"{Fore.CYAN}{EMOJI['MAIL']} Generating temporary email address...{Style.RESET_ALL}")
|
||||
self.browser.get("https://yopmail.com/")
|
||||
time.sleep(2)
|
||||
|
||||
# Generate a realistic username
|
||||
first_names = ["john", "sara", "michael", "emma", "david", "jennifer", "robert", "lisa"]
|
||||
last_names = ["smith", "johnson", "williams", "brown", "jones", "miller", "davis", "garcia"]
|
||||
|
||||
random_first = random.choice(first_names)
|
||||
random_last = random.choice(last_names)
|
||||
random_num = random.randint(100, 999)
|
||||
|
||||
username = f"{random_first}.{random_last}{random_num}"
|
||||
|
||||
# Enter the username and check inbox
|
||||
email_field = self.browser.find_element(By.XPATH, "//input[@id='login']")
|
||||
if email_field:
|
||||
email_field.clear()
|
||||
email_field.send_keys(username)
|
||||
time.sleep(1)
|
||||
|
||||
# Click the check button
|
||||
check_button = self.browser.find_element(By.XPATH, "//button[@title='Check Inbox' or @class='sbut' or contains(@onclick, 'ver')]")
|
||||
if check_button:
|
||||
check_button.click()
|
||||
time.sleep(2)
|
||||
self.email_address = f"{username}@yopmail.com"
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Temp email created: {self.email_address}{Style.RESET_ALL}")
|
||||
return True
|
||||
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to create YOPmail address{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error getting temporary email: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def register_github(self):
|
||||
"""Register a new GitHub account"""
|
||||
if not self.email_address:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} No email address available{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
if not self.browser:
|
||||
if not self.setup_browser():
|
||||
return False
|
||||
|
||||
try:
|
||||
print(f"{Fore.CYAN}{EMOJI['FORM']} Registering GitHub account...{Style.RESET_ALL}")
|
||||
self.browser.get("https://github.com/join")
|
||||
time.sleep(3)
|
||||
|
||||
# Fill in the registration form
|
||||
WebDriverWait(self.browser, 15).until(EC.visibility_of_element_located((By.ID, "user_login")))
|
||||
self.browser.find_element(By.ID, "user_login").send_keys(self.github_username)
|
||||
self.browser.find_element(By.ID, "user_email").send_keys(self.email_address)
|
||||
self.browser.find_element(By.ID, "user_password").send_keys(self.github_password)
|
||||
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} GitHub username: {self.github_username}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} GitHub password: {self.github_password}{Style.RESET_ALL}")
|
||||
|
||||
# Check for any notice or popup and handle it
|
||||
try:
|
||||
signup_button = self.browser.find_element(By.ID, "signup_button")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Clicking sign up button...{Style.RESET_ALL}")
|
||||
signup_button.click()
|
||||
except NoSuchElementException:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Signup button not found, trying alternative selector{Style.RESET_ALL}")
|
||||
buttons = self.browser.find_elements(By.TAG_NAME, "button")
|
||||
for button in buttons:
|
||||
if "Sign up" in button.text:
|
||||
button.click()
|
||||
break
|
||||
|
||||
# Wait for page transition and check for CAPTCHA
|
||||
time.sleep(5)
|
||||
|
||||
# Check if registration was successful or if CAPTCHA appeared
|
||||
current_url = self.browser.current_url
|
||||
|
||||
# Look for CAPTCHA in URL or on page
|
||||
if "captcha" in current_url.lower() or "are you a robot" in self.browser.page_source.lower():
|
||||
print(f"{Fore.YELLOW}{EMOJI['WAIT']} CAPTCHA detected, please complete it manually{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} You have 60 seconds to solve the CAPTCHA...{Style.RESET_ALL}")
|
||||
|
||||
# Wait for user to solve CAPTCHA (60 seconds max)
|
||||
for i in range(60):
|
||||
current_url = self.browser.current_url
|
||||
if "captcha" not in current_url.lower() and "are you a robot" not in self.browser.page_source.lower():
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} CAPTCHA completed successfully{Style.RESET_ALL}")
|
||||
break
|
||||
time.sleep(1)
|
||||
if i % 10 == 0 and i > 0:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WAIT']} Still waiting for CAPTCHA completion... {60-i} seconds remaining{Style.RESET_ALL}")
|
||||
|
||||
# Check if CAPTCHA was solved after waiting
|
||||
if "captcha" in self.browser.current_url.lower() or "are you a robot" in self.browser.page_source.lower():
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} CAPTCHA not solved within time limit{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Do you want more time to solve the CAPTCHA? (yes/no){Style.RESET_ALL}")
|
||||
response = input().lower().strip()
|
||||
if response in ['yes', 'y']:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Press Enter when you've completed the CAPTCHA...{Style.RESET_ALL}")
|
||||
input()
|
||||
if "captcha" in self.browser.current_url.lower() or "are you a robot" in self.browser.page_source.lower():
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} CAPTCHA still not solved{Style.RESET_ALL}")
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
# Wait for registration to complete
|
||||
time.sleep(5)
|
||||
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} GitHub account registered{Style.RESET_ALL}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to register GitHub account: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def check_email_verification(self):
|
||||
"""Check for GitHub verification email and click the verification link"""
|
||||
if not self.email_address or not self.browser:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Email or browser not available{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
try:
|
||||
print(f"{Fore.CYAN}{EMOJI['EMAIL']} Checking for verification email...{Style.RESET_ALL}")
|
||||
|
||||
# Extract username from email for YOPmail
|
||||
username = self.email_address.split('@')[0]
|
||||
|
||||
max_attempts = 10
|
||||
for attempt in range(1, max_attempts + 1):
|
||||
print(f"{Fore.CYAN}{EMOJI['REFRESH']} Checking YOPmail inbox (attempt {attempt}/{max_attempts})...{Style.RESET_ALL}")
|
||||
|
||||
# Go to YOPmail inbox
|
||||
self.browser.get(f"https://yopmail.com/en/wm")
|
||||
time.sleep(2)
|
||||
|
||||
# Enter email address
|
||||
try:
|
||||
email_input = WebDriverWait(self.browser, 10).until(
|
||||
EC.presence_of_element_located((By.ID, "login"))
|
||||
)
|
||||
email_input.clear()
|
||||
email_input.send_keys(username)
|
||||
|
||||
# Click the check inbox button
|
||||
check_button = self.browser.find_element(By.CSS_SELECTOR, "button[onclick='verif()']")
|
||||
check_button.click()
|
||||
time.sleep(3)
|
||||
|
||||
# Switch to inbox frame
|
||||
iframe = WebDriverWait(self.browser, 10).until(
|
||||
EC.presence_of_element_located((By.ID, "ifinbox"))
|
||||
)
|
||||
self.browser.switch_to.frame(iframe)
|
||||
|
||||
# Look for GitHub email
|
||||
emails = self.browser.find_elements(By.CSS_SELECTOR, "div.m")
|
||||
github_email = None
|
||||
|
||||
for email in emails:
|
||||
if "github" in email.text.lower():
|
||||
github_email = email
|
||||
break
|
||||
|
||||
if github_email:
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} GitHub verification email found{Style.RESET_ALL}")
|
||||
github_email.click()
|
||||
time.sleep(2)
|
||||
|
||||
# Switch back to default content
|
||||
self.browser.switch_to.default_content()
|
||||
|
||||
# Switch to email content frame
|
||||
iframe = WebDriverWait(self.browser, 10).until(
|
||||
EC.presence_of_element_located((By.ID, "ifmail"))
|
||||
)
|
||||
self.browser.switch_to.frame(iframe)
|
||||
|
||||
# Find verification link
|
||||
try:
|
||||
# Look for the verification button or link
|
||||
verification_elements = self.browser.find_elements(By.XPATH, "//a[contains(text(), 'Verify') or contains(text(), 'verify') or contains(@href, 'verify')]")
|
||||
|
||||
if verification_elements:
|
||||
verification_link = verification_elements[0].get_attribute('href')
|
||||
print(f"{Fore.CYAN}{EMOJI['LINK']} Found verification link{Style.RESET_ALL}")
|
||||
|
||||
# Open the verification link in the same window
|
||||
self.browser.get(verification_link)
|
||||
time.sleep(5)
|
||||
|
||||
# Check if verification was successful
|
||||
if "verified" in self.browser.page_source.lower() or "successful" in self.browser.page_source.lower():
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Email verified successfully{Style.RESET_ALL}")
|
||||
return True
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Email verification page loaded but success not confirmed{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Please check if verification was successful manually and press Enter to continue...{Style.RESET_ALL}")
|
||||
input()
|
||||
return True
|
||||
else:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} No verification link found in email{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error extracting verification link: {str(e)}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WAIT']} No GitHub verification email yet, waiting... ({attempt}/{max_attempts}){Style.RESET_ALL}")
|
||||
time.sleep(15) # Wait before checking again
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error checking email: {str(e)}{Style.RESET_ALL}")
|
||||
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} No verification email received after {max_attempts} attempts{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Do you want to check manually? (yes/no){Style.RESET_ALL}")
|
||||
response = input().lower().strip()
|
||||
if response in ['yes', 'y']:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Please check your YOPmail inbox manually at: https://yopmail.com/en/wm")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Username: {username}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Press Enter when you've verified the email...{Style.RESET_ALL}")
|
||||
input()
|
||||
return True
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to check verification email: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def register_cursor(self):
|
||||
"""Register with Cursor using GitHub"""
|
||||
if not self.browser:
|
||||
if not self.setup_browser():
|
||||
return False
|
||||
|
||||
try:
|
||||
print(f"{Fore.CYAN}{EMOJI['KEY']} Registering with Cursor using GitHub...{Style.RESET_ALL}")
|
||||
|
||||
# Navigate to Cursor login page
|
||||
self.browser.get("https://cursor.sh/login")
|
||||
time.sleep(3)
|
||||
|
||||
try:
|
||||
# Look for GitHub login button
|
||||
github_buttons = WebDriverWait(self.browser, 15).until(
|
||||
EC.presence_of_all_elements_located((By.XPATH, "//button[contains(., 'GitHub') or contains(@class, 'github')]"))
|
||||
)
|
||||
|
||||
if not github_buttons:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} GitHub login button not found{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
# Click the first GitHub button
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Clicking GitHub login button...{Style.RESET_ALL}")
|
||||
github_buttons[0].click()
|
||||
time.sleep(5)
|
||||
|
||||
# Check if we're redirected to GitHub login
|
||||
current_url = self.browser.current_url
|
||||
if "github.com" in current_url:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Redirected to GitHub login{Style.RESET_ALL}")
|
||||
|
||||
# Check if we need to log in to GitHub
|
||||
if "login" in current_url:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Logging into GitHub...{Style.RESET_ALL}")
|
||||
|
||||
try:
|
||||
# Enter GitHub credentials
|
||||
username_field = WebDriverWait(self.browser, 10).until(
|
||||
EC.presence_of_element_located((By.ID, "login_field"))
|
||||
)
|
||||
username_field.send_keys(self.github_username)
|
||||
|
||||
password_field = self.browser.find_element(By.ID, "password")
|
||||
password_field.send_keys(self.github_password)
|
||||
|
||||
# Click sign in
|
||||
signin_button = self.browser.find_element(By.CSS_SELECTOR, "input[type='submit']")
|
||||
signin_button.click()
|
||||
time.sleep(5)
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error during GitHub login: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
# Check if we're on the authorization page
|
||||
if "authorize" in self.browser.current_url:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Authorizing Cursor app...{Style.RESET_ALL}")
|
||||
|
||||
try:
|
||||
# Look for authorization button
|
||||
auth_buttons = self.browser.find_elements(By.XPATH, "//button[contains(., 'Authorize') or contains(@class, 'btn-primary')]")
|
||||
|
||||
if auth_buttons:
|
||||
auth_buttons[0].click()
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Cursor authorized with GitHub{Style.RESET_ALL}")
|
||||
time.sleep(5)
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} No authorization button found, GitHub may be already authorized{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error during GitHub authorization: {str(e)}{Style.RESET_ALL}")
|
||||
|
||||
# Wait for Cursor dashboard to load
|
||||
timeout = 30
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
if "cursor.sh" in self.browser.current_url and not "login" in self.browser.current_url:
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Successfully logged into Cursor{Style.RESET_ALL}")
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
if "login" in self.browser.current_url:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to log into Cursor after {timeout} seconds{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
# Wait for dashboard elements to load
|
||||
time.sleep(3)
|
||||
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Cursor registered with GitHub successfully{Style.RESET_ALL}")
|
||||
|
||||
# Now reset the machine ID
|
||||
return self.reset_machine_id()
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Error during Cursor registration: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to register with Cursor: {str(e)}{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
def reset_machine_id(self):
|
||||
"""Reset the Cursor machine ID to bypass limitations"""
|
||||
try:
|
||||
print(f"{Fore.CYAN}{EMOJI['UPDATE']} Resetting Cursor machine ID...{Style.RESET_ALL}")
|
||||
|
||||
# Find Cursor app data location based on platform
|
||||
cursor_data_dir = None
|
||||
if platform.system() == "Windows":
|
||||
appdata = os.getenv('APPDATA')
|
||||
if appdata:
|
||||
cursor_data_dir = os.path.join(appdata, "cursor", "Local Storage", "leveldb")
|
||||
elif platform.system() == "Darwin": # macOS
|
||||
home = os.path.expanduser("~")
|
||||
cursor_data_dir = os.path.join(home, "Library", "Application Support", "cursor", "Local Storage", "leveldb")
|
||||
elif platform.system() == "Linux":
|
||||
home = os.path.expanduser("~")
|
||||
cursor_data_dir = os.path.join(home, ".config", "cursor", "Local Storage", "leveldb")
|
||||
|
||||
if not cursor_data_dir or not os.path.exists(cursor_data_dir):
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Cursor data directory not found at: {cursor_data_dir}{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} You may need to reset the machine ID manually{Style.RESET_ALL}")
|
||||
|
||||
# Try to find the Cursor data directory
|
||||
if platform.system() == "Linux":
|
||||
possible_paths = [
|
||||
os.path.join(os.path.expanduser("~"), ".config", "cursor"),
|
||||
os.path.join(os.path.expanduser("~"), ".cursor")
|
||||
]
|
||||
for path in possible_paths:
|
||||
if os.path.exists(path):
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Found Cursor directory at: {path}{Style.RESET_ALL}")
|
||||
# Look for Local Storage subfolder
|
||||
for root, dirs, files in os.walk(path):
|
||||
if "Local Storage" in dirs:
|
||||
cursor_data_dir = os.path.join(root, "Local Storage", "leveldb")
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Found Cursor data directory at: {cursor_data_dir}{Style.RESET_ALL}")
|
||||
break
|
||||
break
|
||||
|
||||
if cursor_data_dir and os.path.exists(cursor_data_dir):
|
||||
# Generate a new UUID
|
||||
new_machine_id = str(uuid.uuid4())
|
||||
print(f"{Fore.CYAN}{EMOJI['KEY']} New machine ID: {new_machine_id}{Style.RESET_ALL}")
|
||||
|
||||
# Ask for permission to modify files
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} This operation will modify Cursor app data files{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Do you want to continue? (yes/no){Style.RESET_ALL}")
|
||||
response = input().lower().strip()
|
||||
if response not in ['yes', 'y']:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Machine ID reset aborted{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
# Backup the directory
|
||||
backup_dir = cursor_data_dir + "_backup_" + time.strftime("%Y%m%d%H%M%S")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Creating backup of data directory to: {backup_dir}{Style.RESET_ALL}")
|
||||
try:
|
||||
shutil.copytree(cursor_data_dir, backup_dir)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Backup created successfully{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Failed to create backup: {str(e)}{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Continuing without backup...{Style.RESET_ALL}")
|
||||
|
||||
# Find and modify files containing the machine ID
|
||||
modified = False
|
||||
for filename in os.listdir(cursor_data_dir):
|
||||
if filename.endswith(".log") or filename.endswith(".ldb"):
|
||||
file_path = os.path.join(cursor_data_dir, filename)
|
||||
try:
|
||||
with open(file_path, "rb") as f:
|
||||
content = f.read()
|
||||
|
||||
# Look for patterns that might contain machine ID
|
||||
if b"machineId" in content:
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} Found machineId reference in: {filename}{Style.RESET_ALL}")
|
||||
modified = True
|
||||
|
||||
# For safety, don't modify the binary files directly
|
||||
# Instead, instruct user to uninstall and reinstall Cursor
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Binary files found that may contain machine ID{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} For best results, please:{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} 1. Close Cursor if it's running{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} 2. Uninstall Cursor completely{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} 3. Reinstall Cursor{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} 4. Login with your new GitHub account{Style.RESET_ALL}")
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Error processing file {filename}: {str(e)}{Style.RESET_ALL}")
|
||||
|
||||
if not modified:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} No machine ID references found in data files{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} You may need to reinstall Cursor for a complete reset{Style.RESET_ALL}")
|
||||
|
||||
# Save credentials before returning
|
||||
self.save_credentials()
|
||||
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Machine ID reset process completed{Style.RESET_ALL}")
|
||||
return True
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['WARNING']} Cursor data directory not found{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} You may need to manually reset the machine ID by reinstalling Cursor{Style.RESET_ALL}")
|
||||
|
||||
# Still save credentials
|
||||
self.save_credentials()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to reset machine ID: {str(e)}{Style.RESET_ALL}")
|
||||
# Still save credentials even if machine ID reset fails
|
||||
self.save_credentials()
|
||||
return False
|
||||
|
||||
def save_credentials(self):
|
||||
"""Save the generated credentials to a file"""
|
||||
try:
|
||||
if not self.email_address or not self.github_username or not self.github_password:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} No credentials to save{Style.RESET_ALL}")
|
||||
return False
|
||||
|
||||
output_file = "github_cursor_accounts.txt"
|
||||
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
credentials = {
|
||||
"timestamp": timestamp,
|
||||
"github_username": self.github_username,
|
||||
"github_password": self.github_password,
|
||||
"email": self.email_address
|
||||
}
|
||||
|
||||
credentials_json = json.dumps(credentials)
|
||||
|
||||
# Check if file exists and create if not
|
||||
file_exists = os.path.exists(output_file)
|
||||
|
||||
with open(output_file, "a") as f:
|
||||
if not file_exists:
|
||||
f.write("# GitHub + Cursor AI Accounts\n")
|
||||
f.write("# Format: JSON with timestamp, github_username, github_password, email\n\n")
|
||||
|
||||
f.write(credentials_json + "\n")
|
||||
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} Credentials saved to: {output_file}{Style.RESET_ALL}")
|
||||
|
||||
# Print a summary
|
||||
print(f"\n{Fore.GREEN}{EMOJI['SUCCESS']} Registration Summary:{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • GitHub Username: {self.github_username}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • GitHub Password: {self.github_password}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • Email Address: {self.email_address}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • Saved to: {output_file}{Style.RESET_ALL}\n")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} Failed to save credentials: {str(e)}{Style.RESET_ALL}")
|
||||
print(f"\n{Fore.YELLOW}{EMOJI['WARNING']} Make sure to copy these credentials manually:{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • GitHub Username: {self.github_username}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • GitHub Password: {self.github_password}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN} • Email Address: {self.email_address}{Style.RESET_ALL}\n")
|
||||
return False
|
||||
|
||||
def cleanup(self):
|
||||
"""Clean up resources"""
|
||||
if self.browser:
|
||||
try:
|
||||
self.browser.quit()
|
||||
except:
|
||||
pass
|
||||
|
||||
def start_registration(self):
|
||||
"""Start the GitHub Cursor registration process"""
|
||||
try:
|
||||
# Step 1: Get temporary email
|
||||
if not self.get_temp_email():
|
||||
return False
|
||||
|
||||
# Step 2: Register GitHub account
|
||||
if not self.register_github():
|
||||
return False
|
||||
|
||||
# Step 3: Check and verify email
|
||||
if not self.check_email_verification():
|
||||
return False
|
||||
|
||||
# Step 4: Register Cursor with GitHub
|
||||
if not self.register_cursor():
|
||||
return False
|
||||
|
||||
# Step 5: Reset machine ID
|
||||
self.reset_machine_id()
|
||||
|
||||
return True
|
||||
finally:
|
||||
self.cleanup()
|
||||
|
||||
def display_features_and_warnings(translator=None):
|
||||
"""Display features and warnings before proceeding"""
|
||||
if translator:
|
||||
print(f"\n🚀 {translator.get('github_register.title')}")
|
||||
print("=====================================")
|
||||
print(f"{translator.get('github_register.features_header')}:")
|
||||
print(f" - {translator.get('github_register.feature1')}")
|
||||
print(f" - {translator.get('github_register.feature2')}")
|
||||
print(f" - {translator.get('github_register.feature3')}")
|
||||
print(f" - {translator.get('github_register.feature4')}")
|
||||
print(f" - {translator.get('github_register.feature5')}")
|
||||
print(f" - {translator.get('github_register.feature6')}")
|
||||
print(f"\n⚠️ {translator.get('github_register.warnings_header')}:")
|
||||
print(f" - {translator.get('github_register.warning1')}")
|
||||
print(f" - {translator.get('github_register.warning2')}")
|
||||
print(f" - {translator.get('github_register.warning3')}")
|
||||
print(f" - {translator.get('github_register.warning4')}")
|
||||
print("=====================================\n")
|
||||
else:
|
||||
print("\n🚀 GitHub + Cursor AI Registration Automation")
|
||||
print("=====================================")
|
||||
print("Features:")
|
||||
print(" - Creates a temporary email using YOPmail")
|
||||
print(" - Registers a new GitHub account with random credentials")
|
||||
print(" - Verifies the GitHub email automatically")
|
||||
print(" - Logs into Cursor AI using GitHub authentication")
|
||||
print(" - Resets the machine ID to bypass trial detection")
|
||||
print(" - Saves all credentials to a file")
|
||||
print("\n⚠️ Warnings:")
|
||||
print(" - This script automates account creation, which may violate GitHub/Cursor terms of service")
|
||||
print(" - Requires internet access and administrative privileges")
|
||||
print(" - CAPTCHA or additional verification may interrupt automation")
|
||||
print(" - Use responsibly and at your own risk")
|
||||
print("=====================================\n")
|
||||
|
||||
def get_user_confirmation(translator=None):
|
||||
"""Prompt the user for confirmation to proceed"""
|
||||
while True:
|
||||
if translator:
|
||||
response = input(f"{translator.get('github_register.confirm')} (yes/no): ").lower().strip()
|
||||
else:
|
||||
response = input("Do you want to proceed with GitHub + Cursor AI registration? (yes/no): ").lower().strip()
|
||||
|
||||
if response in ['yes', 'y']:
|
||||
return True
|
||||
elif response in ['no', 'n']:
|
||||
if translator:
|
||||
print(f"❌ {translator.get('github_register.cancelled')}")
|
||||
else:
|
||||
print("❌ Operation cancelled.")
|
||||
return False
|
||||
else:
|
||||
if translator:
|
||||
print(f"{translator.get('github_register.invalid_choice')}")
|
||||
else:
|
||||
print("Please enter 'yes' or 'no'.")
|
||||
|
||||
def main(translator=None):
|
||||
"""Main function to run the GitHub Cursor registration process"""
|
||||
logging.info(f"{Fore.CYAN} {translator.get('github_register.starting_automation')}{Style.RESET_ALL}")
|
||||
|
||||
# Display features and warnings
|
||||
display_features_and_warnings(translator)
|
||||
|
||||
# Get user confirmation
|
||||
if not get_user_confirmation(translator):
|
||||
return
|
||||
|
||||
# Start registration process
|
||||
registration = GitHubCursorRegistration(translator)
|
||||
success = registration.start_registration()
|
||||
|
||||
# Display final message
|
||||
if success:
|
||||
print(f"\n{Fore.GREEN}{EMOJI['DONE']} {translator.get('github_register.completed_successfully')}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} {translator.get('github_register.github_username')}: {registration.github_username}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} {translator.get('github_register.github_password')}: {registration.github_password}{Style.RESET_ALL}")
|
||||
print(f"{Fore.CYAN}{EMOJI['INFO']} {translator.get('github_register.email')}: {registration.email_address}{Style.RESET_ALL}")
|
||||
print(f"\n{Fore.CYAN}{EMOJI['INFO']} {translator.get('github_register.credentials_saved')}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"\n{Fore.RED}{EMOJI['ERROR']} {translator.get('github_register.registration_encountered_issues')}{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('github_register.check_browser_windows_for_manual_intervention_or_try_again_later')}{Style.RESET_ALL}")
|
||||
|
||||
# Wait for user acknowledgment
|
||||
if translator:
|
||||
input(f"\n{EMOJI['INFO']} {translator.get('register.press_enter')}...")
|
||||
else:
|
||||
input(f"\n{EMOJI['INFO']} Press Enter to continue...")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
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 |
BIN
images/new_2025-03-22_19-53-10.png
Normal file
BIN
images/new_2025-03-22_19-53-10.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 112 KiB |
392
locales/bg.json
Normal file
392
locales/bg.json
Normal file
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"menu": {
|
||||
"title": "Възможни избори",
|
||||
"exit": "Затвори програмата",
|
||||
"reset": "Нулирай ид-то на компютъра",
|
||||
"register": "Регистрирай нов Курсор акаунт",
|
||||
"register_google": "Регистрирай се с Google акаунт",
|
||||
"register_github": "Регистрирай се с GitHub акаунт",
|
||||
"register_manual": "Регистрирай се със свой имейл по избор",
|
||||
"quit": "Затвори приложението Курсор",
|
||||
"select_language": "Избери език",
|
||||
"es": "Spanish",
|
||||
"input_choice": "Моля, въведете своя избор ({choices})",
|
||||
"invalid_choice": "Невалиден избор. Моля, въведете избор от {choices}.",
|
||||
"program_terminated": "Програмата беше затворена от вас",
|
||||
"error_occurred": "Възникна грешка: {error}. Опитайте отново",
|
||||
"press_enter": "Натиснете Enter, за да излезете",
|
||||
"disable_auto_update": "Спрете автоматичните ъпдейти на Курсор",
|
||||
"lifetime_access_enabled": "ДОЖИВОТЕН ДОСТЪП Е АКТИВИРАН",
|
||||
"totally_reset": "Нулирайте изцяло Курсор",
|
||||
"outdate": "Изтекъл срок",
|
||||
"temp_github_register": "Временно регистриране с GitHub",
|
||||
"coming_soon": "Очаквайте скоро"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese",
|
||||
"nl": "Dutch",
|
||||
"de": "German",
|
||||
"fr": "French",
|
||||
"pt": "Portuguese",
|
||||
"ru": "Russian",
|
||||
"tr": "Turkish",
|
||||
"bg": "Bulgarian",
|
||||
"es": "Spanish"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Започни излизането от Курсор",
|
||||
"no_process": "Няма съществуващ процес, засягащ Курсор",
|
||||
"terminating": "Прекратяване на процес {pid}",
|
||||
"waiting": "Изчакване на процеса да приключи",
|
||||
"success": "Всички процеси, свързани с Курсор, бяха прекратени",
|
||||
"timeout": "Таймаут на процеса: {pids}",
|
||||
"error": "Възникна грешка: {error}"
|
||||
},
|
||||
"reset": {
|
||||
"title": "",
|
||||
"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": "Текуща версия на Курсор: {version}",
|
||||
"patch_completed": "Корекцията на getMachineId беше успешно завършена",
|
||||
"patch_failed": "Грешка при прилагане на корекция за getMachineId: {error}",
|
||||
"version_check_passed": "Проверката на версията на Курсор беше успешна",
|
||||
"file_modified": "Файлът беше променен",
|
||||
"version_less_than_0_45": "Версията на Курсор е < 0.45.0, корекцията на getMachineId се пропуска",
|
||||
"detecting_version": "Откриване на версията на Курсор",
|
||||
"patching_getmachineid": "Прилагане на корекция за getMachineId",
|
||||
"version_greater_than_0_45": "Версията на Курсор е >= 0.45.0, прилага се корекция за getMachineId",
|
||||
"permission_denied": "Достъпът беше отказан: {error}",
|
||||
"backup_created": "Резервното копие беше създадено",
|
||||
"update_success": "Актуализацията беше успешна",
|
||||
"update_failed": "Грешка при актуализация: {error}",
|
||||
"windows_machine_guid_updated": "Windows машинното 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": "Версията на Курсор е твърде ниска: {version} < 0.45.0"
|
||||
},
|
||||
"register": {
|
||||
"title": "Инструмент за регистрация в Курсор",
|
||||
"start": "Започване на процеса на регистрация...",
|
||||
"handling_turnstile": "Обработка на проверка за сигурност...",
|
||||
"retry_verification": "Опит за повторна проверка...",
|
||||
"detect_turnstile": "Проверка на защитната врата...",
|
||||
"verification_success": "Проверката за сигурност беше успешна",
|
||||
"starting_browser": "Стартиране на браузъра...",
|
||||
"form_success": "Формата беше успешно изпратена",
|
||||
"browser_started": "Браузърът беше успешно стартиран",
|
||||
"waiting_for_second_verification": "Изчакване на втората проверка по имейл...",
|
||||
"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": "Обработка на защитната врата",
|
||||
"no_turnstile": "Няма защитна врата",
|
||||
"turnstile_passed": "Защитната врата беше премината",
|
||||
"verification_start": "Започване на получаване на код за потвърждение",
|
||||
"verification_timeout": "Времето за получаване на код за потвърждение изтече",
|
||||
"verification_not_found": "Кодът за потвърждение не беше намерен",
|
||||
"try_get_code": "Опит | {attempt} Получаване на код за потвърждение | Оставащо време: {time}s",
|
||||
"get_account": "Получаване на информация за акаунта",
|
||||
"get_token": "Получаване на токен за сесия на Курсор",
|
||||
"token_success": "Токенът беше успешно получен",
|
||||
"token_attempt": "Опит | {attempt} опита за получаване на токен | Ще бъде опит отново след {time}s",
|
||||
"token_max_attempts": "Достигнат максимален брой опити ({max}) | Неуспешно получаване на токен",
|
||||
"token_failed": "Грешка при получаване на токен: {error}",
|
||||
"account_error": "Грешка при получаване на информация за акаунта: {error}",
|
||||
"press_enter": "Натиснете Enter, за да излезете",
|
||||
"browser_start": "Стартиране на браузъра",
|
||||
"open_mailbox": "Отваряне на страницата на пощенската кутия",
|
||||
"email_error": "Грешка при получаване на имейл адрес",
|
||||
"setup_error": "Грешка при настройка на имейл: {error}",
|
||||
"start_getting_verification_code": "Започване на получаване на код за потвърждение, ще бъде опит след 60 секунди",
|
||||
"get_verification_code_timeout": "Времето за получаване на код за потвърждение изтече",
|
||||
"get_verification_code_success": "Кодът за потвърждение беше успешно получен",
|
||||
"try_get_verification_code": "Опит | {attempt} Получаване на код за потвърждение | Оставащо време: {remaining_time}s",
|
||||
"verification_code_filled": "Кодът за потвърждение беше попълнен",
|
||||
"login_success_and_jump_to_settings_page": "Успешен вход и преход към страницата с настройки",
|
||||
"detect_login_page": "Открита е страница за вход, започване на влизане...",
|
||||
"cursor_registration_completed": "Регистрацията в Курсор беше завършена!",
|
||||
"set_password": "Задаване на парола",
|
||||
"basic_info_submitted": "Основните данни бяха изпратени",
|
||||
"cursor_auth_info_updated": "Информацията за удостоверяване на Курсор беше актуализирана",
|
||||
"cursor_auth_info_update_failed": "Грешка при актуализиране на информацията за удостоверяване на Курсор",
|
||||
"reset_machine_id": "Нулиране на машинното ID",
|
||||
"account_info_saved": "Информацията за акаунта беше запазена",
|
||||
"save_account_info_failed": "Грешка при запазване на информацията за акаунта",
|
||||
"get_email_address": "Получаване на имейл адрес",
|
||||
"update_cursor_auth_info": "Актуализиране на информацията за удостоверяване на Курсор",
|
||||
"register_process_error": "Грешка в процеса на регистрация: {error}",
|
||||
"setting_password": "Задаване на парола",
|
||||
"manual_code_input": "Ръчно въвеждане на код",
|
||||
"manual_email_input": "Ръчно въвеждане на имейл",
|
||||
"password": "Парола",
|
||||
"first_name": "Име",
|
||||
"last_name": "Фамилия",
|
||||
"exit_signal": "Сигнал за изход",
|
||||
"email_address": "Имейл адрес",
|
||||
"config_created": "Конфигурацията беше създадена",
|
||||
"verification_failed": "Проверката беше неуспешна",
|
||||
"verification_error": "Грешка при проверка: {error}",
|
||||
"config_option_added": "Добавена е опция за конфигурация: {option}",
|
||||
"config_updated": "Конфигурацията беше актуализирана",
|
||||
"password_submitted": "Паролата беше изпратена",
|
||||
"total_usage": "Общо използване: {usage}",
|
||||
"setting_on_password": "Задаване на парола",
|
||||
"getting_code": "Получаване на код за потвърждение, ще бъде опит след 60 секунди",
|
||||
"human_verify_error": "Не може да се потвърди, че потребителят е човек. Опитва се отново...",
|
||||
"max_retries_reached": "Достигнат максимален брой опити. Регистрацията беше неуспешна."
|
||||
},
|
||||
"auth": {
|
||||
"title": "Управление на удостоверяването на Курсор",
|
||||
"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": "Създаване на нов имейл",
|
||||
"blocked_domain": "Блокиран домейн",
|
||||
"select_domain": "Избиране на случаен домейн",
|
||||
"copy_email": "Копиране на имейл адрес",
|
||||
"enter_mailbox": "Влизане в пощенската кутия",
|
||||
"refresh_mailbox": "Опресняване на пощенската кутия",
|
||||
"check_verification": "Проверка на кода за потвърждение",
|
||||
"verification_found": "Кодът за потвърждение беше намерен",
|
||||
"verification_not_found": "Кодът за потвърждение не беше намерен",
|
||||
"browser_error": "Грешка при контрол на браузъра: {error}",
|
||||
"navigation_error": "Грешка при навигация: {error}",
|
||||
"email_copy_error": "Грешка при копиране на имейл: {error}",
|
||||
"mailbox_error": "Грешка в пощенската кутия: {error}",
|
||||
"token_saved_to_file": "Токенът беше запазен във файла cursor_tokens.txt",
|
||||
"navigate_to": "Навигиране към {url}",
|
||||
"generate_email_success": "Имейлът беше успешно създаден",
|
||||
"select_email_domain": "Избор на домейн за имейл",
|
||||
"select_email_domain_success": "Успешен избор на домейн за имейл",
|
||||
"get_email_name": "Получаване на име на имейл",
|
||||
"get_email_name_success": "Успешно получаване на име на имейл",
|
||||
"get_email_address": "Получаване на имейл адрес",
|
||||
"get_email_address_success": "Успешно получаване на имейл адрес",
|
||||
"enter_mailbox_success": "Успешно влизане в пощенската кутия",
|
||||
"found_verification_code": "Кодът за потвърждение беше намерен",
|
||||
"get_cursor_session_token": "Получаване на токен за сесия на Курсор",
|
||||
"get_cursor_session_token_success": "Успешно получаване на токен за сесия на Курсор",
|
||||
"get_cursor_session_token_failed": "Грешка при получаване на токен за сесия на Курсор",
|
||||
"save_token_failed": "Грешка при запазване на токен",
|
||||
"database_updated_successfully": "Базата данни беше успешно актуализирана",
|
||||
"database_connection_closed": "Връзката с базата данни беше затворена",
|
||||
"no_valid_verification_code": "Няма валиден код за потвърждение"
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "Стартиране на браузъра",
|
||||
"visiting_site": "Посещение на сайтове за имейл домейни",
|
||||
"create_success": "Имейлът беше успешно създаден",
|
||||
"create_failed": "Грешка при създаване на имейл",
|
||||
"create_error": "Грешка при създаване на имейл: {error}",
|
||||
"refreshing": "Опресняване на имейл",
|
||||
"refresh_success": "Имейлът беше успешно опреснен",
|
||||
"refresh_error": "Грешка при опресняване на имейл: {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": "Имейл адрес",
|
||||
"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}s",
|
||||
"blocked_domains_loaded_timeout_error": "Грешка при време за зареждане на блокирани домейни: {error}",
|
||||
"available_domains_loaded": "Налични домейни са заредени: {count}",
|
||||
"domains_filtered": "Филтрирани домейни: {count}",
|
||||
"trying_to_create_email": "Опит за създаване на имейл: {email}",
|
||||
"domain_blocked": "Домейнът е блокиран: {domain}"
|
||||
},
|
||||
"update": {
|
||||
"title": "Деактивиране на автоматичните актуализации на Курсор",
|
||||
"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": "Пълно нулиране на Курсор",
|
||||
"checking_config": "Проверка на конфигурационния файл",
|
||||
"config_not_found": "Конфигурационният файл не беше намерен",
|
||||
"no_permission": "Конфигурационният файл не може да бъде прочетен или записан. Моля, проверете разрешенията на файла",
|
||||
"reading_config": "Четене на текущата конфигурация",
|
||||
"creating_backup": "Създаване на резервно копие на конфигурацията",
|
||||
"backup_exists": "Резервното копие вече съществува. Стъпката за резервно копие се пропуска",
|
||||
"generating_new_machine_id": "Генериране на ново машинно ID",
|
||||
"saving_new_config": "Запазване на новата конфигурация в JSON",
|
||||
"success": "Курсор беше успешно нулиран",
|
||||
"error": "Грешка при нулиране на Курсор: {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": "Пълно премахване на настройките и конфигурациите на Курсор AI",
|
||||
"feature_2": "Изчистване на всички кеширани данни, включително историята и командите на AI",
|
||||
"feature_3": "Нулиране на машинното ID за заобикаляне на ограниченията за пробен период",
|
||||
"feature_4": "Генериране на нови случайни машинни идентификатори",
|
||||
"feature_5": "Премахване на персонализирани разширения и предпочитания",
|
||||
"feature_6": "Нулиране на информацията за пробния период и активиране",
|
||||
"feature_7": "Дълбоко сканиране за скрити файлове, свързани с лицензи и пробен период",
|
||||
"feature_8": "Безопасно запазване на файлове и приложения, които не са свързани с Курсор",
|
||||
"feature_9": "Съвместимост с Windows, macOS и Linux",
|
||||
"disclaimer_title": "ПРАВНО ИЗВЕСТВИЕ",
|
||||
"disclaimer_1": "Този инструмент ще изтрие за постоянно всички настройки на Курсор AI,",
|
||||
"disclaimer_2": "конфигурации и кеширани данни. Това действие е необратимо.",
|
||||
"disclaimer_3": "Вашите кодови файлове НЯМА да бъдат засегнати и този инструмент",
|
||||
"disclaimer_4": "е проектиран специално да се фокусира върху файловете на редактора на Курсор AI и механизмите за откриване на пробен период.",
|
||||
"disclaimer_5": "Другите приложения на вашата система няма да бъдат засегнати.",
|
||||
"disclaimer_6": "След като използвате този инструмент, ще трябва да преинсталирате Курсор AI.",
|
||||
"disclaimer_7": "Вие носите отговорността за използването му",
|
||||
"confirm_title": "Сигурни ли сте, че искате да продължите?",
|
||||
"confirm_1": "Това действие ще изтрие всички настройки на Курсор AI,",
|
||||
"confirm_2": "конфигурации и кеширани данни. Това действие е необратимо.",
|
||||
"confirm_3": "Вашите кодови файлове НЯМА да бъдат засегнати и този инструмент",
|
||||
"confirm_4": "е проектиран специално да се фокусира върху файловете на редактора на Курсор AI и механизмите за откриване на пробен период.",
|
||||
"confirm_5": "Другите приложения на вашата система няма да бъдат засегнати.",
|
||||
"confirm_6": "След като използвате този инструмент, ще трябва да преинсталирате Курсор AI.",
|
||||
"confirm_7": "Вие носите отговорността за използването му",
|
||||
"invalid_choice": "Моля, въведете 'Y' или 'n'",
|
||||
"skipped_for_safety": "Пропуснато за безопасност (не е свързано с Курсор): {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": "Нулиране на редактора на Курсор 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": "Курсор AI беше напълно нулиран и ограниченията за пробен период бяха заобиколени!",
|
||||
"reset_log_2": "Моля, рестартирайте системата си, за да влязат в сила промените.",
|
||||
"reset_log_3": "Ще трябва да преинсталирате Курсор AI и сега трябва да имате нов пробен период.",
|
||||
"reset_log_4": "За най-добри резултати, помислете за следното:",
|
||||
"reset_log_5": "Използвайте различен имейл адрес при регистрация за нов пробен период",
|
||||
"reset_log_6": "Ако е възможно, използвайте VPN за промяна на IP адреса си",
|
||||
"reset_log_7": "Изчистете бисквитките и кеша на браузъра си, преди да посетите уебсайта на Курсор AI",
|
||||
"reset_log_8": "Ако проблемите продължават, опитайте да инсталирате Курсор AI на друго място",
|
||||
"reset_log_9": "Ако срещнете проблеми, посетете Github Issue Tracker и създайте проблем на 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": "Проверка на Electron localStorage файлове",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "Няма намерени допълнителни файлове за лиценз/пробен период при дълбоко сканиране",
|
||||
"removing_electron_localstorage_files": "Премахване на Electron localStorage файлове",
|
||||
"electron_localstorage_files_removed": "Electron localStorage файлове бяха премахнати",
|
||||
"electron_localstorage_files_removal_error": "Грешка при премахване на Electron localStorage файлове: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Премахването на Electron localStorage файлове беше завършено"
|
||||
}
|
||||
}
|
||||
380
locales/de.json
Normal file
380
locales/de.json
Normal file
@@ -0,0 +1,380 @@
|
||||
{
|
||||
"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",
|
||||
"outdate": "Veraltet",
|
||||
"temp_github_register": "Temporäre GitHub-Registrierung",
|
||||
"admin_required": "Ausführen als ausführbare Datei, Administratorrechte erforderlich.",
|
||||
"admin_required_continue": "Mit der aktuellen Version fortfahren...",
|
||||
"coming_soon": "Bald verfügbar"
|
||||
},
|
||||
"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",
|
||||
"es": "Spanisch"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
181
locales/en.json
181
locales/en.json
@@ -14,13 +14,29 @@
|
||||
"program_terminated": "Program was terminated by user",
|
||||
"error_occurred": "An error occurred: {error}. Please try again",
|
||||
"press_enter": "Press Enter to Exit",
|
||||
"disable_auto_update": "Disable Cursor Auto-Update"
|
||||
"disable_auto_update": "Disable Cursor Auto-Update",
|
||||
"lifetime_access_enabled": "LIFETIME ACCESS ENABLED",
|
||||
"totally_reset": "Totally Reset Cursor",
|
||||
"outdate": "Outdated",
|
||||
"temp_github_register": "Temporary GitHub Register",
|
||||
"admin_required": "Running as executable, administrator privileges required.",
|
||||
"admin_required_continue": "Continuing without administrator privileges.",
|
||||
"coming_soon": "Coming Soon",
|
||||
"fixed_soon": "Fixed Soon"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"vi": "Vietnamese",
|
||||
"nl": "Dutch",
|
||||
"de": "German",
|
||||
"fr": "French",
|
||||
"pt": "Portuguese",
|
||||
"ru": "Russian",
|
||||
"tr": "Turkish",
|
||||
"bg": "Bulgarian",
|
||||
"es": "Spanish"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Start Quitting Cursor",
|
||||
@@ -87,8 +103,9 @@
|
||||
"package_not_found": "Package.json Not Found: {path}",
|
||||
"check_version_failed": "Check Version Failed: {error}",
|
||||
"stack_trace": "Stack Trace",
|
||||
"version_too_low": "Cursor Version Too Low: {version} < 0.45.0"
|
||||
|
||||
"version_too_low": "Cursor Version Too Low: {version} < 0.45.0",
|
||||
"no_write_permission": "No Write Permission: {path}",
|
||||
"path_not_found": "Path Not Found: {path}"
|
||||
},
|
||||
"register": {
|
||||
"title": "Cursor Registration Tool",
|
||||
@@ -165,7 +182,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",
|
||||
@@ -223,7 +242,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}",
|
||||
@@ -254,7 +273,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",
|
||||
@@ -278,6 +298,147 @@
|
||||
"continue_anyway": "Continuing with current version...",
|
||||
"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'."
|
||||
}
|
||||
}
|
||||
"invalid_choice": "Invalid choice. Please enter 'Y' or 'n'.",
|
||||
"development_version": "Development Version {current} > {latest}",
|
||||
"changelog_title": "Changelog"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Totally Reset Cursor",
|
||||
"checking_config": "Checking Config File",
|
||||
"config_not_found": "Config File Not Found",
|
||||
"no_permission": "Cannot Read or Write Config File, Please Check File Permissions",
|
||||
"reading_config": "Reading Current Config",
|
||||
"creating_backup": "Creating Config Backup",
|
||||
"backup_exists": "Backup File Already Exists, Skipping Backup Step",
|
||||
"generating_new_machine_id": "Generating New Machine ID",
|
||||
"saving_new_config": "Saving New Config to JSON",
|
||||
"success": "Cursor Reset Successfully",
|
||||
"error": "Cursor Reset Failed: {error}",
|
||||
"press_enter": "Press Enter to Exit",
|
||||
"reset_machine_id": "Reset Machine ID",
|
||||
"database_connection_closed": "Database Connection Closed",
|
||||
"database_updated_successfully": "Database Updated Successfully",
|
||||
"connected_to_database": "Connected to Database",
|
||||
"updating_pair": "Updating Key-Value Pair",
|
||||
"db_not_found": "Database file not found at: {path}",
|
||||
"db_permission_error": "Cannot access database file. Please check permissions",
|
||||
"db_connection_error": "Failed to connect to database: {error}",
|
||||
"feature_title": "FEATURES",
|
||||
"feature_1": "Complete removal of Cursor AI settings and configurations",
|
||||
"feature_2": "Clears all cached data including AI history and prompts",
|
||||
"feature_3": "Resets machine ID to bypass trial detection",
|
||||
"feature_4": "Creates new randomized machine identifiers",
|
||||
"feature_5": "Removes custom extensions and preferences",
|
||||
"feature_6": "Resets trial information and activation data",
|
||||
"feature_7": "Deep scan for hidden license and trial-related files",
|
||||
"feature_8": "Safely preserves non-Cursor files and applications",
|
||||
"feature_9": "Compatible with Windows, macOS, and Linux",
|
||||
"disclaimer_title": "DISCLAIMER",
|
||||
"disclaimer_1": "This tool will permanently delete all Cursor AI settings,",
|
||||
"disclaimer_2": "configurations, and cached data. This action cannot be undone.",
|
||||
"disclaimer_3": "Your code files will NOT be affected, and the tool is designed",
|
||||
"disclaimer_4": "to only target Cursor AI editor files and trial detection mechanisms.",
|
||||
"disclaimer_5": "Other applications on your system will not be affected.",
|
||||
"disclaimer_6": "You will need to set up Cursor AI again after running this tool.",
|
||||
"disclaimer_7": "Use at your own risk",
|
||||
"confirm_title": "Are you sure you want to proceed?",
|
||||
"confirm_1": "This action will delete all Cursor AI settings,",
|
||||
"confirm_2": "configurations, and cached data. This action cannot be undone.",
|
||||
"confirm_3": "Your code files will NOT be affected, and the tool is designed",
|
||||
"confirm_4": "to only target Cursor AI editor files and trial detection mechanisms.",
|
||||
"confirm_5": "Other applications on your system will not be affected.",
|
||||
"confirm_6": "You will need to set up Cursor AI again after running this tool.",
|
||||
"confirm_7": "Use at your own risk",
|
||||
"invalid_choice": "Please enter 'Y' or 'n'",
|
||||
"skipped_for_safety": "Skipped for safety (not Cursor-related): {path}",
|
||||
"deleted": "Deleted: {path}",
|
||||
"error_deleting": "Error deleting {path}: {error}",
|
||||
"not_found": "File not found: {path}",
|
||||
"resetting_machine_id": "Resetting machine identifiers to bypass trial detection...",
|
||||
"created_machine_id": "Created new machine ID: {path}",
|
||||
"error_creating_machine_id": "Error creating machine ID file {path}: {error}",
|
||||
"error_searching": "Error searching for files in {path}: {error}",
|
||||
"created_extended_trial_info": "Created new extended trial info: {path}",
|
||||
"error_creating_trial_info": "Error creating trial info file {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Resetting Cursor AI Editor... Please wait.",
|
||||
"reset_cancelled": "Reset cancelled. Exiting without making any changes.",
|
||||
"windows_machine_id_modification_skipped": "Windows machine ID modification skipped: {error}",
|
||||
"linux_machine_id_modification_skipped": "Linux machine-id modification skipped: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Note: Complete machine ID reset may require running as administrator",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Note: Complete system machine-id reset may require sudo privileges",
|
||||
"windows_registry_instructions": "📝 NOTE: For complete reset on Windows, you might also need to clean registry entries.",
|
||||
"windows_registry_instructions_2": " Run 'regedit' and search for keys containing 'Cursor' or 'CursorAI' under HKEY_CURRENT_USER\\Software\\ and delete them.\n",
|
||||
"reset_log_1": "Cursor AI has been fully reset and trial detection bypassed!",
|
||||
"reset_log_2": "Please restart your system for changes to take effect.",
|
||||
"reset_log_3": "You will need to reinstall Cursor AI and should now have a fresh trial period.",
|
||||
"reset_log_4": "For best results, consider also:",
|
||||
"reset_log_5": "Use a different email address when registering for a new trial",
|
||||
"reset_log_6": "If available, use a VPN to change your IP address",
|
||||
"reset_log_7": "Clear your browser cookies and cache before visiting Cursor AI's website",
|
||||
"reset_log_8": "If issues persist, try installing Cursor AI in a different location",
|
||||
"reset_log_9": "If you encounter any issues, go to Github Issue Tracker and create an issue at https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"unexpected_error": "An unexpected error occurred: {error}",
|
||||
"report_issue": "Please report this issue to Github Issue Tracker at https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"keyboard_interrupt": "Process interrupted by user. Exiting...",
|
||||
"return_to_main_menu": "Returning to main menu...",
|
||||
"process_interrupted": "Process interrupted. Exiting...",
|
||||
"press_enter_to_return_to_main_menu": "Press Enter to return to main menu...",
|
||||
"removing_known": "Removing known trial/license files",
|
||||
"performing_deep_scan": "Performing deep scan for additional trial/license files",
|
||||
"found_additional_potential_license_trial_files": "Found {count} additional potential license/trial files",
|
||||
"checking_for_electron_localstorage_files": "Checking for Electron localStorage files",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "No additional license/trial files found in deep scan",
|
||||
"removing_electron_localstorage_files": "Removing Electron localStorage files",
|
||||
"electron_localstorage_files_removed": "Electron localStorage files removed",
|
||||
"electron_localstorage_files_removal_error": "Error removing Electron localStorage files: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Electron localStorage files removal completed",
|
||||
"warning_title": "WARNING",
|
||||
"warning_1": "This action will delete all Cursor AI settings,",
|
||||
"warning_2": "configurations, and cached data. This action cannot be undone.",
|
||||
"warning_3": "Your code files will NOT be affected, and the tool is designed",
|
||||
"warning_4": "to only target Cursor AI editor files and trial detection mechanisms.",
|
||||
"warning_5": "Other applications on your system will not be affected.",
|
||||
"warning_6": "You will need to set up Cursor AI again after running this tool.",
|
||||
"warning_7": "Use at your own risk",
|
||||
"removed": "Removed: {path}",
|
||||
"failed_to_reset_machine_guid": "Failed to reset machine GUID",
|
||||
"failed_to_remove": "Failed to remove: {path}",
|
||||
"failed_to_delete_file": "Failed to delete file: {path}",
|
||||
"failed_to_delete_directory": "Failed to delete directory: {path}",
|
||||
"failed_to_delete_file_or_directory": "Failed to delete file or directory: {path}",
|
||||
"deep_scanning": "Performing deep scan for additional trial/license files",
|
||||
"resetting_cursor": "Resetting Cursor AI Editor... Please wait.",
|
||||
"completed_in": "Completed in {time} seconds",
|
||||
"cursor_reset_completed": "Cursor AI Editor has been fully reset and trial detection bypassed!",
|
||||
"cursor_reset_failed": "Cursor AI Editor reset failed: {error}",
|
||||
"cursor_reset_cancelled": "Cursor AI Editor reset cancelled. Exiting without making any changes.",
|
||||
"operation_cancelled": "Operation cancelled. Exiting without making any changes."
|
||||
},
|
||||
"github_register": {
|
||||
"title": "GitHub + Cursor AI Registration Automation",
|
||||
"features_header": "Features",
|
||||
"feature1": "Generates a temporary email using 1secmail.",
|
||||
"feature2": "Registers a new GitHub account with random credentials.",
|
||||
"feature3": "Verifies the GitHub email automatically.",
|
||||
"feature4": "Logs into Cursor AI using GitHub authentication.",
|
||||
"feature5": "Resets the machine ID to bypass trial detection.",
|
||||
"feature6": "Saves all credentials to a file.",
|
||||
"warnings_header": "Warnings",
|
||||
"warning1": "This script automates account creation, which may violate GitHub/Cursor terms of service.",
|
||||
"warning2": "Requires internet access and administrative privileges.",
|
||||
"warning3": "CAPTCHA or additional verification may interrupt automation.",
|
||||
"warning4": "Use responsibly and at your own risk.",
|
||||
"confirm": "Are you sure you want to proceed?",
|
||||
"invalid_choice": "Invalid choice. Please enter 'yes' or 'no'",
|
||||
"cancelled": "Operation cancelled",
|
||||
"program_terminated": "Program terminated by user",
|
||||
"starting_automation": "Starting automation...",
|
||||
"github_username": "GitHub Username",
|
||||
"github_password": "GitHub Password",
|
||||
"email_address": "Email Address",
|
||||
"credentials_saved": "These credentials have been saved to github_cursor_accounts.txt",
|
||||
"completed_successfully": "GitHub + Cursor registration completed successfully!",
|
||||
"registration_encountered_issues": "GitHub + Cursor registration encountered issues.",
|
||||
"check_browser_windows_for_manual_intervention_or_try_again_later": "Check browser windows for manual intervention or try again later."
|
||||
}
|
||||
}
|
||||
443
locales/es.json
Normal file
443
locales/es.json
Normal file
@@ -0,0 +1,443 @@
|
||||
{
|
||||
"menu": {
|
||||
"title": "Opciones Disponibles",
|
||||
"exit": "Salir del Programa",
|
||||
"reset": "Restablecer ID de Máquina",
|
||||
"register": "Registrar Nueva Cuenta de Cursor",
|
||||
"register_google": "Registrarse con Cuenta de Google",
|
||||
"register_github": "Registrarse con Cuenta de GitHub",
|
||||
"register_manual": "Registrar Cursor con Correo Personalizado",
|
||||
"quit": "Cerrar Aplicación Cursor",
|
||||
"select_language": "Cambiar Idioma",
|
||||
"input_choice": "Por favor, ingrese su elección ({choices})",
|
||||
"invalid_choice": "Selección inválida. Por favor ingrese un número de {choices}",
|
||||
"program_terminated": "El programa fue terminado por el usuario",
|
||||
"error_occurred": "Ocurrió un error: {error}. Por favor intente de nuevo",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"disable_auto_update": "Deshabilitar Actualización Automática de Cursor",
|
||||
"lifetime_access_enabled": "ACCESO DE POR VIDA ACTIVADO",
|
||||
"totally_reset": "Restablecer Cursor Completamente",
|
||||
"outdate": "Desactualizado",
|
||||
"temp_github_register": "Registro Temporal de GitHub",
|
||||
"admin_required": "Ejecutando como ejecutable, se requieren privilegios de administrador.",
|
||||
"admin_required_continue": "Continuando sin privilegios de administrador.",
|
||||
"coming_soon": "Próximamente",
|
||||
"fixed_soon": "Arreglado Pronto"
|
||||
},
|
||||
"languages": {
|
||||
"en": "Inglés",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamita",
|
||||
"nl": "Holandés",
|
||||
"de": "Alemán",
|
||||
"fr": "Francés",
|
||||
"pt": "Portugués",
|
||||
"ru": "Ruso",
|
||||
"tr": "Turco",
|
||||
"bg": "Búlgaro",
|
||||
"es": "Español"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Comenzando a Cerrar Cursor",
|
||||
"no_process": "No Hay Procesos de Cursor en Ejecución",
|
||||
"terminating": "Terminando Proceso {pid}",
|
||||
"waiting": "Esperando que el Proceso Termine",
|
||||
"success": "Todos los Procesos de Cursor Cerrados",
|
||||
"timeout": "Tiempo de Espera Agotado: {pids}",
|
||||
"error": "Ocurrió un Error: {error}"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Herramienta de Restablecimiento de ID de Máquina de Cursor",
|
||||
"checking": "Verificando Archivo de Configuración",
|
||||
"not_found": "Archivo de Configuración No Encontrado",
|
||||
"no_permission": "No se Puede Leer o Escribir el Archivo de Configuración, Verifique los Permisos",
|
||||
"reading": "Leyendo Configuración Actual",
|
||||
"creating_backup": "Creando Copia de Seguridad de la Configuración",
|
||||
"backup_exists": "El Archivo de Respaldo ya Existe, Omitiendo Paso de Respaldo",
|
||||
"generating": "Generando Nuevo ID de Máquina",
|
||||
"saving_json": "Guardando Nueva Configuración en JSON",
|
||||
"success": "ID de Máquina Restablecido Exitosamente",
|
||||
"new_id": "Nuevo ID de Máquina",
|
||||
"permission_error": "Error de Permisos: {error}",
|
||||
"run_as_admin": "Por Favor Intente Ejecutar Este Programa como Administrador",
|
||||
"process_error": "Error en el Proceso de Restablecimiento: {error}",
|
||||
"updating_sqlite": "Actualizando Base de Datos SQLite",
|
||||
"updating_pair": "Actualizando Par Clave-Valor",
|
||||
"sqlite_success": "Base de Datos SQLite Actualizada Exitosamente",
|
||||
"sqlite_error": "Falló la Actualización de la Base de Datos SQLite: {error}",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"unsupported_os": "Sistema Operativo No Soportado: {os}",
|
||||
"linux_path_not_found": "Ruta de Linux No Encontrada",
|
||||
"updating_system_ids": "Actualizando IDs del Sistema",
|
||||
"system_ids_updated": "IDs del Sistema Actualizados Exitosamente",
|
||||
"system_ids_update_failed": "Falló la Actualización de IDs del Sistema: {error}",
|
||||
"windows_guid_updated": "GUID de Windows Actualizado Exitosamente",
|
||||
"windows_permission_denied": "Permisos de Windows Denegados",
|
||||
"windows_guid_update_failed": "Falló la Actualización del GUID de Windows",
|
||||
"macos_uuid_updated": "UUID de macOS Actualizado Exitosamente",
|
||||
"plutil_command_failed": "Falló el Comando plutil",
|
||||
"start_patching": "Iniciando Parcheo de getMachineId",
|
||||
"macos_uuid_update_failed": "Falló la Actualización del UUID de macOS",
|
||||
"current_version": "Versión Actual de Cursor: {version}",
|
||||
"patch_completed": "Parcheo de getMachineId Completado",
|
||||
"patch_failed": "Falló el Parcheo de getMachineId: {error}",
|
||||
"version_check_passed": "Verificación de Versión de Cursor Exitosa",
|
||||
"file_modified": "Archivo Modificado",
|
||||
"version_less_than_0_45": "Versión de Cursor < 0.45.0, Omitiendo Parcheo de getMachineId",
|
||||
"detecting_version": "Detectando Versión de Cursor",
|
||||
"patching_getmachineid": "Parcheando getMachineId",
|
||||
"version_greater_than_0_45": "Versión de Cursor >= 0.45.0, Parcheando getMachineId",
|
||||
"permission_denied": "Permiso Denegado: {error}",
|
||||
"backup_created": "Copia de Seguridad Creada",
|
||||
"update_success": "Actualización Exitosa",
|
||||
"update_failed": "Falló la Actualización: {error}",
|
||||
"windows_machine_guid_updated": "GUID de Máquina Windows Actualizado Exitosamente",
|
||||
"reading_package_json": "Leyendo package.json {path}",
|
||||
"invalid_json_object": "Objeto JSON Inválido",
|
||||
"no_version_field": "No se Encontró el Campo de Versión en package.json",
|
||||
"version_field_empty": "El Campo de Versión está Vacío",
|
||||
"invalid_version_format": "Formato de Versión Inválido: {version}",
|
||||
"found_version": "Versión Encontrada: {version}",
|
||||
"version_parse_error": "Error al Analizar Versión: {error}",
|
||||
"package_not_found": "Package.json No Encontrado: {path}",
|
||||
"check_version_failed": "Falló la Verificación de Versión: {error}",
|
||||
"stack_trace": "Traza de la Pila",
|
||||
"version_too_low": "Versión de Cursor Muy Baja: {version} < 0.45.0"
|
||||
|
||||
},
|
||||
"register": {
|
||||
"title": "Herramienta de Registro de Cursor",
|
||||
"start": "Iniciando proceso de registro...",
|
||||
"handling_turnstile": "Procesando verificación de seguridad...",
|
||||
"retry_verification": "Reintentando verificación...",
|
||||
"detect_turnstile": "Comprobando verificación de seguridad...",
|
||||
"verification_success": "Verificación de seguridad exitosa",
|
||||
"starting_browser": "Abriendo navegador...",
|
||||
"form_success": "Formulario enviado exitosamente",
|
||||
"browser_started": "Navegador abierto exitosamente",
|
||||
"waiting_for_second_verification": "Esperando verificación por correo electrónico...",
|
||||
"waiting_for_verification_code": "Esperando código de verificación...",
|
||||
"password_success": "Contraseña establecida exitosamente",
|
||||
"password_error": "No se pudo establecer la contraseña: {error}. Por favor intente de nuevo",
|
||||
"waiting_for_page_load": "Cargando página...",
|
||||
"first_verification_passed": "Verificación inicial exitosa",
|
||||
"mailbox": "Acceso exitoso a la bandeja de entrada",
|
||||
"register_start": "Iniciar Registro",
|
||||
"form_submitted": "Formulario Enviado, Iniciando Verificación...",
|
||||
"filling_form": "Rellenando Formulario",
|
||||
"visiting_url": "Visitando URL",
|
||||
"basic_info": "Información Básica Enviada",
|
||||
"handle_turnstile": "Manejar Turnstile",
|
||||
"no_turnstile": "No se Detectó Turnstile",
|
||||
"turnstile_passed": "Turnstile Superado",
|
||||
"verification_start": "Comenzar a Obtener Código de Verificación",
|
||||
"verification_timeout": "Tiempo de Espera Agotado para Código de Verificación",
|
||||
"verification_not_found": "No se Encontró Código de Verificación",
|
||||
"try_get_code": "Intento | {attempt} Obtener Código de Verificación | Tiempo Restante: {time}s",
|
||||
"get_account": "Obteniendo Información de la Cuenta",
|
||||
"get_token": "Obtener Token de Sesión de Cursor",
|
||||
"token_success": "Token Obtenido Exitosamente",
|
||||
"token_attempt": "Intento | {attempt} veces para obtener Token | Se reintentará en {time}s",
|
||||
"token_max_attempts": "Alcanzado Máximo de Intentos ({max}) | No se pudo obtener Token",
|
||||
"token_failed": "Falló al Obtener Token: {error}",
|
||||
"account_error": "Falló al Obtener Información de la Cuenta: {error}",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"browser_start": "Iniciando Navegador",
|
||||
"open_mailbox": "Abriendo Página de Correo",
|
||||
"email_error": "Falló al Obtener Dirección de Correo",
|
||||
"setup_error": "Error de Configuración de Correo: {error}",
|
||||
"start_getting_verification_code": "Comenzando a Obtener Código de Verificación, Se Intentará en 60s",
|
||||
"get_verification_code_timeout": "Tiempo de Espera Agotado para Código de Verificación",
|
||||
"get_verification_code_success": "Código de Verificación Obtenido Exitosamente",
|
||||
"try_get_verification_code": "Intento | {attempt} Obtener Código de Verificación | Tiempo Restante: {remaining_time}s",
|
||||
"verification_code_filled": "Código de Verificación Completado",
|
||||
"login_success_and_jump_to_settings_page": "Inicio de Sesión Exitoso y Salto a Página de Configuración",
|
||||
"detect_login_page": "Página de Inicio de Sesión Detectada, Iniciando Sesión...",
|
||||
"cursor_registration_completed": "¡Registro de Cursor Completado!",
|
||||
"set_password": "Establecer Contraseña",
|
||||
"basic_info_submitted": "Información Básica Enviada",
|
||||
"cursor_auth_info_updated": "Información de Autenticación de Cursor Actualizada",
|
||||
"cursor_auth_info_update_failed": "Falló la Actualización de Información de Autenticación de Cursor",
|
||||
"reset_machine_id": "Restablecer ID de Máquina",
|
||||
"account_info_saved": "Información de Cuenta Guardada",
|
||||
"save_account_info_failed": "Falló al Guardar Información de Cuenta",
|
||||
"get_email_address": "Obtener Dirección de Correo",
|
||||
"update_cursor_auth_info": "Actualizar Información de Autenticación de Cursor",
|
||||
"register_process_error": "Error en el Proceso de Registro: {error}",
|
||||
"setting_password": "Estableciendo Contraseña",
|
||||
"manual_code_input": "Entrada Manual de Código",
|
||||
"manual_email_input": "Entrada Manual de Correo",
|
||||
"password": "Contraseña",
|
||||
"first_name": "Nombre",
|
||||
"last_name": "Apellido",
|
||||
"exit_signal": "Señal de Salida",
|
||||
"email_address": "Dirección de Correo",
|
||||
"config_created": "Configuración Creada",
|
||||
"verification_failed": "Verificación Fallida",
|
||||
"verification_error": "Error de Verificación: {error}",
|
||||
"config_option_added": "Opción de Configuración Añadida: {option}",
|
||||
"config_updated": "Configuración Actualizada",
|
||||
"password_submitted": "Contraseña Enviada",
|
||||
"total_usage": "Uso Total: {usage}",
|
||||
"setting_on_password": "Estableciendo Contraseña",
|
||||
"getting_code": "Obteniendo Código de Verificación, Se Intentará en 60s",
|
||||
"human_verify_error": "No se puede verificar que el usuario es humano. Reintentando...",
|
||||
"max_retries_reached": "Se alcanzó el máximo de intentos. Registro fallido."
|
||||
},
|
||||
"auth": {
|
||||
"title": "Administrador de Autenticación de Cursor",
|
||||
"checking_auth": "Verificando Archivo de Autenticación",
|
||||
"auth_not_found": "Archivo de Autenticación No Encontrado",
|
||||
"auth_file_error": "Error en Archivo de Autenticación: {error}",
|
||||
"reading_auth": "Leyendo Archivo de Autenticación",
|
||||
"updating_auth": "Actualizando Información de Autenticación",
|
||||
"auth_updated": "Información de Autenticación Actualizada Exitosamente",
|
||||
"auth_update_failed": "Falló la Actualización de Información de Autenticación: {error}",
|
||||
"auth_file_created": "Archivo de Autenticación Creado",
|
||||
"auth_file_create_failed": "Falló la Creación del Archivo de Autenticación: {error}",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"reset_machine_id": "Restablecer ID de Máquina",
|
||||
"database_connection_closed": "Conexión a la Base de Datos Cerrada",
|
||||
"database_updated_successfully": "Base de Datos Actualizada Exitosamente",
|
||||
"connected_to_database": "Conectado a la Base de Datos",
|
||||
"updating_pair": "Actualizando Par Clave-Valor",
|
||||
"db_not_found": "Archivo de base de datos no encontrado en: {path}",
|
||||
"db_permission_error": "No se puede acceder al archivo de base de datos. Verifique los permisos",
|
||||
"db_connection_error": "Falló la conexión a la base de datos: {error}"
|
||||
},
|
||||
"control": {
|
||||
"generate_email": "Generando Nuevo Correo",
|
||||
"blocked_domain": "Dominio Bloqueado",
|
||||
"select_domain": "Seleccionando Dominio Aleatorio",
|
||||
"copy_email": "Copiando Dirección de Correo",
|
||||
"enter_mailbox": "Entrando al Buzón de Correo",
|
||||
"refresh_mailbox": "Actualizando Buzón de Correo",
|
||||
"check_verification": "Verificando Código de Verificación",
|
||||
"verification_found": "Código de Verificación Encontrado",
|
||||
"verification_not_found": "No se Encontró Código de Verificación",
|
||||
"browser_error": "Error de Control del Navegador: {error}",
|
||||
"navigation_error": "Error de Navegación: {error}",
|
||||
"email_copy_error": "Error al Copiar Correo: {error}",
|
||||
"mailbox_error": "Error en el Buzón de Correo: {error}",
|
||||
"token_saved_to_file": "Token Guardado en cursor_tokens.txt",
|
||||
"navigate_to": "Navegando a {url}",
|
||||
"generate_email_success": "Generación de Correo Exitosa",
|
||||
"select_email_domain": "Seleccionar Dominio de Correo",
|
||||
"select_email_domain_success": "Selección de Dominio de Correo Exitosa",
|
||||
"get_email_name": "Obtener Nombre de Correo",
|
||||
"get_email_name_success": "Nombre de Correo Obtenido Exitosamente",
|
||||
"get_email_address": "Obtener Dirección de Correo",
|
||||
"get_email_address_success": "Dirección de Correo Obtenida Exitosamente",
|
||||
"enter_mailbox_success": "Entrada al Buzón de Correo Exitosa",
|
||||
"found_verification_code": "Código de Verificación Encontrado",
|
||||
"get_cursor_session_token": "Obtener Token de Sesión de Cursor",
|
||||
"get_cursor_session_token_success": "Token de Sesión de Cursor Obtenido Exitosamente",
|
||||
"get_cursor_session_token_failed": "Falló al Obtener Token de Sesión de Cursor",
|
||||
"save_token_failed": "Falló al Guardar Token",
|
||||
"database_updated_successfully": "Base de Datos Actualizada Exitosamente",
|
||||
"database_connection_closed": "Conexión a la Base de Datos Cerrada",
|
||||
"no_valid_verification_code": "No Hay Código de Verificación Válido"
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "Iniciando Navegador",
|
||||
"visiting_site": "Visitando dominios de correo",
|
||||
"create_success": "Correo Creado Exitosamente",
|
||||
"create_failed": "Falló al Crear Correo",
|
||||
"create_error": "Error en la Creación del Correo: {error}",
|
||||
"refreshing": "Actualizando Correo",
|
||||
"refresh_success": "Correo Actualizado Exitosamente",
|
||||
"refresh_error": "Error al Actualizar Correo: {error}",
|
||||
"refresh_button_not_found": "Botón de Actualización No Encontrado",
|
||||
"verification_found": "Verificación Encontrada",
|
||||
"verification_not_found": "Verificación No Encontrada",
|
||||
"verification_error": "Error de Verificación: {error}",
|
||||
"verification_code_found": "Código de Verificación Encontrado",
|
||||
"verification_code_not_found": "Código de Verificación No Encontrado",
|
||||
"verification_code_error": "Error en el Código de Verificación: {error}",
|
||||
"address": "Dirección de Correo",
|
||||
"all_domains_blocked": "Todos los Dominios Bloqueados, Cambiando Servicio",
|
||||
"no_available_domains_after_filtering": "No Hay Dominios Disponibles Después del Filtrado",
|
||||
"switching_service": "Cambiando al Servicio {service}",
|
||||
"domains_list_error": "Falló al Obtener Lista de Dominios: {error}",
|
||||
"failed_to_get_available_domains": "Falló al Obtener Dominios Disponibles",
|
||||
"domains_excluded": "Dominios Excluidos: {domains}",
|
||||
"failed_to_create_account": "Falló al Crear Cuenta",
|
||||
"account_creation_error": "Error en la Creación de la Cuenta: {error}",
|
||||
"blocked_domains": "Dominios Bloqueados: {domains}",
|
||||
"blocked_domains_loaded": "Dominios Bloqueados Cargados: {count}",
|
||||
"blocked_domains_loaded_error": "Error al Cargar Dominios Bloqueados: {error}",
|
||||
"blocked_domains_loaded_success": "Dominios Bloqueados Cargados Exitosamente",
|
||||
"blocked_domains_loaded_timeout": "Tiempo de Espera Agotado para Cargar Dominios Bloqueados: {timeout}s",
|
||||
"blocked_domains_loaded_timeout_error": "Error de Tiempo de Espera al Cargar Dominios Bloqueados: {error}",
|
||||
"available_domains_loaded": "Dominios Disponibles Cargados: {count}",
|
||||
"domains_filtered": "Dominios Filtrados: {count}",
|
||||
"trying_to_create_email": "Intentando crear correo: {email}",
|
||||
"domain_blocked": "Dominio Bloqueado: {domain}"
|
||||
},
|
||||
"update": {
|
||||
"title": "Deshabilitar Actualización Automática de Cursor",
|
||||
"disable_success": "Actualización Automática Deshabilitada Exitosamente",
|
||||
"disable_failed": "Falló al Deshabilitar Actualización Automática: {error}",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"start_disable": "Comenzar a Deshabilitar Actualización Automática",
|
||||
"killing_processes": "Terminando Procesos",
|
||||
"processes_killed": "Procesos Terminados",
|
||||
"removing_directory": "Eliminando Directorio",
|
||||
"directory_removed": "Directorio Eliminado",
|
||||
"creating_block_file": "Creando Archivo de Bloqueo",
|
||||
"block_file_created": "Archivo de Bloqueo Creado"
|
||||
},
|
||||
"updater": {
|
||||
"checking": "Buscando actualizaciones...",
|
||||
"new_version_available": "¡Nueva versión disponible! (Actual: {current}, Última: {latest})",
|
||||
"updating": "Actualizando a la última versión. El programa se reiniciará automáticamente.",
|
||||
"up_to_date": "Está utilizando la última versión.",
|
||||
"check_failed": "Falló al verificar actualizaciones: {error}",
|
||||
"continue_anyway": "Continuando con la versión actual...",
|
||||
"update_confirm": "¿Desea actualizar a la última versión? (Y/n)",
|
||||
"update_skipped": "Omitiendo actualización.",
|
||||
"invalid_choice": "Elección inválida. Por favor ingrese 'Y' o 'n'.",
|
||||
"development_version": "Versión de Desarrollo {current} > {latest}",
|
||||
"changelog_title": "Registro de Cambios"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Restablecer Cursor Completamente",
|
||||
"checking_config": "Verificando Archivo de Configuración",
|
||||
"config_not_found": "Archivo de Configuración No Encontrado",
|
||||
"no_permission": "No se Puede Leer o Escribir el Archivo de Configuración, Verifique los Permisos",
|
||||
"reading_config": "Leyendo Configuración Actual",
|
||||
"creating_backup": "Creando Copia de Seguridad de la Configuración",
|
||||
"backup_exists": "El Archivo de Respaldo ya Existe, Omitiendo Paso de Respaldo",
|
||||
"generating_new_machine_id": "Generando Nuevo ID de Máquina",
|
||||
"saving_new_config": "Guardando Nueva Configuración en JSON",
|
||||
"success": "Cursor Restablecido Exitosamente",
|
||||
"error": "Falló el Restablecimiento de Cursor: {error}",
|
||||
"press_enter": "Presione Enter para Salir",
|
||||
"reset_machine_id": "Restablecer ID de Máquina",
|
||||
"database_connection_closed": "Conexión a la Base de Datos Cerrada",
|
||||
"database_updated_successfully": "Base de Datos Actualizada Exitosamente",
|
||||
"connected_to_database": "Conectado a la Base de Datos",
|
||||
"updating_pair": "Actualizando Par Clave-Valor",
|
||||
"db_not_found": "Archivo de base de datos no encontrado en: {path}",
|
||||
"db_permission_error": "No se puede acceder al archivo de base de datos. Verifique los permisos",
|
||||
"db_connection_error": "Falló la conexión a la base de datos: {error}",
|
||||
"feature_title": "CARACTERÍSTICAS",
|
||||
"feature_1": "Eliminación completa de configuraciones y ajustes de Cursor AI",
|
||||
"feature_2": "Limpia todos los datos en caché incluyendo historial de IA y peticiones",
|
||||
"feature_3": "Restablece el ID de máquina para evitar la detección de prueba",
|
||||
"feature_4": "Crea nuevos identificadores de máquina aleatorios",
|
||||
"feature_5": "Elimina extensiones personalizadas y preferencias",
|
||||
"feature_6": "Restablece información de prueba y datos de activación",
|
||||
"feature_7": "Escaneo profundo de archivos ocultos relacionados con licencias y pruebas",
|
||||
"feature_8": "Preserva de forma segura archivos y aplicaciones que no son de Cursor",
|
||||
"feature_9": "Compatible con Windows, macOS y Linux",
|
||||
"disclaimer_title": "AVISO IMPORTANTE",
|
||||
"disclaimer_1": "Esta herramienta eliminará permanentemente todas las configuraciones de Cursor AI,",
|
||||
"disclaimer_2": "ajustes y datos en caché. Esta acción no se puede deshacer.",
|
||||
"disclaimer_3": "Sus archivos de código NO se verán afectados, y la herramienta está diseñada",
|
||||
"disclaimer_4": "para dirigirse solo a archivos del editor Cursor AI y mecanismos de detección de prueba.",
|
||||
"disclaimer_5": "Otras aplicaciones en su sistema no se verán afectadas.",
|
||||
"disclaimer_6": "Necesitará configurar Cursor AI nuevamente después de ejecutar esta herramienta.",
|
||||
"disclaimer_7": "Use bajo su propio riesgo",
|
||||
"confirm_title": "¿Está seguro de que desea continuar?",
|
||||
"confirm_1": "Esta acción eliminará todas las configuraciones de Cursor AI,",
|
||||
"confirm_2": "ajustes y datos en caché. Esta acción no se puede deshacer.",
|
||||
"confirm_3": "Sus archivos de código NO se verán afectados, y la herramienta está diseñada",
|
||||
"confirm_4": "para dirigirse solo a archivos del editor Cursor AI y mecanismos de detección de prueba.",
|
||||
"confirm_5": "Otras aplicaciones en su sistema no se verán afectadas.",
|
||||
"confirm_6": "Necesitará configurar Cursor AI nuevamente después de ejecutar esta herramienta.",
|
||||
"confirm_7": "Use bajo su propio riesgo",
|
||||
"invalid_choice": "Por favor ingrese 'Y' o 'n'",
|
||||
"skipped_for_safety": "Omitido por seguridad (no relacionado con Cursor): {path}",
|
||||
"deleted": "Eliminado: {path}",
|
||||
"error_deleting": "Error al eliminar {path}: {error}",
|
||||
"not_found": "Archivo no encontrado: {path}",
|
||||
"resetting_machine_id": "Restableciendo identificadores de máquina para evitar la detección de prueba...",
|
||||
"created_machine_id": "Creado nuevo ID de máquina: {path}",
|
||||
"error_creating_machine_id": "Error al crear archivo de ID de máquina {path}: {error}",
|
||||
"error_searching": "Error al buscar archivos en {path}: {error}",
|
||||
"created_extended_trial_info": "Creada nueva información de prueba extendida: {path}",
|
||||
"error_creating_trial_info": "Error al crear archivo de información de prueba {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Restableciendo Editor Cursor AI... Por favor espere.",
|
||||
"reset_cancelled": "Restablecimiento cancelado. Saliendo sin realizar cambios.",
|
||||
"windows_machine_id_modification_skipped": "Modificación de ID de máquina de Windows omitida: {error}",
|
||||
"linux_machine_id_modification_skipped": "Modificación de machine-id de Linux omitida: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Nota: El restablecimiento completo del ID de máquina puede requerir ejecutar como administrador",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Nota: El restablecimiento completo del machine-id del sistema puede requerir privilegios sudo",
|
||||
"windows_registry_instructions": "📝 NOTA: Para un restablecimiento completo en Windows, es posible que también deba limpiar entradas del registro.",
|
||||
"windows_registry_instructions_2": " Ejecute 'regedit' y busque claves que contengan 'Cursor' o 'CursorAI' bajo HKEY_CURRENT_USER\\Software\\ y elimínelas.",
|
||||
"reset_log_1": "¡Cursor AI ha sido completamente restablecido y se ha evitado la detección de prueba!",
|
||||
"reset_log_2": "Por favor reinicie su sistema para que los cambios surtan efecto.",
|
||||
"reset_log_3": "Necesitará reinstalar Cursor AI y ahora debería tener un nuevo período de prueba.",
|
||||
"reset_log_4": "Para mejores resultados, considere también:",
|
||||
"reset_log_5": "Usar una dirección de correo diferente al registrarse para una nueva prueba",
|
||||
"reset_log_6": "Si está disponible, usar una VPN para cambiar su dirección IP",
|
||||
"reset_log_7": "Limpiar las cookies y caché de su navegador antes de visitar el sitio web de Cursor AI",
|
||||
"reset_log_8": "Si los problemas persisten, intente instalar Cursor AI en una ubicación diferente",
|
||||
"reset_log_9": "Si encuentra algún problema, vaya al Rastreador de Problemas de Github y cree un problema en https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"unexpected_error": "Ocurrió un error inesperado: {error}",
|
||||
"report_issue": "Por favor reporte este problema al Rastreador de Problemas de Github en https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"keyboard_interrupt": "Proceso interrumpido por el usuario. Saliendo...",
|
||||
"return_to_main_menu": "Volviendo al menú principal...",
|
||||
"process_interrupted": "Proceso interrumpido. Saliendo...",
|
||||
"press_enter_to_return_to_main_menu": "Presione Enter para volver al menú principal...",
|
||||
"removing_known": "Eliminando archivos conocidos de prueba/licencia",
|
||||
"performing_deep_scan": "Realizando escaneo profundo para archivos adicionales de prueba/licencia",
|
||||
"found_additional_potential_license_trial_files": "Se encontraron {count} archivos potenciales adicionales de licencia/prueba",
|
||||
"checking_for_electron_localstorage_files": "Verificando archivos de localStorage de Electron",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "No se encontraron archivos adicionales de licencia/prueba en el escaneo profundo",
|
||||
"removing_electron_localstorage_files": "Eliminando archivos de localStorage de Electron",
|
||||
"electron_localstorage_files_removed": "Archivos de localStorage de Electron eliminados",
|
||||
"electron_localstorage_files_removal_error": "Error al eliminar archivos de localStorage de Electron: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Eliminación de archivos de localStorage de Electron completada",
|
||||
"warning_title": "ADVERTENCIA",
|
||||
"warning_1": "Esta acción eliminará todas las configuraciones de Cursor AI,",
|
||||
"warning_2": "ajustes y datos en caché. Esta acción no se puede deshacer.",
|
||||
"warning_3": "Sus archivos de código NO se verán afectados, y la herramienta está diseñada",
|
||||
"warning_4": "para dirigirse solo a archivos del editor Cursor AI y mecanismos de detección de prueba.",
|
||||
"warning_5": "Otras aplicaciones en su sistema no se verán afectadas.",
|
||||
"warning_6": "Necesitará configurar Cursor AI nuevamente después de ejecutar esta herramienta.",
|
||||
"warning_7": "Use bajo su propio riesgo",
|
||||
"removed": "Eliminado: {path}",
|
||||
"failed_to_reset_machine_guid": "Falló al restablecer GUID de máquina",
|
||||
"failed_to_remove": "Falló al eliminar: {path}",
|
||||
"failed_to_delete_file": "Falló al eliminar archivo: {path}",
|
||||
"failed_to_delete_directory": "Falló al eliminar directorio: {path}",
|
||||
"failed_to_delete_file_or_directory": "Falló al eliminar archivo o directorio: {path}",
|
||||
"deep_scanning": "Realizando escaneo profundo para archivos adicionales de prueba/licencia",
|
||||
"resetting_cursor": "Restableciendo Editor Cursor AI... Por favor espere.",
|
||||
"completed_in": "Completado en {time} segundos",
|
||||
"cursor_reset_completed": "¡El Editor Cursor AI ha sido completamente restablecido y se ha evitado la detección de prueba!",
|
||||
"cursor_reset_failed": "Falló el restablecimiento del Editor Cursor AI: {error}",
|
||||
"cursor_reset_cancelled": "Restablecimiento del Editor Cursor AI cancelado. Saliendo sin realizar cambios.",
|
||||
"operation_cancelled": "Operación cancelada. Saliendo sin realizar cambios."
|
||||
},
|
||||
"github_register": {
|
||||
"title": "Automatización de Registro de GitHub + Cursor AI",
|
||||
"features_header": "Características",
|
||||
"feature1": "Genera un correo temporal usando 1secmail.",
|
||||
"feature2": "Registra una nueva cuenta de GitHub con credenciales aleatorias.",
|
||||
"feature3": "Verifica el correo de GitHub automáticamente.",
|
||||
"feature4": "Inicia sesión en Cursor AI usando autenticación de GitHub.",
|
||||
"feature5": "Restablece el ID de máquina para evitar la detección de prueba.",
|
||||
"feature6": "Guarda todas las credenciales en un archivo.",
|
||||
"warnings_header": "Advertencias",
|
||||
"warning1": "Este script automatiza la creación de cuentas, lo que puede violar los términos de servicio de GitHub/Cursor.",
|
||||
"warning2": "Requiere acceso a internet y privilegios administrativos.",
|
||||
"warning3": "CAPTCHA o verificación adicional pueden interrumpir la automatización.",
|
||||
"warning4": "Use responsablemente y bajo su propio riesgo.",
|
||||
"confirm": "¿Está seguro de que desea continuar?",
|
||||
"invalid_choice": "Elección inválida. Por favor ingrese 'yes' o 'no'",
|
||||
"cancelled": "Operación cancelada",
|
||||
"program_terminated": "Programa terminado por el usuario",
|
||||
"starting_automation": "Iniciando automatización...",
|
||||
"github_username": "Nombre de Usuario de GitHub",
|
||||
"github_password": "Contraseña de GitHub",
|
||||
"email_address": "Dirección de Correo",
|
||||
"credentials_saved": "Estas credenciales han sido guardadas en github_cursor_accounts.txt",
|
||||
"completed_successfully": "¡Registro de GitHub + Cursor completado exitosamente!",
|
||||
"registration_encountered_issues": "El registro de GitHub + Cursor encontró problemas.",
|
||||
"check_browser_windows_for_manual_intervention_or_try_again_later": "Revise las ventanas del navegador para intervención manual o intente nuevamente más tarde."
|
||||
}
|
||||
}
|
||||
378
locales/fr.json
Normal file
378
locales/fr.json
Normal file
@@ -0,0 +1,378 @@
|
||||
{
|
||||
"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",
|
||||
"outdate": "Obsolete",
|
||||
"temp_github_register": "Inscription GitHub temporaire",
|
||||
"coming_soon": "Bientôt"
|
||||
},
|
||||
"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",
|
||||
"es": "Espagnol"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
378
locales/nl.json
Normal file
378
locales/nl.json
Normal file
@@ -0,0 +1,378 @@
|
||||
{
|
||||
"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",
|
||||
"outdate": "Verouderd",
|
||||
"temp_github_register": "Tijdelijke GitHub-registratie",
|
||||
"coming_soon": "Binnenkort"
|
||||
},
|
||||
"languages": {
|
||||
"en": "Engels",
|
||||
"zh_cn": "Vereenvoudigd Chinees",
|
||||
"zh_tw": "Traditioneel Chinees",
|
||||
"vi": "Vietnamees",
|
||||
"nl": "Nederlands",
|
||||
"de": "Duits",
|
||||
"fr": "Frans",
|
||||
"pt": "Portugees",
|
||||
"ru": "Russisch",
|
||||
"es": "Spaans"
|
||||
},
|
||||
"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": "Wijzigingslogboek"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
387
locales/pt.json
Normal file
387
locales/pt.json
Normal file
@@ -0,0 +1,387 @@
|
||||
{
|
||||
"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",
|
||||
"outdate": "Obsoleto",
|
||||
"temp_github_register": "Registro temporário do GitHub",
|
||||
"coming_soon": "Em breve"
|
||||
},
|
||||
"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",
|
||||
"es": "Espanhol"
|
||||
},
|
||||
"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 alterações"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
387
locales/ru.json
Normal file
387
locales/ru.json
Normal file
@@ -0,0 +1,387 @@
|
||||
{
|
||||
"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",
|
||||
"outdate": "Устаревший",
|
||||
"temp_github_register": "Временная регистрация GitHub",
|
||||
"coming_soon": "Скоро"
|
||||
},
|
||||
"languages": {
|
||||
"en": "Английский",
|
||||
"zh_cn": "Упрощенный китайский",
|
||||
"zh_tw": "Традиционный китайский",
|
||||
"vi": "Вьетнамский",
|
||||
"nl": "Нидерландский",
|
||||
"de": "Немецкий",
|
||||
"fr": "Французский",
|
||||
"pt": "Бразильский португальский",
|
||||
"ru": "Русский",
|
||||
"es": "Испанский"
|
||||
},
|
||||
"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 завершено"
|
||||
}
|
||||
}
|
||||
390
locales/tr.json
Normal file
390
locales/tr.json
Normal file
@@ -0,0 +1,390 @@
|
||||
{
|
||||
"menu": {
|
||||
"title": "Mevcut Seçenekler",
|
||||
"exit": "Programdan Çık",
|
||||
"reset": "Makine Kimliğini Sıfırla",
|
||||
"register": "Yeni Cursor Hesabı Kaydet",
|
||||
"register_google": "Google Hesabı ile Kayıt Ol",
|
||||
"register_github": "GitHub Hesabı ile Kayıt Ol",
|
||||
"register_manual": "Cursor'ı Özel E-posta ile Kaydet",
|
||||
"quit": "Cursor Uygulamasını Kapat",
|
||||
"select_language": "Dili Değiştir",
|
||||
"input_choice": "Lütfen seçiminizi girin ({choices})",
|
||||
"invalid_choice": "Geçersiz seçim. Lütfen {choices} arasından bir sayı girin",
|
||||
"program_terminated": "Program kullanıcı tarafından sonlandırıldı",
|
||||
"error_occurred": "Bir hata oluştu: {error}. Lütfen tekrar deneyin",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"disable_auto_update": "Cursor Otomatik Güncellemeyi Devre Dışı Bırak",
|
||||
"lifetime_access_enabled": "ÖMÜR BOYU ERİŞİM ETKİNLEŞTİRİLDİ",
|
||||
"totally_reset": "Cursor'ı Tamamen Sıfırla",
|
||||
"outdate": "güncel değil",
|
||||
"temp_github_register": "Geçici GitHub Kaydı",
|
||||
"coming_soon": "Yakında"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese",
|
||||
"nl": "Dutch",
|
||||
"de": "German",
|
||||
"fr": "French",
|
||||
"pt": "Portuguese",
|
||||
"ru": "Russian",
|
||||
"tr": "Turkish",
|
||||
"es": "Spanish"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Cursor'dan Çıkış Başlatılıyor",
|
||||
"no_process": "Çalışan Cursor İşlemi Yok",
|
||||
"terminating": "İşlem Sonlandırılıyor {pid}",
|
||||
"waiting": "İşlemin Çıkması Bekleniyor",
|
||||
"success": "Tüm Cursor İşlemleri Kapatıldı",
|
||||
"timeout": "İşlem Zaman Aşımı: {pids}",
|
||||
"error": "Hata Oluştu: {error}"
|
||||
},
|
||||
"reset": {
|
||||
"title": "Cursor Makine Kimliği Sıfırlama Aracı",
|
||||
"checking": "Yapılandırma Dosyası Kontrol Ediliyor",
|
||||
"not_found": "Yapılandırma Dosyası Bulunamadı",
|
||||
"no_permission": "Yapılandırma Dosyası Okunamıyor veya Yazılamıyor, Lütfen Dosya İzinlerini Kontrol Edin",
|
||||
"reading": "Mevcut Yapılandırma Okunuyor",
|
||||
"creating_backup": "Yapılandırma Yedeği Oluşturuluyor",
|
||||
"backup_exists": "Yedek Dosya Zaten Mevcut, Yedekleme Adımı Atlanıyor",
|
||||
"generating": "Yeni Makine Kimliği Oluşturuluyor",
|
||||
"saving_json": "Yeni Yapılandırma JSON'a Kaydediliyor",
|
||||
"success": "Makine Kimliği Başarıyla Sıfırlandı",
|
||||
"new_id": "Yeni Makine Kimliği",
|
||||
"permission_error": "İzin Hatası: {error}",
|
||||
"run_as_admin": "Lütfen Bu Programı Yönetici Olarak Çalıştırmayı Deneyin",
|
||||
"process_error": "Sıfırlama İşlemi Hatası: {error}",
|
||||
"updating_sqlite": "SQLite Veritabanı Güncelleniyor",
|
||||
"updating_pair": "Anahtar-Değer Çifti Güncelleniyor",
|
||||
"sqlite_success": "SQLite Veritabanı Başarıyla Güncellendi",
|
||||
"sqlite_error": "SQLite Veritabanı Güncellemesi Başarısız: {error}",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"unsupported_os": "Desteklenmeyen İşletim Sistemi: {os}",
|
||||
"linux_path_not_found": "Linux Yolu Bulunamadı",
|
||||
"updating_system_ids": "Sistem Kimlikleri Güncelleniyor",
|
||||
"system_ids_updated": "Sistem Kimlikleri Başarıyla Güncellendi",
|
||||
"system_ids_update_failed": "Sistem Kimlikleri Güncellemesi Başarısız: {error}",
|
||||
"windows_guid_updated": "Windows GUID Başarıyla Güncellendi",
|
||||
"windows_permission_denied": "Windows İzni Reddedildi",
|
||||
"windows_guid_update_failed": "Windows GUID Güncellemesi Başarısız",
|
||||
"macos_uuid_updated": "macOS UUID Başarıyla Güncellendi",
|
||||
"plutil_command_failed": "plutil Komutu Başarısız",
|
||||
"start_patching": "getMachineId Yamalanması Başlatılıyor",
|
||||
"macos_uuid_update_failed": "macOS UUID Güncellemesi Başarısız",
|
||||
"current_version": "Mevcut Cursor Sürümü: {version}",
|
||||
"patch_completed": "getMachineId Yamalama Tamamlandı",
|
||||
"patch_failed": "getMachineId Yamalama Başarısız: {error}",
|
||||
"version_check_passed": "Cursor Sürüm Kontrolü Geçildi",
|
||||
"file_modified": "Dosya Değiştirildi",
|
||||
"version_less_than_0_45": "Cursor Sürümü < 0.45.0, getMachineId Yamalama Atlanıyor",
|
||||
"detecting_version": "Cursor Sürümü Tespit Ediliyor",
|
||||
"patching_getmachineid": "getMachineId Yamalanıyor",
|
||||
"version_greater_than_0_45": "Cursor Sürümü >= 0.45.0, getMachineId Yamalanıyor",
|
||||
"permission_denied": "İzin Reddedildi: {error}",
|
||||
"backup_created": "Yedek Oluşturuldu",
|
||||
"update_success": "Güncelleme Başarılı",
|
||||
"update_failed": "Güncelleme Başarısız: {error}",
|
||||
"windows_machine_guid_updated": "Windows Makine GUID'si Başarıyla Güncellendi",
|
||||
"reading_package_json": "package.json Okunuyor {path}",
|
||||
"invalid_json_object": "Geçersiz JSON Nesnesi",
|
||||
"no_version_field": "package.json İçinde Sürüm Alanı Bulunamadı",
|
||||
"version_field_empty": "Sürüm Alanı Boş",
|
||||
"invalid_version_format": "Geçersiz Sürüm Formatı: {version}",
|
||||
"found_version": "Sürüm Bulundu: {version}",
|
||||
"version_parse_error": "Sürüm Ayrıştırma Hatası: {error}",
|
||||
"package_not_found": "Package.json Bulunamadı: {path}",
|
||||
"check_version_failed": "Sürüm Kontrolü Başarısız: {error}",
|
||||
"stack_trace": "Yığın İzleme",
|
||||
"version_too_low": "Cursor Sürümü Çok Düşük: {version} < 0.45.0"
|
||||
},
|
||||
"register": {
|
||||
"title": "Cursor Kayıt Aracı",
|
||||
"start": "Kayıt işlemi başlatılıyor...",
|
||||
"handling_turnstile": "Güvenlik doğrulaması işleniyor...",
|
||||
"retry_verification": "Doğrulama tekrar deneniyor...",
|
||||
"detect_turnstile": "Güvenlik doğrulaması kontrol ediliyor...",
|
||||
"verification_success": "Güvenlik doğrulaması başarılı",
|
||||
"starting_browser": "Tarayıcı açılıyor...",
|
||||
"form_success": "Form başarıyla gönderildi",
|
||||
"browser_started": "Tarayıcı başarıyla açıldı",
|
||||
"waiting_for_second_verification": "E-posta doğrulaması bekleniyor...",
|
||||
"waiting_for_verification_code": "Doğrulama kodu bekleniyor...",
|
||||
"password_success": "Şifre başarıyla ayarlandı",
|
||||
"password_error": "Şifre ayarlanamadı: {error}. Lütfen tekrar deneyin",
|
||||
"waiting_for_page_load": "Sayfa yükleniyor...",
|
||||
"first_verification_passed": "İlk doğrulama başarılı",
|
||||
"mailbox": "E-posta gelen kutusuna başarıyla erişildi",
|
||||
"register_start": "Kayıt Başlat",
|
||||
"form_submitted": "Form Gönderildi, Doğrulama Başlatılıyor...",
|
||||
"filling_form": "Form Dolduruluyor",
|
||||
"visiting_url": "URL Ziyaret Ediliyor",
|
||||
"basic_info": "Temel Bilgiler Gönderildi",
|
||||
"handle_turnstile": "Turnstile İşleniyor",
|
||||
"no_turnstile": "Turnstile Algılanmadı",
|
||||
"turnstile_passed": "Turnstile Geçildi",
|
||||
"verification_start": "Doğrulama Kodu Alma Başlatılıyor",
|
||||
"verification_timeout": "Doğrulama Kodu Alma Zaman Aşımı",
|
||||
"verification_not_found": "Doğrulama Kodu Bulunamadı",
|
||||
"try_get_code": "Deneme | {attempt} Doğrulama Kodu Al | Kalan Süre: {time}s",
|
||||
"get_account": "Hesap Bilgileri Alınıyor",
|
||||
"get_token": "Cursor Oturum Jetonu Alınıyor",
|
||||
"token_success": "Jeton Başarıyla Alındı",
|
||||
"token_attempt": "Deneme | {attempt} kez Jeton alma denemesi | {time}s içinde tekrar denenecek",
|
||||
"token_max_attempts": "Maksimum Deneme Sayısına Ulaşıldı ({max}) | Jeton alınamadı",
|
||||
"token_failed": "Jeton Alma Başarısız: {error}",
|
||||
"account_error": "Hesap Bilgisi Alma Başarısız: {error}",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"browser_start": "Tarayıcı Başlatılıyor",
|
||||
"open_mailbox": "Posta Kutusu Sayfası Açılıyor",
|
||||
"email_error": "E-posta Adresi Alınamadı",
|
||||
"setup_error": "E-posta Kurulum Hatası: {error}",
|
||||
"start_getting_verification_code": "Doğrulama Kodu Alma Başlatılıyor, 60 saniye içinde denenecek",
|
||||
"get_verification_code_timeout": "Doğrulama Kodu Alma Zaman Aşımı",
|
||||
"get_verification_code_success": "Doğrulama Kodu Alma Başarılı",
|
||||
"try_get_verification_code": "Deneme | {attempt} Doğrulama Kodu Al | Kalan Süre: {remaining_time}s",
|
||||
"verification_code_filled": "Doğrulama Kodu Dolduruldu",
|
||||
"login_success_and_jump_to_settings_page": "Giriş Başarılı ve Ayarlar Sayfasına Yönlendiriliyor",
|
||||
"detect_login_page": "Giriş Sayfası Algılandı, Giriş Başlatılıyor...",
|
||||
"cursor_registration_completed": "Cursor Kaydı Tamamlandı!",
|
||||
"set_password": "Şifre Belirle",
|
||||
"basic_info_submitted": "Temel Bilgiler Gönderildi",
|
||||
"cursor_auth_info_updated": "Cursor Kimlik Bilgileri Güncellendi",
|
||||
"cursor_auth_info_update_failed": "Cursor Kimlik Bilgileri Güncellemesi Başarısız",
|
||||
"reset_machine_id": "Makine Kimliğini Sıfırla",
|
||||
"account_info_saved": "Hesap Bilgileri Kaydedildi",
|
||||
"save_account_info_failed": "Hesap Bilgilerini Kaydetme Başarısız",
|
||||
"get_email_address": "E-posta Adresi Al",
|
||||
"update_cursor_auth_info": "Cursor Kimlik Bilgilerini Güncelle",
|
||||
"register_process_error": "Kayıt İşlemi Hatası: {error}",
|
||||
"setting_password": "Şifre Ayarlanıyor",
|
||||
"manual_code_input": "Manuel Kod Girişi",
|
||||
"manual_email_input": "Manuel E-posta Girişi",
|
||||
"password": "Şifre",
|
||||
"first_name": "Ad",
|
||||
"last_name": "Soyad",
|
||||
"exit_signal": "Çıkış Sinyali",
|
||||
"email_address": "E-posta Adresi",
|
||||
"config_created": "Yapılandırma Oluşturuldu",
|
||||
"verification_failed": "Doğrulama Başarısız",
|
||||
"verification_error": "Doğrulama Hatası: {error}",
|
||||
"config_option_added": "Yapılandırma Seçeneği Eklendi: {option}",
|
||||
"config_updated": "Yapılandırma Güncellendi",
|
||||
"password_submitted": "Şifre Gönderildi",
|
||||
"total_usage": "Toplam Kullanım: {usage}",
|
||||
"setting_on_password": "Şifre Ayarlanıyor",
|
||||
"getting_code": "Doğrulama Kodu Alınıyor, 60 saniye içinde denenecek",
|
||||
"human_verify_error": "Kullanıcının insan olduğu doğrulanamıyor. Tekrar deneniyor...",
|
||||
"max_retries_reached": "Maksimum deneme sayısına ulaşıldı. Kayıt başarısız."
|
||||
},
|
||||
"auth": {
|
||||
"title": "Cursor Kimlik Yöneticisi",
|
||||
"checking_auth": "Kimlik Dosyası Kontrol Ediliyor",
|
||||
"auth_not_found": "Kimlik Dosyası Bulunamadı",
|
||||
"auth_file_error": "Kimlik Dosyası Hatası: {error}",
|
||||
"reading_auth": "Kimlik Dosyası Okunuyor",
|
||||
"updating_auth": "Kimlik Bilgileri Güncelleniyor",
|
||||
"auth_updated": "Kimlik Bilgileri Başarıyla Güncellendi",
|
||||
"auth_update_failed": "Kimlik Bilgileri Güncellemesi Başarısız: {error}",
|
||||
"auth_file_created": "Kimlik Dosyası Oluşturuldu",
|
||||
"auth_file_create_failed": "Kimlik Dosyası Oluşturma Başarısız: {error}",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"reset_machine_id": "Makine Kimliğini Sıfırla",
|
||||
"database_connection_closed": "Veritabanı Bağlantısı Kapatıldı",
|
||||
"database_updated_successfully": "Veritabanı Başarıyla Güncellendi",
|
||||
"connected_to_database": "Veritabanına Bağlanıldı",
|
||||
"updating_pair": "Anahtar-Değer Çifti Güncelleniyor",
|
||||
"db_not_found": "Veritabanı dosyası bulunamadı: {path}",
|
||||
"db_permission_error": "Veritabanı dosyasına erişilemiyor. Lütfen izinleri kontrol edin",
|
||||
"db_connection_error": "Veritabanına bağlantı başarısız: {error}"
|
||||
},
|
||||
"control": {
|
||||
"generate_email": "Yeni E-posta Oluşturuluyor",
|
||||
"blocked_domain": "Engellenmiş Alan Adı",
|
||||
"select_domain": "Rastgele Alan Adı Seçiliyor",
|
||||
"copy_email": "E-posta Adresi Kopyalanıyor",
|
||||
"enter_mailbox": "Posta Kutusuna Giriliyor",
|
||||
"refresh_mailbox": "Posta Kutusu Yenileniyor",
|
||||
"check_verification": "Doğrulama Kodu Kontrol Ediliyor",
|
||||
"verification_found": "Doğrulama Kodu Bulundu",
|
||||
"verification_not_found": "Doğrulama Kodu Bulunamadı",
|
||||
"browser_error": "Tarayıcı Kontrol Hatası: {error}",
|
||||
"navigation_error": "Gezinme Hatası: {error}",
|
||||
"email_copy_error": "E-posta Kopyalama Hatası: {error}",
|
||||
"mailbox_error": "Posta Kutusu Hatası: {error}",
|
||||
"token_saved_to_file": "Jeton cursor_tokens.txt dosyasına kaydedildi",
|
||||
"navigate_to": "{url} adresine gidiliyor",
|
||||
"generate_email_success": "E-posta Oluşturma Başarılı",
|
||||
"select_email_domain": "E-posta Alan Adı Seç",
|
||||
"select_email_domain_success": "E-posta Alan Adı Seçimi Başarılı",
|
||||
"get_email_name": "E-posta Adı Al",
|
||||
"get_email_name_success": "E-posta Adı Alma Başarılı",
|
||||
"get_email_address": "E-posta Adresi Al",
|
||||
"get_email_address_success": "E-posta Adresi Alma Başarılı",
|
||||
"enter_mailbox_success": "Posta Kutusuna Giriş Başarılı",
|
||||
"found_verification_code": "Doğrulama Kodu Bulundu",
|
||||
"get_cursor_session_token": "Cursor Oturum Jetonu Al",
|
||||
"get_cursor_session_token_success": "Cursor Oturum Jetonu Alma Başarılı",
|
||||
"get_cursor_session_token_failed": "Cursor Oturum Jetonu Alma Başarısız",
|
||||
"save_token_failed": "Jeton Kaydetme Başarısız",
|
||||
"database_updated_successfully": "Veritabanı Başarıyla Güncellendi",
|
||||
"database_connection_closed": "Veritabanı Bağlantısı Kapatıldı",
|
||||
"no_valid_verification_code": "Geçerli Doğrulama Kodu Yok"
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "Tarayıcı Başlatılıyor",
|
||||
"visiting_site": "E-posta alan adları ziyaret ediliyor",
|
||||
"create_success": "E-posta Başarıyla Oluşturuldu",
|
||||
"create_failed": "E-posta Oluşturma Başarısız",
|
||||
"create_error": "E-posta Oluşturma Hatası: {error}",
|
||||
"refreshing": "E-posta Yenileniyor",
|
||||
"refresh_success": "E-posta Başarıyla Yenilendi",
|
||||
"refresh_error": "E-posta Yenileme Hatası: {error}",
|
||||
"refresh_button_not_found": "Yenileme Düğmesi Bulunamadı",
|
||||
"verification_found": "Doğrulama Bulundu",
|
||||
"verification_not_found": "Doğrulama Bulunamadı",
|
||||
"verification_error": "Doğrulama Hatası: {error}",
|
||||
"verification_code_found": "Doğrulama Kodu Bulundu",
|
||||
"verification_code_not_found": "Doğrulama Kodu Bulunamadı",
|
||||
"verification_code_error": "Doğrulama Kodu Hatası: {error}",
|
||||
"address": "E-posta Adresi",
|
||||
"all_domains_blocked": "Tüm Alan Adları Engellendi, Servis Değiştiriliyor",
|
||||
"no_available_domains_after_filtering": "Filtrelemeden Sonra Kullanılabilir Alan Adı Yok",
|
||||
"switching_service": "{service} Servisine Geçiliyor",
|
||||
"domains_list_error": "Alan Adları Listesi Alınamadı: {error}",
|
||||
"failed_to_get_available_domains": "Kullanılabilir Alan Adları Alınamadı",
|
||||
"domains_excluded": "Hariç Tutulan Alan Adları: {domains}",
|
||||
"failed_to_create_account": "Hesap Oluşturma Başarısız",
|
||||
"account_creation_error": "Hesap Oluşturma Hatası: {error}",
|
||||
"blocked_domains": "Engellenen Alan Adları: {domains}",
|
||||
"blocked_domains_loaded": "Engellenen Alan Adları Yüklendi: {count}",
|
||||
"blocked_domains_loaded_error": "Engellenen Alan Adları Yükleme Hatası: {error}",
|
||||
"blocked_domains_loaded_success": "Engellenen Alan Adları Başarıyla Yüklendi",
|
||||
"blocked_domains_loaded_timeout": "Engellenen Alan Adları Yükleme Zaman Aşımı: {timeout}s",
|
||||
"blocked_domains_loaded_timeout_error": "Engellenen Alan Adları Yükleme Zaman Aşımı Hatası: {error}",
|
||||
"available_domains_loaded": "Kullanılabilir Alan Adları Yüklendi: {count}",
|
||||
"domains_filtered": "Filtrelenen Alan Adları: {count}",
|
||||
"trying_to_create_email": "E-posta oluşturulmaya çalışılıyor: {email}",
|
||||
"domain_blocked": "Alan Adı Engellendi: {domain}"
|
||||
},
|
||||
"update": {
|
||||
"title": "Cursor Otomatik Güncellemeyi Devre Dışı Bırak",
|
||||
"disable_success": "Otomatik Güncelleme Başarıyla Devre Dışı Bırakıldı",
|
||||
"disable_failed": "Otomatik Güncellemeyi Devre Dışı Bırakma Başarısız: {error}",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"start_disable": "Otomatik Güncellemeyi Devre Dışı Bırakma Başlatılıyor",
|
||||
"killing_processes": "İşlemler Sonlandırılıyor",
|
||||
"processes_killed": "İşlemler Sonlandırıldı",
|
||||
"removing_directory": "Dizin Kaldırılıyor",
|
||||
"directory_removed": "Dizin Kaldırıldı",
|
||||
"creating_block_file": "Engelleme Dosyası Oluşturuluyor",
|
||||
"block_file_created": "Engelleme Dosyası Oluşturuldu"
|
||||
},
|
||||
"updater": {
|
||||
"checking": "Güncellemeler kontrol ediliyor...",
|
||||
"new_version_available": "Yeni sürüm mevcut! (Mevcut: {current}, En son: {latest})",
|
||||
"updating": "En son sürüme güncelleniyor. Program otomatik olarak yeniden başlatılacak.",
|
||||
"up_to_date": "En son sürümü kullanıyorsunuz.",
|
||||
"check_failed": "Güncellemeler kontrol edilemedi: {error}",
|
||||
"continue_anyway": "Mevcut sürümle devam ediliyor...",
|
||||
"update_confirm": "En son sürüme güncellemek istiyor musunuz? (Y/n)",
|
||||
"update_skipped": "Güncelleme atlanıyor.",
|
||||
"invalid_choice": "Geçersiz seçim. Lütfen 'Y' veya 'n' girin.",
|
||||
"development_version": "Geliştirme Sürümü {current} > {latest}",
|
||||
"changelog_title": "Değişiklik günlüğü"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Cursor'ı Tamamen Sıfırla",
|
||||
"checking_config": "Yapılandırma Dosyası Kontrol Ediliyor",
|
||||
"config_not_found": "Yapılandırma Dosyası Bulunamadı",
|
||||
"no_permission": "Yapılandırma Dosyası Okunamıyor veya Yazılamıyor, Lütfen Dosya İzinlerini Kontrol Edin",
|
||||
"reading_config": "Mevcut Yapılandırma Okunuyor",
|
||||
"creating_backup": "Yapılandırma Yedeği Oluşturuluyor",
|
||||
"backup_exists": "Yedek Dosya Zaten Mevcut, Yedekleme Adımı Atlanıyor",
|
||||
"generating_new_machine_id": "Yeni Makine Kimliği Oluşturuluyor",
|
||||
"saving_new_config": "Yeni Yapılandırma JSON'a Kaydediliyor",
|
||||
"success": "Cursor Başarıyla Sıfırlandı",
|
||||
"error": "Cursor Sıfırlama Başarısız: {error}",
|
||||
"press_enter": "Çıkmak için Enter'a Basın",
|
||||
"reset_machine_id": "Makine Kimliğini Sıfırla",
|
||||
"database_connection_closed": "Veritabanı Bağlantısı Kapatıldı",
|
||||
"database_updated_successfully": "Veritabanı Başarıyla Güncellendi",
|
||||
"connected_to_database": "Veritabanına Bağlanıldı",
|
||||
"updating_pair": "Anahtar-Değer Çifti Güncelleniyor",
|
||||
"db_not_found": "Veritabanı dosyası bulunamadı: {path}",
|
||||
"db_permission_error": "Veritabanı dosyasına erişilemiyor. Lütfen izinleri kontrol edin",
|
||||
"db_connection_error": "Veritabanına bağlantı başarısız: {error}",
|
||||
"feature_title": "ÖZELLİKLER",
|
||||
"feature_1": "Cursor AI ayarları ve yapılandırmalarının tamamen kaldırılması",
|
||||
"feature_2": "AI geçmişi ve komutları dahil tüm önbelleğe alınmış verileri temizler",
|
||||
"feature_3": "Deneme süresini aşma tespitini atlatmak için makine kimliğini sıfırlar",
|
||||
"feature_4": "Rastgele yeni makine tanımlayıcıları oluşturur",
|
||||
"feature_5": "Özel uzantıları ve tercihleri kaldırır",
|
||||
"feature_6": "Deneme süresi bilgilerini ve aktivasyon verilerini sıfırlar",
|
||||
"feature_7": "Gizli lisans ve deneme süresiyle ilgili dosyalar için derin tarama",
|
||||
"feature_8": "Cursor olmayan dosyaları ve uygulamaları güvenle korur",
|
||||
"feature_9": "Windows, macOS ve Linux ile uyumludur",
|
||||
"disclaimer_title": "YASAL UYARI",
|
||||
"disclaimer_1": "Bu araç, tüm Cursor AI ayarlarını,",
|
||||
"disclaimer_2": "yapılandırmalarını ve önbelleğe alınmış verileri kalıcı olarak silecektir. Bu işlem geri alınamaz.",
|
||||
"disclaimer_3": "Kod dosyalarınız ETKİLENMEYECEK ve bu araç",
|
||||
"disclaimer_4": "yalnızca Cursor AI editör dosyalarını ve deneme süresi algılama mekanizmalarını hedef almak için tasarlanmıştır.",
|
||||
"disclaimer_5": "Sisteminizde bulunan diğer uygulamalar etkilenmeyecektir.",
|
||||
"disclaimer_6": "Bu aracı çalıştırdıktan sonra Cursor AI'yi yeniden kurmanız gerekecektir.",
|
||||
"disclaimer_7": "Kullanım sorumluluğu size aittir",
|
||||
"confirm_title": "Devam etmek istediğinizden emin misiniz?",
|
||||
"confirm_1": "Bu işlem, tüm Cursor AI ayarlarını,",
|
||||
"confirm_2": "yapılandırmalarını ve önbelleğe alınmış verileri silecektir. Bu işlem geri alınamaz.",
|
||||
"confirm_3": "Kod dosyalarınız ETKİLENMEYECEK ve bu araç",
|
||||
"confirm_4": "yalnızca Cursor AI editör dosyalarını ve deneme süresi algılama mekanizmalarını hedef almak için tasarlanmıştır.",
|
||||
"confirm_5": "Sisteminizde bulunan diğer uygulamalar etkilenmeyecektir.",
|
||||
"confirm_6": "Bu aracı çalıştırdıktan sonra Cursor AI'yi yeniden kurmanız gerekecektir.",
|
||||
"confirm_7": "Kullanım sorumluluğu size aittir",
|
||||
"invalid_choice": "Lütfen 'Y' veya 'n' girin",
|
||||
"skipped_for_safety": "Güvenlik için atlandı (Cursor ile ilgili değil): {path}",
|
||||
"deleted": "Silindi: {path}",
|
||||
"error_deleting": "{path} silinirken hata: {error}",
|
||||
"not_found": "Dosya bulunamadı: {path}",
|
||||
"resetting_machine_id": "Deneme süresi algılamasını atlatmak için makine tanımlayıcıları sıfırlanıyor...",
|
||||
"created_machine_id": "Yeni makine kimliği oluşturuldu: {path}",
|
||||
"error_creating_machine_id": "Makine kimliği dosyası oluşturulurken hata {path}: {error}",
|
||||
"error_searching": "{path} içindeki dosyalar aranırken hata: {error}",
|
||||
"created_extended_trial_info": "Yeni genişletilmiş deneme bilgisi oluşturuldu: {path}",
|
||||
"error_creating_trial_info": "Deneme bilgisi dosyası oluşturulurken hata {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Cursor AI Editor sıfırlanıyor... Lütfen bekleyin.",
|
||||
"reset_cancelled": "Sıfırlama iptal edildi. Herhangi bir değişiklik yapmadan çıkılıyor.",
|
||||
"windows_machine_id_modification_skipped": "Windows makine kimliği değişikliği atlandı: {error}",
|
||||
"linux_machine_id_modification_skipped": "Linux machine-id değişikliği atlandı: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Not: Tam makine kimliği sıfırlaması yönetici olarak çalıştırmayı gerektirebilir",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Not: Tam sistem machine-id sıfırlaması sudo ayrıcalıkları gerektirebilir",
|
||||
"windows_registry_instructions": "📝 NOT: Windows'ta tam sıfırlama için kayıt defteri girdilerini de temizlemeniz gerekebilir.",
|
||||
"windows_registry_instructions_2": " 'regedit' çalıştırın ve HKEY_CURRENT_USER\\Software\\ altında 'Cursor' veya 'CursorAI' içeren anahtarları arayıp silin.\n",
|
||||
"reset_log_1": "Cursor AI tamamen sıfırlandı ve deneme süresi algılaması atlatıldı!",
|
||||
"reset_log_2": "Değişikliklerin etkili olması için lütfen sisteminizi yeniden başlatın.",
|
||||
"reset_log_3": "Cursor AI'yi yeniden kurmanız gerekecek ve şimdi yeni bir deneme süreniz olmalı.",
|
||||
"reset_log_4": "En iyi sonuçlar için şunları da düşünün:",
|
||||
"reset_log_5": "Yeni bir deneme süresi için kaydolurken farklı bir e-posta adresi kullanın",
|
||||
"reset_log_6": "Mümkünse, IP adresinizi değiştirmek için VPN kullanın",
|
||||
"reset_log_7": "Cursor AI'nin web sitesini ziyaret etmeden önce tarayıcı çerezlerinizi ve önbelleği temizleyin",
|
||||
"reset_log_8": "Sorunlar devam ederse, Cursor AI'yi farklı bir konuma kurmayı deneyin",
|
||||
"reset_log_9": "Herhangi bir sorunla karşılaşırsanız, Github Sorun Takibine gidin ve https://github.com/yeongpin/cursor-free-vip/issues adresinde bir sorun oluşturun",
|
||||
"unexpected_error": "Beklenmeyen bir hata oluştu: {error}",
|
||||
"report_issue": "Lütfen bu sorunu https://github.com/yeongpin/cursor-free-vip/issues adresindeki Github Sorun Takibine bildirin",
|
||||
"keyboard_interrupt": "İşlem kullanıcı tarafından kesildi. Çıkılıyor...",
|
||||
"return_to_main_menu": "Ana menüye dönülüyor...",
|
||||
"process_interrupted": "İşlem kesildi. Çıkılıyor...",
|
||||
"press_enter_to_return_to_main_menu": "Ana menüye dönmek için Enter'a basın...",
|
||||
"removing_known": "Bilinen deneme/lisans dosyaları kaldırılıyor",
|
||||
"performing_deep_scan": "Ek deneme/lisans dosyaları için derin tarama yapılıyor",
|
||||
"found_additional_potential_license_trial_files": "{count} ek potansiyel lisans/deneme dosyası bulundu",
|
||||
"checking_for_electron_localstorage_files": "Electron localStorage dosyaları kontrol ediliyor",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "Derin taramada ek lisans/deneme dosyası bulunamadı",
|
||||
"removing_electron_localstorage_files": "Electron localStorage dosyaları kaldırılıyor",
|
||||
"electron_localstorage_files_removed": "Electron localStorage dosyaları kaldırıldı",
|
||||
"electron_localstorage_files_removal_error": "Electron localStorage dosyaları kaldırılırken hata: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Electron localStorage dosyaları kaldırma işlemi tamamlandı"
|
||||
}
|
||||
}
|
||||
122
locales/vi.json
122
locales/vi.json
@@ -12,13 +12,24 @@
|
||||
"program_terminated": "Chương trình đã bị người dùng chấm dứt",
|
||||
"error_occurred": "Đã xảy ra lỗi: {error}. Vui lòng thử lại",
|
||||
"press_enter": "Nhấn Enter để Thoát",
|
||||
"disable_auto_update": "Tắt Tự Động Cập Nhật Cursor"
|
||||
"disable_auto_update": "Tắt tự động cập nhật Cursor",
|
||||
"lifetime_access_enabled": "ĐÃ BẬT TRUY CẬP TRỌN ĐỜI",
|
||||
"totally_reset": "Đặt lại hoàn toàn Cursor",
|
||||
"outdate": "Quá cũ",
|
||||
"temp_github_register": "Đăng ký GitHub tạm thời",
|
||||
"coming_soon": "Sắp ra mắt"
|
||||
},
|
||||
"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",
|
||||
"es": "Tiếng Tây Ban Nha"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "Bắt Đầu Thoát Cursor",
|
||||
@@ -86,7 +97,6 @@
|
||||
"check_version_failed": "Kiểm Tra Phiên Bản Thất Bại: {error}",
|
||||
"stack_trace": "Dấu Vết Ngăn Xếp",
|
||||
"version_too_low": "Phiên Bản Cursor Quá Thấp: {version} < 0.45.0"
|
||||
|
||||
},
|
||||
"register": {
|
||||
"title": "Công Cụ Đăng Ký Cursor",
|
||||
@@ -221,7 +231,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}",
|
||||
@@ -252,7 +262,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",
|
||||
@@ -276,6 +287,99 @@
|
||||
"continue_anyway": "Tiếp Tục Với Phiên Bản Hiện Tại...",
|
||||
"update_confirm": "Bạn Có Muốn Cập Nhật Lên Phiên Bản Mới Nhất Không? (Y/n)",
|
||||
"update_skipped": "Bỏ Qua Cập Nhật.",
|
||||
"invalid_choice": "Lựa Chọn Không Hợp Lệ. Vui Lòng Nhập 'Y' Hoặc 'n'."
|
||||
"invalid_choice": "Lựa Chọn Không Hợp Lệ. Vui Lòng Nhập 'Y' Hoặc 'n'.",
|
||||
"development_version": "Phiên Bản Phát Triển {current} > {latest}",
|
||||
"changelog_title": "Nhật ký thay đổi"
|
||||
},
|
||||
"totally_reset": {
|
||||
"title": "Đặt lại hoàn toàn Cursor",
|
||||
"checking_config": "Đang kiểm tra tệp cấu hình",
|
||||
"config_not_found": "Không tìm thấy tệp cấu hình",
|
||||
"no_permission": "Không thể đọc hoặc ghi tệp cấu hình, vui lòng kiểm tra quyền tệp",
|
||||
"reading_config": "Đang đọc cấu hình hiện tại",
|
||||
"creating_backup": "Đang tạo bản sao lưu cấu hình",
|
||||
"backup_exists": "Tệp sao lưu đã tồn tại, bỏ qua bước sao lưu",
|
||||
"generating_new_machine_id": "Đang tạo ID máy mới",
|
||||
"saving_new_config": "Đang lưu cấu hình mới vào JSON",
|
||||
"success": "Đặt lại Cursor thành công",
|
||||
"error": "Đặt lại Cursor thất bại: {error}",
|
||||
"press_enter": "Nhấn Enter để thoát",
|
||||
"reset_machine_id": "Đặt lại ID máy",
|
||||
"database_connection_closed": "Kết nối cơ sở dữ liệu đã đóng",
|
||||
"database_updated_successfully": "Cập nhật cơ sở dữ liệu thành công",
|
||||
"connected_to_database": "Đã kết nối với cơ sở dữ liệu",
|
||||
"updating_pair": "Đang cập nhật cặp khóa-giá trị",
|
||||
"db_not_found": "Không tìm thấy tệp cơ sở dữ liệu tại: {path}",
|
||||
"db_permission_error": "Không thể truy cập tệp cơ sở dữ liệu, vui lòng kiểm tra quyền",
|
||||
"db_connection_error": "Kết nối cơ sở dữ liệu thất bại: {error}",
|
||||
"feature_title": "TÍNH NĂNG",
|
||||
"feature_1": "Xóa hoàn toàn các cài đặt và cấu hình của Cursor AI",
|
||||
"feature_2": "Xóa tất cả dữ liệu bộ nhớ đệm bao gồm lịch sử và gợi ý AI",
|
||||
"feature_3": "Đặt lại ID máy để vượt qua kiểm tra dùng thử",
|
||||
"feature_4": "Tạo định danh máy ngẫu nhiên mới",
|
||||
"feature_5": "Xóa tiện ích mở rộng và tùy chỉnh",
|
||||
"feature_6": "Đặt lại thông tin dùng thử và dữ liệu kích hoạt",
|
||||
"feature_7": "Quét sâu các tệp ẩn liên quan đến giấy phép và dùng thử",
|
||||
"feature_8": "Bảo toàn các tệp và ứng dụng không liên quan đến Cursor",
|
||||
"feature_9": "Tương thích với Windows, macOS và Linux",
|
||||
"disclaimer_title": "LƯU Ý",
|
||||
"disclaimer_1": "Công cụ này sẽ xóa vĩnh viễn tất cả cài đặt,",
|
||||
"disclaimer_2": "cấu hình và dữ liệu bộ nhớ đệm của Cursor AI. Thao tác này không thể hoàn tác.",
|
||||
"disclaimer_3": "Tệp mã nguồn của bạn sẽ KHÔNG bị ảnh hưởng, công cụ chỉ nhắm đến",
|
||||
"disclaimer_4": "các tệp chỉnh sửa Cursor AI và cơ chế kiểm tra dùng thử.",
|
||||
"disclaimer_5": "Các ứng dụng khác trên hệ thống của bạn sẽ không bị ảnh hưởng.",
|
||||
"disclaimer_6": "Bạn sẽ cần thiết lập lại Cursor AI sau khi chạy công cụ này.",
|
||||
"disclaimer_7": "Sử dụng dưới sự tự chịu trách nhiệm",
|
||||
"confirm_title": "Bạn có chắc chắn muốn tiếp tục không?",
|
||||
"confirm_1": "Hành động này sẽ xóa tất cả cài đặt,",
|
||||
"confirm_2": "cấu hình và dữ liệu bộ nhớ đệm của Cursor AI. Hành động này không thể hoàn tác.",
|
||||
"confirm_3": "Tệp mã nguồn của bạn sẽ KHÔNG bị ảnh hưởng, công cụ chỉ nhắm đến",
|
||||
"confirm_4": "các tệp chỉnh sửa Cursor AI và cơ chế kiểm tra dùng thử.",
|
||||
"confirm_5": "Các ứng dụng khác trên hệ thống của bạn sẽ không bị ảnh hưởng.",
|
||||
"confirm_6": "Bạn sẽ cần thiết lập lại Cursor AI sau khi chạy công cụ này.",
|
||||
"confirm_7": "Sử dụng dưới sự tự chịu trách nhiệm",
|
||||
"invalid_choice": "Vui lòng nhập 'Y' hoặc 'n'",
|
||||
"skipped_for_safety": "Bỏ qua vì an toàn (không liên quan đến Cursor): {path}",
|
||||
"deleted": "Đã xóa: {path}",
|
||||
"error_deleting": "Lỗi khi xóa {path}: {error}",
|
||||
"not_found": "Không tìm thấy tệp: {path}",
|
||||
"resetting_machine_id": "Đang đặt lại ID máy để vượt qua kiểm tra dùng thử...",
|
||||
"created_machine_id": "Đã tạo ID máy mới: {path}",
|
||||
"error_creating_machine_id": "Lỗi khi tạo tệp ID máy {path}: {error}",
|
||||
"error_searching": "Lỗi khi tìm kiếm tệp trong {path}: {error}",
|
||||
"created_extended_trial_info": "Đã tạo thông tin dùng thử mở rộng mới: {path}",
|
||||
"error_creating_trial_info": "Lỗi khi tạo tệp thông tin dùng thử {path}: {error}",
|
||||
"resetting_cursor_ai_editor": "Đang đặt lại Cursor AI Editor... Vui lòng chờ.",
|
||||
"reset_cancelled": "Đã hủy đặt lại. Thoát mà không thực hiện thay đổi nào.",
|
||||
"windows_machine_id_modification_skipped": "Bỏ qua sửa đổi ID máy Windows: {error}",
|
||||
"linux_machine_id_modification_skipped": "Bỏ qua sửa đổi machine-id Linux: {error}",
|
||||
"note_complete_machine_id_reset_may_require_running_as_administrator": "Lưu ý: Đặt lại ID máy hoàn toàn có thể yêu cầu chạy dưới quyền quản trị viên",
|
||||
"note_complete_system_machine_id_reset_may_require_sudo_privileges": "Lưu ý: Đặt lại machine-id hệ thống hoàn toàn có thể yêu cầu quyền sudo",
|
||||
"windows_registry_instructions": "📝 LƯU Ý: Để đặt lại hoàn toàn trên Windows, bạn có thể cần dọn dẹp các mục registry.",
|
||||
"windows_registry_instructions_2": " Chạy 'regedit' và tìm kiếm khóa chứa 'Cursor' hoặc 'CursorAI' dưới HKEY_CURRENT_USER\\Software\\ và xóa chúng.\n",
|
||||
"reset_log_1": "Cursor AI đã được đặt lại hoàn toàn và vượt qua kiểm tra dùng thử!",
|
||||
"reset_log_2": "Vui lòng khởi động lại hệ thống để thay đổi có hiệu lực.",
|
||||
"reset_log_3": "Bạn cần cài đặt lại Cursor AI và sẽ có kỳ dùng thử mới.",
|
||||
"reset_log_4": "Để có kết quả tốt nhất, bạn có thể cân nhắc:",
|
||||
"reset_log_5": "Sử dụng địa chỉ email khác khi đăng ký dùng thử mới",
|
||||
"reset_log_6": "Nếu có thể, sử dụng VPN để thay đổi địa chỉ IP",
|
||||
"reset_log_7": "Xóa cookie và bộ nhớ cache trình duyệt trước khi truy cập trang web Cursor AI",
|
||||
"reset_log_8": "Nếu vẫn gặp sự cố, hãy thử cài Cursor AI vào vị trí khác",
|
||||
"reset_log_9": "Nếu gặp bất kỳ vấn đề nào, hãy truy cập Github Issue Tracker và tạo issue tại https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"unexpected_error": "Đã xảy ra lỗi không mong muốn: {error}",
|
||||
"report_issue": "Vui lòng báo cáo sự cố này tại Github Issue Tracker: https://github.com/yeongpin/cursor-free-vip/issues",
|
||||
"keyboard_interrupt": "Quá trình bị người dùng hủy. Đang thoát...",
|
||||
"return_to_main_menu": "Trở về menu chính...",
|
||||
"process_interrupted": "Quá trình bị gián đoạn. Đang thoát...",
|
||||
"press_enter_to_return_to_main_menu": "Nhấn Enter để trở về menu chính...",
|
||||
"removing_known": "Đang xóa các tệp thử nghiệm/giấy phép đã biết",
|
||||
"performing_deep_scan": "Đang quét sâu để tìm thêm tệp thử nghiệm/giấy phép",
|
||||
"found_additional_potential_license_trial_files": "Đã tìm thấy {count} tệp thử nghiệm/giấy phép tiềm năng bổ sung",
|
||||
"checking_for_electron_localstorage_files": "Đang kiểm tra các tệp Electron localStorage",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "Không tìm thấy thêm tệp thử nghiệm/giấy phép nào trong quá trình quét sâu",
|
||||
"removing_electron_localstorage_files": "Đang xóa các tệp Electron localStorage",
|
||||
"electron_localstorage_files_removed": "Đã xóa các tệp Electron localStorage",
|
||||
"electron_localstorage_files_removal_error": "Lỗi khi xóa các tệp Electron localStorage: {error}",
|
||||
"removing_electron_localstorage_files_completed": "Đã hoàn tất việc xóa các tệp Electron localStorage"
|
||||
}
|
||||
}
|
||||
@@ -14,13 +14,29 @@
|
||||
"program_terminated": "程序已被用户终止",
|
||||
"error_occurred": "发生错误:{error},请重试",
|
||||
"press_enter": "按回车键退出",
|
||||
"disable_auto_update": "禁用 Cursor 自动更新"
|
||||
"disable_auto_update": "禁用 Cursor 自动更新",
|
||||
"lifetime_access_enabled": "永久订阅",
|
||||
"totally_reset": "完全重置 Cursor",
|
||||
"outdate": "过时",
|
||||
"temp_github_register": "临时GitHub注册",
|
||||
"admin_required": "运行可执行文件,需要管理员权限",
|
||||
"admin_required_continue": "继续使用当前版本...",
|
||||
"coming_soon": "即将推出",
|
||||
"fixed_soon": "即将修复"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"en": "英语",
|
||||
"zh_cn": "简体中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"zh_tw": "繁体中文",
|
||||
"vi": "越南语",
|
||||
"nl": "荷兰语",
|
||||
"de": "德语",
|
||||
"fr": "法语",
|
||||
"pt": "葡萄牙语",
|
||||
"ru": "俄语",
|
||||
"tr": "土耳其语",
|
||||
"bg": "保加利亚语",
|
||||
"es": "西班牙语"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "开始退出 Cursor",
|
||||
@@ -87,7 +103,9 @@
|
||||
"package_not_found": "package.json未找到: {path}",
|
||||
"check_version_failed": "检查版本失败: {error}",
|
||||
"stack_trace": "堆栈跟踪",
|
||||
"version_too_low": "Cursor版本太低: {version} < 0.45.0"
|
||||
"version_too_low": "Cursor版本太低: {version} < 0.45.0",
|
||||
"no_write_permission": "没有写入权限: {path}",
|
||||
"path_not_found": "路径未找到: {path}"
|
||||
},
|
||||
"register": {
|
||||
"title": "Cursor 注册工具",
|
||||
@@ -219,7 +237,7 @@
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "启动浏览器",
|
||||
"visiting_site": "访问 mail.tm",
|
||||
"visiting_site": "访问 邮箱服务网站",
|
||||
"create_success": "邮箱创建成功",
|
||||
"create_failed": "邮箱创建失败",
|
||||
"create_error": "邮箱创建错误: {error}",
|
||||
@@ -250,7 +268,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 自动更新",
|
||||
@@ -274,6 +293,147 @@
|
||||
"continue_anyway": "继续使用当前版本...",
|
||||
"update_confirm": "是否要更新到最新版本? (Y/n)",
|
||||
"update_skipped": "跳过更新。",
|
||||
"invalid_choice": "选择无效。请输入 'Y' 或 'n'."
|
||||
"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": "按回车键退出",
|
||||
"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": "正在重置机器 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": "跳过 Windows 机器 ID 修改:{error}",
|
||||
"linux_machine_id_modification_skipped": "跳过 Linux machine-id 修改:{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' 并搜索 HKEY_CURRENT_USER\\Software\\ 下包含 'Cursor' 或 'CursorAI' 的键并删除它们。\n",
|
||||
"reset_log_1": "Cursor AI 已完全重置并绕过试用检测!",
|
||||
"reset_log_2": "请重启系统以使更改生效。",
|
||||
"reset_log_3": "您需要重新安装 Cursor AI,现在应该有一个新的试用期。",
|
||||
"reset_log_4": "为了获得最佳效果,建议还可以:",
|
||||
"reset_log_5": "注册新试用时使用不同的邮箱地址",
|
||||
"reset_log_6": "如果可能,使用 VPN 更改 IP 地址",
|
||||
"reset_log_7": "访问 Cursor AI 网站前清除浏览器的 Cookie 和缓存",
|
||||
"reset_log_8": "如果仍有问题,尝试将 Cursor AI 安装到不同位置",
|
||||
"reset_log_9": "如遇到任何问题,请到 Github Issue Tracker 提交问题: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": "按回车键返回主菜单...",
|
||||
"removing_known": "正在移除已知的试用/授权文件",
|
||||
"performing_deep_scan": "正在进行深度扫描以查找其他试用/授权文件",
|
||||
"found_additional_potential_license_trial_files": "发现 {count} 个其他潜在的试用/授权文件",
|
||||
"checking_for_electron_localstorage_files": "正在检查 Electron localStorage 文件",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "深度扫描中未发现其他试用/授权文件",
|
||||
"removing_electron_localstorage_files": "正在移除 Electron localStorage 文件",
|
||||
"electron_localstorage_files_removed": "Electron localStorage 文件已移除",
|
||||
"electron_localstorage_files_removal_error": "移除 Electron localStorage 文件时出错:{error}",
|
||||
"removing_electron_localstorage_files_completed": "Electron localStorage 文件移除完成",
|
||||
"warning_title": "警告",
|
||||
"warning_1": "此操作将删除所有 Cursor AI 设置、",
|
||||
"warning_2": "配置和缓存数据。此操作无法撤销。",
|
||||
"warning_3": "您的代码文件 **不会** 受到影响,工具设计为",
|
||||
"warning_4": "仅针对 Cursor AI 编辑器文件和试用检测机制。",
|
||||
"warning_5": "系统中的其他应用程序不会受到影响。",
|
||||
"warning_6": "运行此工具后,您需要重新设置 Cursor AI。",
|
||||
"warning_7": "请自行承担风险",
|
||||
"removed": "已删除:{path}",
|
||||
"failed_to_reset_machine_guid": "无法重置机器 GUID",
|
||||
"failed_to_remove": "无法删除:{path}",
|
||||
"failed_to_delete_file": "无法删除文件:{path}",
|
||||
"failed_to_delete_directory": "无法删除目录:{path}",
|
||||
"failed_to_delete_file_or_directory": "无法删除文件或目录:{path}",
|
||||
"deep_scanning": "正在进行深度扫描以查找其他试用/授权文件",
|
||||
"resetting_cursor": "正在重置 Cursor AI 编辑器... 请稍候。",
|
||||
"completed_in": "完成时间:{time} 秒",
|
||||
"cursor_reset_completed": "Cursor AI 编辑器已完全重置且绕过试用检测!",
|
||||
"cursor_reset_failed": "Cursor AI 编辑器重置失败:{error}",
|
||||
"cursor_reset_cancelled": "Cursor AI 编辑器重置已取消,未进行任何更改。",
|
||||
"operation_cancelled": "操作已取消,未进行任何更改。"
|
||||
},
|
||||
"github_register": {
|
||||
"title": "GitHub + Cursor AI 注册自动化",
|
||||
"features_header": "功能",
|
||||
"feature1": "使用 1secmail 生成临时邮箱",
|
||||
"feature2": "使用随机凭证注册新的 GitHub 账户",
|
||||
"feature3": "自动验证 GitHub 邮箱",
|
||||
"feature4": "使用 GitHub 认证登录 Cursor AI",
|
||||
"feature5": "重置机器 ID 以绕过试用检测",
|
||||
"feature6": "保存所有凭证到文件",
|
||||
"warnings_header": "警告",
|
||||
"warning1": "此脚本自动化账户创建,可能违反 GitHub/Cursor 服务条款",
|
||||
"warning2": "需要互联网访问和管理员权限",
|
||||
"warning3": "CAPTCHA 或额外验证可能会中断自动化",
|
||||
"warning4": "请负责任地使用,风险自负",
|
||||
"confirm": "您确定要继续吗?",
|
||||
"invalid_choice": "无效选择。请输入 'yes' 或 'no'",
|
||||
"cancelled": "操作已取消",
|
||||
"program_terminated": "程序已由用户终止",
|
||||
"starting_automation": "开始自动化...",
|
||||
"github_username": "GitHub 用户名",
|
||||
"github_password": "GitHub 密码",
|
||||
"email_address": "邮箱地址",
|
||||
"credentials_saved": "这些凭证已保存到 github_cursor_accounts.txt",
|
||||
"completed_successfully": "GitHub + Cursor 注册成功",
|
||||
"registration_encountered_issues": "GitHub + Cursor 注册遇到问题",
|
||||
"check_browser_windows_for_manual_intervention_or_try_again_later": "检查浏览器窗口进行手动干预或稍后再试"
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,29 @@
|
||||
"program_terminated": "程式已被使用者終止",
|
||||
"error_occurred": "發生錯誤:{error},請重試",
|
||||
"press_enter": "按返回鍵退出",
|
||||
"disable_auto_update": "停用 Cursor 自動更新"
|
||||
"disable_auto_update": "禁用 Cursor 自動更新",
|
||||
"lifetime_access_enabled": "終身訪問已啟用",
|
||||
"totally_reset": "完全重置 Cursor",
|
||||
"outdate": "過時",
|
||||
"temp_github_register": "臨時GitHub註冊",
|
||||
"admin_required": "運行可執行文件,需要管理員權限",
|
||||
"admin_required_continue": "繼續使用當前版本...",
|
||||
"coming_soon": "即將推出",
|
||||
"fixed_soon": "即將修復"
|
||||
},
|
||||
"languages": {
|
||||
"en": "English",
|
||||
"zh_cn": "简体中文",
|
||||
"en": "英文",
|
||||
"zh_cn": "簡體中文",
|
||||
"zh_tw": "繁體中文",
|
||||
"vi": "Vietnamese"
|
||||
"vi": "越南文",
|
||||
"nl": "荷蘭文",
|
||||
"de": "德文",
|
||||
"fr": "法文",
|
||||
"pt": "葡萄牙文",
|
||||
"ru": "俄文",
|
||||
"tr": "土耳其文",
|
||||
"bg": "保加利亞文",
|
||||
"es": "西班牙文"
|
||||
},
|
||||
"quit_cursor": {
|
||||
"start": "開始退出 Cursor",
|
||||
@@ -85,7 +101,9 @@
|
||||
"package_not_found": "package.json未找到: {path}",
|
||||
"check_version_failed": "檢查版本失敗: {error}",
|
||||
"stack_trace": "堆疊跟踪",
|
||||
"version_too_low": "Cursor版本太低: {version} < 0.45.0"
|
||||
"version_too_low": "Cursor版本太低: {version} < 0.45.0",
|
||||
"no_write_permission": "沒有寫入權限: {path}",
|
||||
"path_not_found": "路徑未找到: {path}"
|
||||
},
|
||||
|
||||
"register": {
|
||||
@@ -199,7 +217,7 @@
|
||||
},
|
||||
"email": {
|
||||
"starting_browser": "啟動瀏覽器",
|
||||
"visiting_site": "訪問 mail.tm",
|
||||
"visiting_site": "訪問 郵箱網站",
|
||||
"create_success": "郵箱創建成功",
|
||||
"create_failed": "郵箱創建失敗",
|
||||
"create_error": "郵箱創建錯誤: {error}",
|
||||
@@ -254,6 +272,147 @@
|
||||
"continue_anyway": "繼續使用當前版本...",
|
||||
"update_confirm": "是否要更新到最新版本? (Y/n)",
|
||||
"update_skipped": "跳過更新。",
|
||||
"invalid_choice": "選擇無效。請輸入 'Y' 或 'n'."
|
||||
"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": "正在重置機器 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": "跳過 Windows 機器 ID 修改:{error}",
|
||||
"linux_machine_id_modification_skipped": "跳過 Linux machine-id 修改:{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' 並搜尋 HKEY_CURRENT_USER\\Software\\ 下包含 'Cursor' 或 'CursorAI' 的鍵並刪除它們。\n",
|
||||
"reset_log_1": "Cursor AI 已完全重置並繞過試用偵測!",
|
||||
"reset_log_2": "請重新啟動系統以使更改生效。",
|
||||
"reset_log_3": "您需要重新安裝 Cursor AI,現在應該有全新的試用期。",
|
||||
"reset_log_4": "為獲得最佳效果,建議還可以:",
|
||||
"reset_log_5": "註冊新試用時使用不同的電子郵件地址",
|
||||
"reset_log_6": "若有可能,使用 VPN 變更 IP 地址",
|
||||
"reset_log_7": "在造訪 Cursor AI 網站前清除瀏覽器的 Cookie 與快取",
|
||||
"reset_log_8": "若仍有問題,嘗試將 Cursor AI 安裝到不同位置",
|
||||
"reset_log_9": "若遇到任何問題,請到 Github Issue Tracker 提交問題: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": "正在檢查 Electron localStorage 檔案",
|
||||
"no_additional_license_trial_files_found_in_deep_scan": "深度掃描中未發現其他試用/授權檔案",
|
||||
"removing_electron_localstorage_files": "正在移除 Electron localStorage 檔案",
|
||||
"electron_localstorage_files_removed": "已移除 Electron localStorage 檔案",
|
||||
"electron_localstorage_files_removal_error": "移除 Electron localStorage 檔案時出錯:{error}",
|
||||
"removing_electron_localstorage_files_completed": "Electron localStorage 檔案移除完成",
|
||||
"warning_title": "警告",
|
||||
"warning_1": "此操作將刪除所有 Cursor AI 設定、",
|
||||
"warning_2": "配置與快取資料。此操作無法還原。",
|
||||
"warning_3": "您的程式碼檔案將 **不會** 受到影響,且此工具僅針對",
|
||||
"warning_4": "Cursor AI 編輯器檔案與試用偵測機制。",
|
||||
"warning_5": "系統中的其他應用程式不會受到影響。",
|
||||
"warning_6": "執行此工具後,您需要重新設定 Cursor AI。",
|
||||
"warning_7": "請自行承擔風險",
|
||||
"removed": "已刪除:{path}",
|
||||
"failed_to_reset_machine_guid": "無法重置機器 GUID",
|
||||
"failed_to_remove": "無法刪除:{path}",
|
||||
"failed_to_delete_file": "無法刪除檔案:{path}",
|
||||
"failed_to_delete_directory": "無法刪除目錄:{path}",
|
||||
"failed_to_delete_file_or_directory": "無法刪除檔案或目錄:{path}",
|
||||
"deep_scanning": "正在進行深度掃描以查找其他試用/授權檔案",
|
||||
"resetting_cursor": "正在重置 Cursor AI 編輯器... 請稍候。",
|
||||
"completed_in": "完成時間:{time} 秒",
|
||||
"cursor_reset_completed": "Cursor AI 編輯器已完全重置且繞過試用偵測!",
|
||||
"cursor_reset_failed": "Cursor AI 編輯器重置失敗:{error}",
|
||||
"cursor_reset_cancelled": "Cursor AI 編輯器重置已取消,未進行任何更改。",
|
||||
"operation_cancelled": "操作已取消,未進行任何更改。"
|
||||
},
|
||||
"github_register": {
|
||||
"title": "GitHub + Cursor AI 注册自动化",
|
||||
"features_header": "功能",
|
||||
"feature1": "使用 1secmail 生成临时邮箱",
|
||||
"feature2": "使用随机凭证注册新的 GitHub 账户",
|
||||
"feature3": "自动验证 GitHub 邮箱",
|
||||
"feature4": "使用 GitHub 认证登录 Cursor AI",
|
||||
"feature5": "重置机器 ID 以绕过试用检测",
|
||||
"feature6": "保存所有凭证到文件",
|
||||
"warnings_header": "警告",
|
||||
"warning1": "此脚本自动化账户创建,可能违反 GitHub/Cursor 服务条款",
|
||||
"warning2": "需要互联网访问和管理员权限",
|
||||
"warning3": "CAPTCHA 或额外验证可能会中断自动化",
|
||||
"warning4": "请负责任地使用,风险自负",
|
||||
"confirm": "您确定要继续吗?",
|
||||
"invalid_choice": "无效选择。请输入 'yes' 或 'no'",
|
||||
"cancelled": "操作已取消",
|
||||
"program_terminated": "程序已由用户终止",
|
||||
"starting_automation": "開始自動化...",
|
||||
"github_username": "GitHub 用戶名",
|
||||
"github_password": "GitHub 密碼",
|
||||
"email_address": "郵箱地址",
|
||||
"credentials_saved": "這些憑證已保存到 github_cursor_accounts.txt",
|
||||
"completed_successfully": "GitHub + Cursor 註冊成功",
|
||||
"registration_encountered_issues": "GitHub + Cursor 註冊遇到問題",
|
||||
"check_browser_windows_for_manual_intervention_or_try_again_later": "檢查瀏覽器視窗進行手動干預或稍後再試"
|
||||
}
|
||||
}
|
||||
82
logo.py
82
logo.py
@@ -1,6 +1,8 @@
|
||||
from colorama import Fore, Style, init
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
import shutil
|
||||
import re
|
||||
|
||||
# Get the current script directory
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -15,27 +17,85 @@ version = os.getenv('VERSION', '1.0.0')
|
||||
# Initialize colorama
|
||||
init()
|
||||
|
||||
CURSOR_LOGO = f"""
|
||||
{Fore.CYAN}
|
||||
# get terminal width
|
||||
def get_terminal_width():
|
||||
try:
|
||||
columns, _ = shutil.get_terminal_size()
|
||||
return columns
|
||||
except:
|
||||
return 80 # default width
|
||||
|
||||
# center display text (not handling Chinese characters)
|
||||
def center_multiline_text(text, handle_chinese=False):
|
||||
width = get_terminal_width()
|
||||
lines = text.split('\n')
|
||||
centered_lines = []
|
||||
|
||||
for line in lines:
|
||||
# calculate actual display width (remove ANSI color codes)
|
||||
clean_line = line
|
||||
for color in [Fore.CYAN, Fore.YELLOW, Fore.GREEN, Fore.RED, Style.RESET_ALL]:
|
||||
clean_line = clean_line.replace(color, '')
|
||||
|
||||
# remove all ANSI escape sequences to get the actual length
|
||||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')
|
||||
clean_line = ansi_escape.sub('', clean_line)
|
||||
|
||||
# calculate display width
|
||||
if handle_chinese:
|
||||
# consider Chinese characters occupying two positions
|
||||
display_width = 0
|
||||
for char in clean_line:
|
||||
if ord(char) > 127: # non-ASCII characters
|
||||
display_width += 2
|
||||
else:
|
||||
display_width += 1
|
||||
else:
|
||||
# not handling Chinese characters
|
||||
display_width = len(clean_line)
|
||||
|
||||
# calculate the number of spaces to add
|
||||
padding = max(0, (width - display_width) // 2)
|
||||
centered_lines.append(' ' * padding + line)
|
||||
|
||||
return '\n'.join(centered_lines)
|
||||
|
||||
# original LOGO text
|
||||
LOGO_TEXT = f"""{Fore.CYAN}
|
||||
██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗
|
||||
██╔════╝██║ ██║██╔══██╗██╔════╝██╔═══██╗██╔══██╗ ██╔══██╗██╔══██╗██╔═══██╗
|
||||
██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝ ██████╔╝██████╔╝██║ ██║
|
||||
██║ ██║ ██║██╔══██╗╚════██║██║ ██║██╔══██╗ ██╔═══╝ ██╔══██╗██║ ██║
|
||||
╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║ ██║ ██║ ██║╚██████╔╝
|
||||
╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝
|
||||
{Fore.YELLOW}
|
||||
Pro Version Activator v{version}
|
||||
{Fore.GREEN}
|
||||
Author: Pin Studios | yeongpin
|
||||
{Style.RESET_ALL}"""
|
||||
|
||||
Github: https://github.com/yeongpin/cursor-free-vip
|
||||
{Fore.RED}
|
||||
Press 5 to change language | 按下 5 键切换语言
|
||||
{Style.RESET_ALL}
|
||||
"""
|
||||
DESCRIPTION_TEXT = f"""{Fore.YELLOW}
|
||||
Pro Version Activator v{version}{Fore.GREEN}
|
||||
Author: Pin Studios (yeongpin)"""
|
||||
|
||||
CONTRIBUTORS_TEXT = f"""{Fore.BLUE}
|
||||
Contributors:
|
||||
BasaiCorp aliensb handwerk2016 Nigel1992
|
||||
UntaDotMy RenjiYuusei imbajin ahmed98Osama
|
||||
bingoohuang mALIk-sHAHId MFaiqKhan httpmerak
|
||||
muhammedfurkan plamkatawe
|
||||
"""
|
||||
OTHER_INFO_TEXT = f"""{Fore.YELLOW}
|
||||
Github: https://github.com/yeongpin/cursor-free-vip{Fore.RED}
|
||||
Press 7 to change language | 按下 7 键切换语言{Style.RESET_ALL}"""
|
||||
|
||||
# center display LOGO and DESCRIPTION
|
||||
CURSOR_LOGO = center_multiline_text(LOGO_TEXT, handle_chinese=False)
|
||||
CURSOR_DESCRIPTION = center_multiline_text(DESCRIPTION_TEXT, handle_chinese=False)
|
||||
CURSOR_CONTRIBUTORS = center_multiline_text(CONTRIBUTORS_TEXT, handle_chinese=False)
|
||||
CURSOR_OTHER_INFO = center_multiline_text(OTHER_INFO_TEXT, handle_chinese=True)
|
||||
|
||||
def print_logo():
|
||||
print(CURSOR_LOGO)
|
||||
print(CURSOR_DESCRIPTION)
|
||||
print(CURSOR_CONTRIBUTORS)
|
||||
print(CURSOR_OTHER_INFO)
|
||||
|
||||
if __name__ == "__main__":
|
||||
print_logo()
|
||||
133
main.py
133
main.py
@@ -108,6 +108,9 @@ class Translator:
|
||||
0x0404: 'zh_tw', # Traditional Chinese
|
||||
0x0804: 'zh_cn', # Simplified Chinese
|
||||
0x0422: 'vi', # Vietnamese
|
||||
0x0419: 'ru', # Russian
|
||||
0x0415: 'tr', # Turkish
|
||||
0x0402: 'bg', # Bulgarian
|
||||
}
|
||||
|
||||
return language_map.get(layout_id, 'en')
|
||||
@@ -133,8 +136,20 @@ 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'
|
||||
elif system_locale.startswith('tr'):
|
||||
return 'tr'
|
||||
elif system_locale.startswith('bg'):
|
||||
return 'bg'
|
||||
# Try to get language from LANG environment variable as fallback
|
||||
env_lang = os.getenv('LANG', '').lower()
|
||||
if 'tw' in env_lang or 'hk' in env_lang:
|
||||
@@ -143,7 +158,20 @@ 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'
|
||||
elif 'tr' in env_lang:
|
||||
return 'tr'
|
||||
elif 'bg' in env_lang:
|
||||
return 'bg'
|
||||
|
||||
return 'en'
|
||||
except:
|
||||
@@ -218,15 +246,17 @@ def print_menu():
|
||||
print(f"{Fore.YELLOW}{'─' * 40}{Style.RESET_ALL}")
|
||||
print(f"{Fore.GREEN}0{Style.RESET_ALL}. {EMOJI['ERROR']} {translator.get('menu.exit')}")
|
||||
print(f"{Fore.GREEN}1{Style.RESET_ALL}. {EMOJI['RESET']} {translator.get('menu.reset')}")
|
||||
print(f"{Fore.GREEN}2{Style.RESET_ALL}. {EMOJI['SUCCESS']} {translator.get('menu.register')}")
|
||||
print(f"{Fore.GREEN}2{Style.RESET_ALL}. {EMOJI['SUCCESS']} {translator.get('menu.register')} ({Fore.RED}{translator.get('menu.outdate')}{Style.RESET_ALL})")
|
||||
print(f"{Fore.GREEN}3{Style.RESET_ALL}. 🌟 {translator.get('menu.register_google')}")
|
||||
print(f"{Fore.YELLOW} ┗━━ 🔥 LIFETIME ACCESS ENABLED 🔥{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW} ┗━━ 🔥 {translator.get('menu.lifetime_access_enabled')} 🔥{Style.RESET_ALL}")
|
||||
print(f"{Fore.GREEN}4{Style.RESET_ALL}. ⭐ {translator.get('menu.register_github')}")
|
||||
print(f"{Fore.YELLOW} ┗━━ 🚀 LIFETIME ACCESS ENABLED 🚀{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW} ┗━━ 🚀 {translator.get('menu.lifetime_access_enabled')} 🚀{Style.RESET_ALL}")
|
||||
print(f"{Fore.GREEN}5{Style.RESET_ALL}. {EMOJI['SUCCESS']} {translator.get('menu.register_manual')}")
|
||||
print(f"{Fore.GREEN}6{Style.RESET_ALL}. {EMOJI['ERROR']} {translator.get('menu.quit')}")
|
||||
print(f"{Fore.GREEN}7{Style.RESET_ALL}. {EMOJI['LANG']} {translator.get('menu.select_language')}")
|
||||
print(f"{Fore.GREEN}8{Style.RESET_ALL}. {EMOJI['UPDATE']} {translator.get('menu.disable_auto_update')}")
|
||||
print(f"{Fore.GREEN}6{Style.RESET_ALL}. {EMOJI['RESET']} {translator.get('menu.temp_github_register')}")
|
||||
print(f"{Fore.GREEN}7{Style.RESET_ALL}. {EMOJI['ERROR']} {translator.get('menu.quit')}")
|
||||
print(f"{Fore.GREEN}8{Style.RESET_ALL}. {EMOJI['LANG']} {translator.get('menu.select_language')}")
|
||||
print(f"{Fore.GREEN}9{Style.RESET_ALL}. {EMOJI['UPDATE']} {translator.get('menu.disable_auto_update')}")
|
||||
print(f"{Fore.GREEN}10{Style.RESET_ALL}. {EMOJI['RESET']} {translator.get('menu.totally_reset')}")
|
||||
print(f"{Fore.YELLOW}{'─' * 40}{Style.RESET_ALL}")
|
||||
|
||||
def select_language():
|
||||
@@ -281,9 +311,66 @@ def check_latest_version():
|
||||
if not latest_version:
|
||||
raise Exception("Invalid version format received")
|
||||
|
||||
if latest_version != version:
|
||||
# Parse versions for proper comparison
|
||||
def parse_version(version_str):
|
||||
"""Parse version string into tuple for proper comparison"""
|
||||
try:
|
||||
return tuple(map(int, version_str.split('.')))
|
||||
except ValueError:
|
||||
# Fallback to string comparison if parsing fails
|
||||
return version_str
|
||||
|
||||
current_version_tuple = parse_version(version)
|
||||
latest_version_tuple = parse_version(latest_version)
|
||||
|
||||
# Compare versions properly
|
||||
is_newer_version_available = False
|
||||
if isinstance(current_version_tuple, tuple) and isinstance(latest_version_tuple, tuple):
|
||||
is_newer_version_available = current_version_tuple < latest_version_tuple
|
||||
else:
|
||||
# Fallback to string comparison
|
||||
is_newer_version_available = version != 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()
|
||||
@@ -328,7 +415,11 @@ def check_latest_version():
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('updater.manual_update_required')}{Style.RESET_ALL}")
|
||||
return
|
||||
else:
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('updater.up_to_date')}{Style.RESET_ALL}")
|
||||
# If current version is newer or equal to latest version
|
||||
if current_version_tuple > latest_version_tuple:
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('updater.development_version', current=version, latest=latest_version)}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('updater.up_to_date')}{Style.RESET_ALL}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('updater.network_error', error=str(e))}{Style.RESET_ALL}")
|
||||
@@ -343,11 +434,11 @@ def check_latest_version():
|
||||
def main():
|
||||
# Check for admin privileges if running as executable on Windows only
|
||||
if platform.system() == 'Windows' and is_frozen() and not is_admin():
|
||||
print(f"{Fore.YELLOW}{EMOJI['ADMIN']} Running as executable, administrator privileges required.{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['ADMIN']} {translator.get('menu.admin_required')}{Style.RESET_ALL}")
|
||||
if run_as_admin():
|
||||
sys.exit(0) # Exit after requesting admin privileges
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} Continuing without administrator privileges.{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('menu.admin_required_continue')}{Style.RESET_ALL}")
|
||||
|
||||
print_logo()
|
||||
|
||||
@@ -362,7 +453,7 @@ def main():
|
||||
|
||||
while True:
|
||||
try:
|
||||
choice = input(f"\n{EMOJI['ARROW']} {Fore.CYAN}{translator.get('menu.input_choice', choices='0-8')}: {Style.RESET_ALL}")
|
||||
choice = input(f"\n{EMOJI['ARROW']} {Fore.CYAN}{translator.get('menu.input_choice', choices='0-10')}: {Style.RESET_ALL}")
|
||||
|
||||
if choice == "0":
|
||||
print(f"\n{Fore.YELLOW}{EMOJI['INFO']} {translator.get('menu.exit')}...{Style.RESET_ALL}")
|
||||
@@ -389,17 +480,27 @@ def main():
|
||||
cursor_register_manual.main(translator)
|
||||
print_menu()
|
||||
elif choice == "6":
|
||||
import github_cursor_register
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('menu.coming_soon')}{Style.RESET_ALL}")
|
||||
# github_cursor_register.main(translator)
|
||||
print_menu()
|
||||
elif choice == "7":
|
||||
import quit_cursor
|
||||
quit_cursor.quit_cursor(translator)
|
||||
print_menu()
|
||||
elif choice == "7":
|
||||
elif choice == "8":
|
||||
if select_language():
|
||||
print_menu()
|
||||
continue
|
||||
elif choice == "8":
|
||||
elif choice == "9":
|
||||
import disable_auto_update
|
||||
disable_auto_update.run(translator)
|
||||
print_menu()
|
||||
elif choice == "10":
|
||||
import totally_reset_cursor
|
||||
# totally_reset_cursor.main(translator)
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('menu.fixed_soon')}{Style.RESET_ALL}")
|
||||
print_menu()
|
||||
else:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('menu.invalid_choice')}{Style.RESET_ALL}")
|
||||
print_menu()
|
||||
|
||||
@@ -12,16 +12,32 @@ from config import get_config
|
||||
# Add global variable at the beginning of the file
|
||||
_translator = None
|
||||
|
||||
# Add global variable to track our Chrome processes
|
||||
_chrome_process_ids = []
|
||||
|
||||
def cleanup_chrome_processes(translator=None):
|
||||
"""Clean all Chrome related processes"""
|
||||
print("\nCleaning Chrome processes...")
|
||||
"""Clean only Chrome processes launched by this script"""
|
||||
global _chrome_process_ids
|
||||
|
||||
if not _chrome_process_ids:
|
||||
print("\nNo Chrome processes to clean...")
|
||||
return
|
||||
|
||||
print("\nCleaning Chrome processes launched by this script...")
|
||||
try:
|
||||
if os.name == 'nt':
|
||||
os.system('taskkill /F /IM chrome.exe /T 2>nul')
|
||||
os.system('taskkill /F /IM chromedriver.exe /T 2>nul')
|
||||
for pid in _chrome_process_ids:
|
||||
try:
|
||||
os.system(f'taskkill /F /PID {pid} /T 2>nul')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
os.system('pkill -f chrome')
|
||||
os.system('pkill -f chromedriver')
|
||||
for pid in _chrome_process_ids:
|
||||
try:
|
||||
os.kill(pid, signal.SIGTERM)
|
||||
except:
|
||||
pass
|
||||
_chrome_process_ids = [] # Reset the list after cleanup
|
||||
except Exception as e:
|
||||
if translator:
|
||||
print(f"{Fore.RED}❌ {translator.get('register.cleanup_error', error=str(e))}{Style.RESET_ALL}")
|
||||
@@ -164,6 +180,8 @@ def get_random_wait_time(config, timing_type='page_load_wait'):
|
||||
|
||||
def setup_driver(translator=None):
|
||||
"""Setup browser driver"""
|
||||
global _chrome_process_ids
|
||||
|
||||
try:
|
||||
# Get config
|
||||
config = get_config(translator)
|
||||
@@ -211,7 +229,35 @@ def setup_driver(translator=None):
|
||||
else:
|
||||
print("Starting browser...")
|
||||
|
||||
# Record Chrome processes before launching
|
||||
before_pids = []
|
||||
try:
|
||||
import psutil
|
||||
before_pids = [p.pid for p in psutil.process_iter() if 'chrome' in p.name().lower()]
|
||||
except:
|
||||
pass
|
||||
|
||||
# Launch browser
|
||||
page = ChromiumPage(co)
|
||||
|
||||
# Wait a moment for Chrome to fully launch
|
||||
time.sleep(1)
|
||||
|
||||
# Record Chrome processes after launching and find new ones
|
||||
try:
|
||||
import psutil
|
||||
after_pids = [p.pid for p in psutil.process_iter() if 'chrome' in p.name().lower()]
|
||||
# Find new Chrome processes
|
||||
new_pids = [pid for pid in after_pids if pid not in before_pids]
|
||||
_chrome_process_ids.extend(new_pids)
|
||||
|
||||
if _chrome_process_ids:
|
||||
print(f"Tracking {len(_chrome_process_ids)} Chrome processes")
|
||||
else:
|
||||
print(f"{Fore.YELLOW}Warning: No new Chrome processes detected to track{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"Warning: Could not track Chrome processes: {e}")
|
||||
|
||||
return config, page
|
||||
|
||||
except Exception as e:
|
||||
@@ -563,7 +609,9 @@ def handle_sign_in(browser_tab, email, password, translator=None):
|
||||
def main(email=None, password=None, first_name=None, last_name=None, email_tab=None, controller=None, translator=None):
|
||||
"""Main function, can receive account information, email tab, and translator"""
|
||||
global _translator
|
||||
global _chrome_process_ids
|
||||
_translator = translator # Save to global variable
|
||||
_chrome_process_ids = [] # Reset the process IDs list
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
387
new_tempemail.py
387
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,166 +82,114 @@ 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 get_extension_block(self):
|
||||
"""获取插件路径"""
|
||||
root_dir = os.getcwd()
|
||||
extension_path = os.path.join(root_dir, "PBlock")
|
||||
|
||||
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:
|
||||
extension_path = self.get_extension_block()
|
||||
co.set_argument("--allow-extensions-in-incognito")
|
||||
co.add_extension(extension_path)
|
||||
except Exception as e:
|
||||
if self.translator:
|
||||
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.extension_load_error')}: {str(e)}{Style.RESET_ALL}")
|
||||
else:
|
||||
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):
|
||||
"""create temporary email"""
|
||||
max_retries = 3 # Maximum number of retries
|
||||
attempt = 0 # Current attempt count
|
||||
|
||||
while attempt < max_retries:
|
||||
attempt += 1
|
||||
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"]
|
||||
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}")
|
||||
|
||||
# load blocked domains list
|
||||
self.blocked_domains = self.get_blocked_domains()
|
||||
|
||||
# visit website
|
||||
self.page.get("https://smailpro.com/")
|
||||
time.sleep(2)
|
||||
|
||||
# click create email button
|
||||
create_button = self.page.ele('xpath://button[@title="Create temporary email"]')
|
||||
if create_button:
|
||||
create_button.click()
|
||||
time.sleep(1)
|
||||
|
||||
# click Create button in popup
|
||||
modal_create_button = self.page.ele('xpath://button[contains(text(), "Create")]')
|
||||
if modal_create_button:
|
||||
modal_create_button.click()
|
||||
time.sleep(2)
|
||||
|
||||
# get email address - modify selector
|
||||
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: # check if it's a valid email address
|
||||
# check if domain is blocked
|
||||
domain = email.split('@')[1]
|
||||
if self.blocked_domains and domain in self.blocked_domains:
|
||||
if self.translator:
|
||||
print(f"{Fore.CYAN}ℹ️ {self.translator.get('email.switching_service', service=service['name'])}{Style.RESET_ALL}")
|
||||
print(f"{Fore.YELLOW}⚠️ {self.translator.get('email.domain_blocked')}: {domain}{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
|
||||
|
||||
except Exception as e:
|
||||
if attempt < max_retries:
|
||||
print(f"{Fore.YELLOW}⚠️ 尝试重新创建邮箱... (尝试 {attempt}/{max_retries}){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}⚠️ 域名已被屏蔽: {domain},尝试重新创建邮箱{Style.RESET_ALL}")
|
||||
# create email again
|
||||
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:
|
||||
@@ -238,11 +203,11 @@ class NewTempEmail:
|
||||
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:
|
||||
# click refresh button
|
||||
refresh_button = self.page.ele('xpath://button[@id="refresh"]')
|
||||
if refresh_button:
|
||||
refresh_button.click()
|
||||
time.sleep(2) # wait for refresh to complete
|
||||
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
|
||||
|
||||
# find verification email - use more accurate selector
|
||||
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}")
|
||||
# use JavaScript to click element
|
||||
self.page.run_js('arguments[0].click()', email_div)
|
||||
time.sleep(2) # wait for email content to load
|
||||
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
|
||||
|
||||
# find verification code element
|
||||
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
|
||||
# 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
|
||||
|
||||
|
||||
@@ -5,4 +5,6 @@ requests
|
||||
psutil>=5.8.0
|
||||
pywin32; platform_system == "Windows"
|
||||
pyinstaller
|
||||
DrissionPage>=4.0.0
|
||||
DrissionPage>=4.0.0
|
||||
selenium
|
||||
webdriver_manager
|
||||
|
||||
@@ -37,10 +37,41 @@ def get_cursor_paths(translator=None) -> Tuple[str, str]:
|
||||
config_dir = os.path.join(get_user_documents_path(), ".cursor-free-vip")
|
||||
config_file = os.path.join(config_dir, "config.ini")
|
||||
|
||||
# Create config directory if it doesn't exist
|
||||
if not os.path.exists(config_dir):
|
||||
os.makedirs(config_dir)
|
||||
|
||||
# Default paths for different systems
|
||||
default_paths = {
|
||||
"Darwin": "/Applications/Cursor.app/Contents/Resources/app",
|
||||
"Windows": os.path.join(os.getenv("LOCALAPPDATA", ""), "Programs", "Cursor", "resources", "app"),
|
||||
"Linux": ["/opt/Cursor/resources/app", "/usr/share/cursor/resources/app", os.path.expanduser("~/.local/share/cursor/resources/app")]
|
||||
}
|
||||
|
||||
# If config doesn't exist, create it with default paths
|
||||
if not os.path.exists(config_file):
|
||||
raise OSError(translator.get('reset.config_not_found') if translator else "找不到配置文件")
|
||||
for section in ['MacPaths', 'WindowsPaths', 'LinuxPaths']:
|
||||
if not config.has_section(section):
|
||||
config.add_section(section)
|
||||
|
||||
config.read(config_file, encoding='utf-8') # Specify encoding
|
||||
if system == "Darwin":
|
||||
config.set('MacPaths', 'cursor_path', default_paths["Darwin"])
|
||||
elif system == "Windows":
|
||||
config.set('WindowsPaths', 'cursor_path', default_paths["Windows"])
|
||||
elif system == "Linux":
|
||||
# For Linux, try to find the first existing path
|
||||
for path in default_paths["Linux"]:
|
||||
if os.path.exists(path):
|
||||
config.set('LinuxPaths', 'cursor_path', path)
|
||||
break
|
||||
else:
|
||||
# If no path exists, use the first one as default
|
||||
config.set('LinuxPaths', 'cursor_path', default_paths["Linux"][0])
|
||||
|
||||
with open(config_file, 'w', encoding='utf-8') as f:
|
||||
config.write(f)
|
||||
else:
|
||||
config.read(config_file, encoding='utf-8')
|
||||
|
||||
# Get path based on system
|
||||
if system == "Darwin":
|
||||
@@ -51,15 +82,26 @@ def get_cursor_paths(translator=None) -> Tuple[str, str]:
|
||||
section = 'LinuxPaths'
|
||||
else:
|
||||
raise OSError(translator.get('reset.unsupported_os', system=system) if translator else f"不支持的操作系统: {system}")
|
||||
|
||||
|
||||
if not config.has_section(section) or not config.has_option(section, 'cursor_path'):
|
||||
raise OSError(translator.get('reset.path_not_configured') if translator else "未配置 Cursor 路徑")
|
||||
|
||||
|
||||
base_path = config.get(section, 'cursor_path')
|
||||
|
||||
# For Linux, try to find the first existing path if the configured one doesn't exist
|
||||
if system == "Linux" and not os.path.exists(base_path):
|
||||
for path in default_paths["Linux"]:
|
||||
if os.path.exists(path):
|
||||
base_path = path
|
||||
# Update config with the found path
|
||||
config.set(section, 'cursor_path', path)
|
||||
with open(config_file, 'w', encoding='utf-8') as f:
|
||||
config.write(f)
|
||||
break
|
||||
|
||||
if not os.path.exists(base_path):
|
||||
raise OSError(translator.get('reset.path_not_found', path=base_path) if translator else f"找不到 Cursor 路徑: {base_path}")
|
||||
|
||||
|
||||
pkg_path = os.path.join(base_path, "package.json")
|
||||
main_path = os.path.join(base_path, "out/main.js")
|
||||
|
||||
@@ -96,7 +138,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 +493,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')
|
||||
|
||||
196
totally_reset_cursor.py
Normal file
196
totally_reset_cursor.py
Normal file
@@ -0,0 +1,196 @@
|
||||
import os
|
||||
import shutil
|
||||
import platform
|
||||
import time
|
||||
import uuid
|
||||
import subprocess
|
||||
from colorama import Fore, Style, init
|
||||
|
||||
init()
|
||||
|
||||
EMOJI = {
|
||||
"SUCCESS": "✅",
|
||||
"ERROR": "❌",
|
||||
"INFO": "ℹ️",
|
||||
"RESET": "🔄",
|
||||
"MENU": "📋",
|
||||
"WARNING": "⚠️"
|
||||
}
|
||||
|
||||
def delete_directory(path, translator=None):
|
||||
"""Deletes a directory and all its contents."""
|
||||
if os.path.exists(path):
|
||||
try:
|
||||
shutil.rmtree(path)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('totally_reset.removed', path=path)}{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('totally_reset.failed_to_remove', path=path, error=e)}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('totally_reset.not_found', path=path)}{Style.RESET_ALL}")
|
||||
|
||||
def delete_file(path, translator=None):
|
||||
"""Deletes a file if it exists."""
|
||||
if os.path.isfile(path):
|
||||
try:
|
||||
os.remove(path)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('totally_reset.removed', path=path)}{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('totally_reset.failed_to_remove', path=path, error=e)}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"{Fore.YELLOW}{EMOJI['INFO']} {translator.get('totally_reset.not_found', path=path)}{Style.RESET_ALL}")
|
||||
|
||||
def reset_machine_id(translator=None):
|
||||
"""Resets the machine ID to a new UUID."""
|
||||
new_id = str(uuid.uuid4())
|
||||
if platform.system() == "Windows":
|
||||
try:
|
||||
subprocess.run(
|
||||
["reg", "add", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography", "/v", "MachineGuid", "/d", new_id, "/f"],
|
||||
check=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE
|
||||
)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('totally_reset.machine_guid_reset', new_id=new_id)}{Style.RESET_ALL}")
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('totally_reset.failed_to_reset_machine_guid', error=e)}{Style.RESET_ALL}")
|
||||
elif platform.system() == "Linux":
|
||||
machine_id_paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"]
|
||||
for path in machine_id_paths:
|
||||
if os.path.exists(path):
|
||||
try:
|
||||
with open(path, 'w') as f:
|
||||
f.write(new_id)
|
||||
print(f"{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('totally_reset.machine_id_reset', path=path)}{Style.RESET_ALL}")
|
||||
except Exception as e:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('totally_reset.failed_to_reset_machine_id', path=path, error=e)}{Style.RESET_ALL}")
|
||||
elif platform.system() == "Darwin": # macOS
|
||||
print("ℹ️ macOS does not use a machine-id file. Skipping machine ID reset.")
|
||||
else:
|
||||
print(f"{Fore.RED}{EMOJI['ERROR']} {translator.get('totally_reset.unsupported_os')}{Style.RESET_ALL}")
|
||||
|
||||
def display_features_and_warnings(translator=None):
|
||||
"""Displays features and warnings before proceeding."""
|
||||
print(f"\n{Fore.GREEN}{EMOJI['MENU']} {translator.get('totally_reset.title')}")
|
||||
print("=====================================")
|
||||
print(f"{translator.get('totally_reset.feature_title')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_1')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_2')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_3')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_4')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_5')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_6')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_7')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_8')}")
|
||||
print(f"{Fore.GREEN}{translator.get('totally_reset.feature_9')}")
|
||||
print(f"\n{Fore.YELLOW}{EMOJI['WARNING']} {translator.get('totally_reset.warning_title')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_1')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_2')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_3')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_4')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_5')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_6')}")
|
||||
print(f"{Fore.YELLOW}{translator.get('totally_reset.warning_7')}")
|
||||
print("=====================================\n")
|
||||
|
||||
def get_user_confirmation(translator=None):
|
||||
"""Prompts the user for confirmation to proceed."""
|
||||
while True:
|
||||
response = input(f"{Fore.YELLOW} {translator.get('totally_reset.confirm_title')} {translator.get('totally_reset.invalid_choice')}: ").lower().strip()
|
||||
if response in ['yes', 'y']:
|
||||
return True
|
||||
elif response in ['no', 'n']:
|
||||
return False
|
||||
else:
|
||||
print(f"{Fore.RED}{translator.get('totally_reset.invalid_choice')}{Style.RESET_ALL}")
|
||||
|
||||
def reset_cursor(translator=None):
|
||||
print(f"\n{Fore.GREEN}{EMOJI['RESET']} {translator.get('totally_reset.resetting_cursor')}\n")
|
||||
|
||||
# Platform-specific paths
|
||||
paths = []
|
||||
if platform.system() == "Linux":
|
||||
paths = [
|
||||
os.path.expanduser("~/.cursor"),
|
||||
os.path.expanduser("~/.local/share/cursor"),
|
||||
os.path.expanduser("~/.config/cursor"),
|
||||
os.path.expanduser("~/.cache/cursor"),
|
||||
"/usr/local/bin/cursor",
|
||||
"/opt/cursor",
|
||||
"/usr/bin/cursor",
|
||||
os.path.expanduser("~/.cursor/machine-id.db"),
|
||||
os.path.expanduser("~/.local/share/Cursor"),
|
||||
os.path.expanduser("~/.config/Cursor"),
|
||||
os.path.expanduser("~/.cache/Cursor")
|
||||
]
|
||||
elif platform.system() == "Darwin": # macOS
|
||||
paths = [
|
||||
os.path.expanduser("~/Library/Application Support/Cursor"),
|
||||
os.path.expanduser("~/Library/Caches/Cursor"),
|
||||
"/Applications/Cursor.app",
|
||||
os.path.expanduser("~/Library/Preferences/com.cursor.app.plist"),
|
||||
]
|
||||
elif platform.system() == "Windows":
|
||||
paths = [
|
||||
os.path.expanduser("~\\AppData\\Local\\Cursor"),
|
||||
os.path.expanduser("~\\AppData\\Roaming\\Cursor"),
|
||||
os.path.expanduser("~\\.cursor"),
|
||||
os.path.expanduser("~\\.config\\Cursor"),
|
||||
os.path.expanduser("~\\.cache\\Cursor"),
|
||||
"C:\\Program Files\\Cursor",
|
||||
"C:\\Program Files (x86)\\Cursor",
|
||||
"C:\\Users\\%USERNAME%\\AppData\\Local\\Cursor",
|
||||
"C:\\Users\\%USERNAME%\\AppData\\Roaming\\Cursor",
|
||||
]
|
||||
|
||||
# Remove directories
|
||||
for path in paths:
|
||||
delete_directory(path, translator)
|
||||
|
||||
# Remove common files related to Cursor
|
||||
files = [
|
||||
os.path.expanduser("~/.cursor/machine-id.db"),
|
||||
os.path.expanduser("~/.local/share/cursor.db"),
|
||||
os.path.expanduser("~/.config/cursor/preferences.json"),
|
||||
os.path.expanduser("~/.cache/cursor.log"),
|
||||
]
|
||||
|
||||
for file in files:
|
||||
delete_file(file, translator)
|
||||
|
||||
# Extra cleanup (wildcard search)
|
||||
print(f"\n{Fore.YELLOW}{EMOJI['INFO']} {translator.get('totally_reset.deep_scanning')}")
|
||||
base_dirs = ["/tmp", "/var/tmp", os.path.expanduser("~")] # Linux and macOS
|
||||
if platform.system() == "Windows":
|
||||
base_dirs = ["C:\\Temp", "C:\\Windows\\Temp", os.path.expanduser("~")] # Windows
|
||||
|
||||
for base in base_dirs:
|
||||
for root, dirs, files in os.walk(base):
|
||||
for dir in dirs:
|
||||
if "cursor" in dir.lower():
|
||||
delete_directory(os.path.join(root, dir), translator)
|
||||
for file in files:
|
||||
if "cursor" in file.lower():
|
||||
delete_file(os.path.join(root, file), translator)
|
||||
|
||||
# Reset machine ID
|
||||
reset_machine_id(translator)
|
||||
|
||||
print(f"\n{Fore.GREEN}{EMOJI['SUCCESS']} {translator.get('totally_reset.cursor_reset_completed')}")
|
||||
|
||||
def main(translator=None):
|
||||
start_time = time.time()
|
||||
|
||||
# Display features and warnings
|
||||
display_features_and_warnings(translator)
|
||||
|
||||
# Get user confirmation
|
||||
if get_user_confirmation(translator):
|
||||
reset_cursor(translator)
|
||||
end_time = time.time()
|
||||
print(f"\n{Fore.GREEN}⏱️ {translator.get('totally_reset.completed_in', time=f'{end_time - start_time:.2f} seconds')}{Style.RESET_ALL}")
|
||||
else:
|
||||
print(f"\n{Fore.RED}❌ {translator.get('totally_reset.operation_cancelled')}{Style.RESET_ALL}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
from main import translator
|
||||
main(translator)
|
||||
Reference in New Issue
Block a user