diff --git a/.env b/.env index d3c1634..9387943 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -version=1.7.06 -VERSION=1.7.06 +version=1.7.07 +VERSION=1.7.07 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3759b16..3ed7707 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v1.7.07 +1. Add: Vietnamese Language | 增加越南語言 +2. Add: Admin Privilege Management for Windows Executable | 增加Windows可執行文件管理員權限 +3. Implement admin privilege detection for Windows platform | 實現Windows平台管理員權限檢測 +4. Add functions to check and request admin rights when running as a frozen executable | 增加檢查和請求管理員權限的功能 +5. Enhance startup process with admin privilege verification | 增強啟動過程中的管理員權限驗證 +6. Add new admin-related emoji to the EMOJI dictionary | 增加新的管理員相關表情符號到EMOJI字典 +7. Provide fallback mechanism for non-Windows platforms (macos and linux ) | 提供非Windows平台(macos和linux)的回退機制 +These changes make the application more user-friendly by only requesting admin privileges when necessary (when running as an executable). | 這些改進使應用程序更易於使用,只在必要時(當作為可執行文件運行時)請求管理員權限。 + ## v1.7.06 1. Add: Update Confirm | 增加更新確認 2. Add: Update Skipped | 增加更新跳過 diff --git a/locales/en.json b/locales/en.json index 15b39b1..0b0e3ab 100644 --- a/locales/en.json +++ b/locales/en.json @@ -17,7 +17,8 @@ "languages": { "en": "English", "zh_cn": "简体中文", - "zh_tw": "繁體中文" + "zh_tw": "繁體中文", + "vi": "Vietnamese" }, "quit_cursor": { "start": "Start Quitting Cursor", diff --git a/locales/vi.json b/locales/vi.json new file mode 100644 index 0000000..d8a75be --- /dev/null +++ b/locales/vi.json @@ -0,0 +1,281 @@ +{ + "menu": { + "title": "Các Tùy Chọn Khả Dụng", + "exit": "Thoát Chương Trình", + "reset": "Đặt Lại ID Máy", + "register": "Đăng Ký Tài Khoản Cursor Mới", + "register_manual": "Đăng Ký Cursor Với Email Tùy Chỉnh", + "quit": "Đóng Ứng Dụng Cursor", + "select_language": "Thay Đổi Ngôn Ngữ", + "input_choice": "Vui lòng nhập lựa chọn của bạn ({choices})", + "invalid_choice": "Lựa chọn không hợp lệ. Vui lòng nhập một số từ {choices}", + "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" + }, + "languages": { + "en": "English", + "zh_cn": "简体中文", + "zh_tw": "繁體中文", + "vi": "Tiếng Việt" + }, + "quit_cursor": { + "start": "Bắt Đầu Thoát Cursor", + "no_process": "Không Có Tiến Trình Cursor Đang Chạy", + "terminating": "Đang Chấm Dứt Tiến Trình {pid}", + "waiting": "Đang Chờ Tiến Trình Thoát", + "success": "Tất Cả Tiến Trình Cursor Đã Đóng", + "timeout": "Tiến Trình Hết Thời Gian: {pids}", + "error": "Đã Xảy Ra Lỗi: {error}" + }, + "reset": { + "title": "Công Cụ Đặt Lại ID Máy Cursor", + "checking": "Đang Kiểm Tra Tệp Cấu Hình", + "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": "Đ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": "Đang Tạo ID Máy Mới", + "saving_json": "Đang Lưu Cấu Hình Mới Vào JSON", + "success": "Đặt Lại ID Máy Thành Công", + "new_id": "ID Máy Mới", + "permission_error": "Lỗi Quyền: {error}", + "run_as_admin": "Vui Lòng Thử Chạy Chương Trình Này Với Quyền Quản Trị", + "process_error": "Lỗi Quá Trình Đặt Lại: {error}", + "updating_sqlite": "Đang Cập Nhật Cơ Sở Dữ Liệu SQLite", + "updating_pair": "Đang Cập Nhật Cặp Khóa-Giá Trị", + "sqlite_success": "Cập Nhật Cơ Sở Dữ Liệu SQLite Thành Công", + "sqlite_error": "Cập Nhật Cơ Sở Dữ Liệu SQLite Thất Bại: {error}", + "press_enter": "Nhấn Enter để Thoát", + "unsupported_os": "Hệ Điều Hành Không Được Hỗ Trợ: {os}", + "linux_path_not_found": "Không Tìm Thấy Đường Dẫn Linux", + "updating_system_ids": "Đang Cập Nhật ID Hệ Thống", + "system_ids_updated": "Cập Nhật ID Hệ Thống Thành Công", + "system_ids_update_failed": "Cập Nhật ID Hệ Thống Thất Bại: {error}", + "windows_guid_updated": "Cập Nhật GUID Windows Thành Công", + "windows_permission_denied": "Windows Từ Chối Quyền", + "windows_guid_update_failed": "Cập Nhật GUID Windows Thất Bại", + "macos_uuid_updated": "Cập Nhật UUID macOS Thành Công", + "plutil_command_failed": "Lệnh plutil Thất Bại", + "start_patching": "Bắt Đầu Vá getMachineId", + "macos_uuid_update_failed": "Cập Nhật UUID macOS Thất Bại", + "current_version": "Phiên Bản Cursor Hiện Tại: {version}", + "patch_completed": "Vá getMachineId Hoàn Tất", + "patch_failed": "Vá getMachineId Thất Bại: {error}", + "version_check_passed": "Kiểm Tra Phiên Bản Cursor Đã Qua", + "file_modified": "Tệp Đã Được Sửa Đổi", + "version_less_than_0_45": "Phiên Bản Cursor < 0.45.0, Bỏ Qua Vá getMachineId", + "detecting_version": "Đang Phát Hiện Phiên Bản Cursor", + "patching_getmachineid": "Đang Vá getMachineId", + "version_greater_than_0_45": "Phiên Bản Cursor >= 0.45.0, Đang Vá getMachineId", + "permission_denied": "Từ Chối Quyền: {error}", + "backup_created": "Đã Tạo Bản Sao Lưu", + "update_success": "Cập Nhật Thành Công", + "update_failed": "Cập Nhật Thất Bại: {error}", + "windows_machine_guid_updated": "Cập Nhật GUID Máy Windows Thành Công", + "reading_package_json": "Đang Đọc package.json {path}", + "invalid_json_object": "Đối Tượng JSON Không Hợp Lệ", + "no_version_field": "Không Tìm Thấy Trường Phiên Bản Trong package.json", + "version_field_empty": "Trường Phiên Bản Trống", + "invalid_version_format": "Định Dạng Phiên Bản Không Hợp Lệ: {version}", + "found_version": "Đã Tìm Thấy Phiên Bản: {version}", + "version_parse_error": "Lỗi Phân Tích Phiên Bản: {error}", + "package_not_found": "Không Tìm Thấy Package.json: {path}", + "check_version_failed": "Kiểm Tra Phiên Bản Thất Bại: {error}", + "stack_trace": "Dấu Vết Ngăn Xếp", + "version_too_low": "Phiên Bản Cursor Quá Thấp: {version} < 0.45.0" + + }, + "register": { + "title": "Công Cụ Đăng Ký Cursor", + "start": "Bắt đầu quá trình đăng ký...", + "handling_turnstile": "Đang xử lý xác minh bảo mật...", + "retry_verification": "Đang thử lại xác minh...", + "detect_turnstile": "Đang kiểm tra xác minh bảo mật...", + "verification_success": "Xác minh bảo mật thành công", + "starting_browser": "Đang mở trình duyệt...", + "form_success": "Biểu mẫu đã được gửi thành công", + "browser_started": "Trình duyệt đã được mở thành công", + "waiting_for_second_verification": "Đang chờ xác minh email...", + "waiting_for_verification_code": "Đang chờ mã xác minh...", + "password_success": "Đặt mật khẩu thành công", + "password_error": "Không thể đặt mật khẩu: {error}. Vui lòng thử lại", + "waiting_for_page_load": "Đang tải trang...", + "first_verification_passed": "Xác minh ban đầu thành công", + "mailbox": "Đã truy cập hộp thư đến thành công", + "register_start": "Bắt Đầu Đăng Ký", + "form_submitted": "Biểu Mẫu Đã Gửi, Bắt Đầu Xác Minh...", + "filling_form": "Điền Biểu Mẫu", + "visiting_url": "Đang Truy Cập URL", + "basic_info": "Thông Tin Cơ Bản Đã Gửi", + "handle_turnstile": "Xử Lý Turnstile", + "no_turnstile": "Không Phát Hiện Turnstile", + "turnstile_passed": "Đã Vượt Qua Turnstile", + "verification_start": "Bắt Đầu Lấy Mã Xác Minh", + "verification_timeout": "Lấy Mã Xác Minh Hết Thời Gian", + "verification_not_found": "Không Tìm Thấy Mã Xác Minh", + "try_get_code": "Thử | {attempt} Lấy Mã Xác Minh | Thời Gian Còn Lại: {time}s", + "get_account": "Đang Lấy Thông Tin Tài Khoản", + "get_token": "Lấy Token Phiên Cursor", + "token_success": "Lấy Token Thành Công", + "token_attempt": "Thử | {attempt} lần để lấy Token | Sẽ thử lại sau {time}s", + "token_max_attempts": "Đạt Số Lần Thử Tối Đa ({max}) | Không Thể Lấy Token", + "token_failed": "Lấy Token Thất Bại: {error}", + "account_error": "Lấy Thông Tin Tài Khoản Thất Bại: {error}", + "press_enter": "Nhấn Enter để Thoát", + "browser_start": "Đang Khởi Động Trình Duyệt", + "open_mailbox": "Đang Mở Trang Hộp Thư", + "email_error": "Không Thể Lấy Địa Chỉ Email", + "setup_error": "Lỗi Thiết Lập Email: {error}", + "start_getting_verification_code": "Bắt Đầu Lấy Mã Xác Minh, Sẽ Thử Trong 60s", + "get_verification_code_timeout": "Lấy Mã Xác Minh Hết Thời Gian", + "get_verification_code_success": "Lấy Mã Xác Minh Thành Công", + "try_get_verification_code": "Thử | {attempt} Lấy Mã Xác Minh | Thời Gian Còn Lại: {remaining_time}s", + "verification_code_filled": "Đã Điền Mã Xác Minh", + "login_success_and_jump_to_settings_page": "Đăng Nhập Thành Công và Chuyển Đến Trang Cài Đặt", + "detect_login_page": "Phát Hiện Trang Đăng Nhập, Bắt Đầu Đăng Nhập...", + "cursor_registration_completed": "Đăng Ký Cursor Hoàn Tất!", + "set_password": "Đặt Mật Khẩu", + "basic_info_submitted": "Thông Tin Cơ Bản Đã Gửi", + "cursor_auth_info_updated": "Thông Tin Xác Thực Cursor Đã Cập Nhật", + "cursor_auth_info_update_failed": "Cập Nhật Thông Tin Xác Thực Cursor Thất Bại", + "reset_machine_id": "Đặt Lại ID Máy", + "account_info_saved": "Thông Tin Tài Khoản Đã Lưu", + "save_account_info_failed": "Lưu Thông Tin Tài Khoản Thất Bại", + "get_email_address": "Lấy Địa Chỉ Email", + "update_cursor_auth_info": "Cập Nhật Thông Tin Xác Thực Cursor", + "register_process_error": "Lỗi Quá Trình Đăng Ký: {error}", + "setting_password": "Đang Đặt Mật Khẩu", + "manual_code_input": "Nhập Mã Thủ Công", + "manual_email_input": "Nhập Email Thủ Công", + "password": "Mật Khẩu", + "first_name": "Tên", + "last_name": "Họ", + "exit_signal": "Tín Hiệu Thoát", + "email_address": "Địa Chỉ Email", + "config_created": "Đã Tạo Cấu Hình", + "verification_failed": "Xác Minh Thất Bại", + "verification_error": "Lỗi Xác Minh: {error}", + "config_option_added": "Đã Thêm Tùy Chọn Cấu Hình: {option}", + "config_updated": "Đã Cập Nhật Cấu Hình", + "password_submitted": "Đã Gửi Mật Khẩu", + "total_usage": "Tổng Sử Dụng: {usage}", + "setting_on_password": "Đang Đặt Mật Khẩu", + "getting_code": "Đang Lấy Mã Xác Minh, Sẽ Thử Trong 60s" + }, + "auth": { + "title": "Trình Quản Lý Xác Thực Cursor", + "checking_auth": "Đang Kiểm Tra Tệp Xác Thực", + "auth_not_found": "Không Tìm Thấy Tệp Xác Thực", + "auth_file_error": "Lỗi Tệp Xác Thực: {error}", + "reading_auth": "Đang Đọc Tệp Xác Thực", + "updating_auth": "Đang Cập Nhật Thông Tin Xác Thực", + "auth_updated": "Cập Nhật Thông Tin Xác Thực Thành Công", + "auth_update_failed": "Cập Nhật Thông Tin Xác Thực Thất Bại: {error}", + "auth_file_created": "Đã Tạo Tệp Xác Thực", + "auth_file_create_failed": "Tạo Tệp Xác Thực Thất Bại: {error}", + "press_enter": "Nhấn Enter để Thoát", + "reset_machine_id": "Đặt Lại ID Máy", + "database_connection_closed": "Kết Nối Cơ Sở Dữ Liệu Đã Đóng", + "database_updated_successfully": "Cập Nhật Cơ Sở Dữ Liệu Thành Công", + "connected_to_database": "Đã Kết Nối Đến Cơ Sở Dữ Liệu", + "updating_pair": "Đang Cập Nhật Cặp Khóa-Giá Trị", + "db_not_found": "Không tìm thấy tệp cơ sở dữ liệu tại: {path}", + "db_permission_error": "Không thể truy cập tệp cơ sở dữ liệu. Vui lòng kiểm tra quyền", + "db_connection_error": "Không thể kết nối đến cơ sở dữ liệu: {error}" + }, + "control": { + "generate_email": "Đang Tạo Email Mới", + "blocked_domain": "Tên Miền Bị Chặn", + "select_domain": "Đang Chọn Tên Miền Ngẫu Nhiên", + "copy_email": "Đang Sao Chép Địa Chỉ Email", + "enter_mailbox": "Đang Vào Hộp Thư", + "refresh_mailbox": "Đang Làm Mới Hộp Thư", + "check_verification": "Đang Kiểm Tra Mã Xác Minh", + "verification_found": "Đã Tìm Thấy Mã Xác Minh", + "verification_not_found": "Không Tìm Thấy Mã Xác Minh", + "browser_error": "Lỗi Điều Khiển Trình Duyệt: {error}", + "navigation_error": "Lỗi Điều Hướng: {error}", + "email_copy_error": "Lỗi Sao Chép Email: {error}", + "mailbox_error": "Lỗi Hộp Thư: {error}", + "token_saved_to_file": "Token Đã Lưu Vào cursor_tokens.txt", + "navigate_to": "Đang Điều Hướng Đến {url}", + "generate_email_success": "Tạo Email Thành Công", + "select_email_domain": "Chọn Tên Miền Email", + "select_email_domain_success": "Chọn Tên Miền Email Thành Công", + "get_email_name": "Lấy Tên Email", + "get_email_name_success": "Lấy Tên Email Thành Công", + "get_email_address": "Lấy Địa Chỉ Email", + "get_email_address_success": "Lấy Địa Chỉ Email Thành Công", + "enter_mailbox_success": "Vào Hộp Thư Thành Công", + "found_verification_code": "Đã Tìm Thấy Mã Xác Minh", + "get_cursor_session_token": "Lấy Token Phiên Cursor", + "get_cursor_session_token_success": "Lấy Token Phiên Cursor Thành Công", + "get_cursor_session_token_failed": "Lấy Token Phiên Cursor Thất Bại", + "save_token_failed": "Lưu Token Thất Bại", + "database_updated_successfully": "Cập Nhật Cơ Sở Dữ Liệu Thành Công", + "database_connection_closed": "Kết Nối Cơ Sở Dữ Liệu Đã Đóng", + "no_valid_verification_code": "Không Có Mã Xác Minh Hợp Lệ" + }, + "email": { + "starting_browser": "Đang Khởi Động Trình Duyệt", + "visiting_site": "Đang Truy Cập mail.tm", + "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}", + "refreshing": "Đang Làm Mới Email", + "refresh_success": "Làm Mới Email Thành Công", + "refresh_error": "Lỗi Làm Mới Email: {error}", + "refresh_button_not_found": "Không Tìm Thấy Nút Làm Mới", + "verification_found": "Đã Tìm Thấy Xác Minh", + "verification_not_found": "Không Tìm Thấy Xác Minh", + "verification_error": "Lỗi Xác Minh: {error}", + "verification_code_found": "Đã Tìm Thấy Mã Xác Minh", + "verification_code_not_found": "Không Tìm Thấy Mã Xác Minh", + "verification_code_error": "Lỗi Mã Xác Minh: {error}", + "address": "Địa Chỉ Email", + "all_domains_blocked": "Tất Cả Tên Miền Bị Chặn, Đang Chuyển Dịch Vụ", + "no_available_domains_after_filtering": "Không Có Tên Miền Khả Dụng Sau Khi Lọc", + "switching_service": "Đang Chuyển Sang Dịch Vụ {service}", + "domains_list_error": "Không Thể Lấy Danh Sách Tên Miền: {error}", + "failed_to_get_available_domains": "Không Thể Lấy Tên Miền Khả Dụng", + "domains_excluded": "Tên Miền Bị Loại Trừ: {domains}", + "failed_to_create_account": "Không Thể Tạo Tài Khoản", + "account_creation_error": "Lỗi Tạo Tài Khoản: {error}", + "blocked_domains": "Tên Miền Bị Chặn: {domains}", + "blocked_domains_loaded": "Đã Tải Tên Miền Bị Chặn: {count}", + "blocked_domains_loaded_error": "Lỗi Tải Tên Miền Bị Chặn: {error}", + "blocked_domains_loaded_success": "Tải Tên Miền Bị Chặn Thành Công", + "blocked_domains_loaded_timeout": "Tải Tên Miền Bị Chặn Hết Thời Gian: {timeout}s", + "blocked_domains_loaded_timeout_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}" + }, + "update": { + "title": "Tắt Tự Động Cập Nhật Cursor", + "disable_success": "Tắt Tự Động Cập Nhật Thành Công", + "disable_failed": "Tắt Tự Động Cập Nhật Thất Bại: {error}", + "press_enter": "Nhấn Enter để Thoát", + "start_disable": "Bắt Đầu Tắt Tự Động Cập Nhật", + "killing_processes": "Đang Kết Thúc Các Tiến Trình", + "processes_killed": "Đã Kết Thúc Các Tiến Trình", + "removing_directory": "Đang Xóa Thư Mục", + "directory_removed": "Đã Xóa Thư Mục", + "creating_block_file": "Đang Tạo Tệp Chặn", + "block_file_created": "Đã Tạo Tệp Chặn" + }, + "updater": { + "checking": "Đang Kiểm Tra Cập Nhật...", + "new_version_available": "Có Phiên Bản Mới! (Hiện Tại: {current}, Mới Nhất: {latest})", + "updating": "Đang Cập Nhật Lên Phiên Bản Mới Nhất. Chương Trình Sẽ Tự Động Khởi Động Lại.", + "up_to_date": "Bạn Đang Sử Dụng Phiên Bản Mới Nhất.", + "check_failed": "Không Thể Kiểm Tra Cập Nhật: {error}", + "continue_anyway": "Tiếp Tục Với Phiên Bản Hiện Tại...", + "update_confirm": "Bạn Có Muốn Cập Nhật Lên Phiên Bản Mới Nhất Không? (Y/n)", + "update_skipped": "Bỏ Qua Cập Nhật.", + "invalid_choice": "Lựa Chọn Không Hợp Lệ. Vui Lòng Nhập 'Y' Hoặc 'n'." + } +} \ No newline at end of file diff --git a/locales/zh_cn.json b/locales/zh_cn.json index 191a465..f7537a5 100644 --- a/locales/zh_cn.json +++ b/locales/zh_cn.json @@ -17,7 +17,8 @@ "languages": { "en": "English", "zh_cn": "简体中文", - "zh_tw": "繁體中文" + "zh_tw": "繁體中文", + "vi": "Vietnamese" }, "quit_cursor": { "start": "开始退出 Cursor", diff --git a/locales/zh_tw.json b/locales/zh_tw.json index f0a5a39..1d4084b 100644 --- a/locales/zh_tw.json +++ b/locales/zh_tw.json @@ -17,7 +17,8 @@ "languages": { "en": "English", "zh_cn": "简体中文", - "zh_tw": "繁體中文" + "zh_tw": "繁體中文", + "vi": "Vietnamese" }, "quit_cursor": { "start": "開始退出 Cursor", diff --git a/main.py b/main.py index 6e30781..a7bffe9 100644 --- a/main.py +++ b/main.py @@ -107,6 +107,7 @@ class Translator: 0x0409: 'en', # English 0x0404: 'zh_tw', # Traditional Chinese 0x0804: 'zh_cn', # Simplified Chinese + 0x0422: 'vi', # Vietnamese } return language_map.get(layout_id, 'en') @@ -130,14 +131,20 @@ class Translator: return 'zh_cn' elif system_locale.startswith('en'): return 'en' + elif system_locale.startswith('vi'): + return 'vi' + # Try to get language from LANG environment variable as fallback env_lang = os.getenv('LANG', '').lower() if 'tw' in env_lang or 'hk' in env_lang: return 'zh_tw' elif 'cn' in env_lang: return 'zh_cn' + elif 'vi' in env_lang: + return 'vi' + return 'en' except: return 'en' @@ -206,7 +213,7 @@ class Translator: translator = Translator() def print_menu(): - """打印菜单选项""" + """Print menu options""" print(f"\n{Fore.CYAN}{EMOJI['MENU']} {translator.get('menu.title')}:{Style.RESET_ALL}") print(f"{Fore.YELLOW}{'─' * 40}{Style.RESET_ALL}") print(f"{Fore.GREEN}0{Style.RESET_ALL}. {EMOJI['ERROR']} {translator.get('menu.exit')}")