feat: Phase 1 WinAuth Go 移植完整实现
将原 C#/.NET WinAuth 移植为 Go + Gio GUI,覆盖 Phase 1 全部功能。 核心模块: - internal/authenticator: TOTP (Google/Microsoft/Okta) + HOTP + BattleNet + Steam,含 enroll/sync/code 生成、Steam 交易确认轮询 - internal/config: YAML 配置 + 老版 WinAuth XML 导入(DPAPI + Password + Blowfish/PBKDF2 解密链) - internal/crypto: 现代加密 (WAGO1) + DPAPI 跨平台封装 + 老版 Blowfish ECB - internal/win32: 单实例 Mutex 锁 + 全局热键管理器 (RegisterHotKey + PeekMessage 泵) + SendInput Unicode 注入 + 剪贴板文本/CF_DIB 图像读写 + AttachThreadInput 焦点切换 - internal/hotkey: "Ctrl+Alt+G" 风格快捷键字符串解析/格式化 - internal/qr: gozxing 二维码解码 + otpauth:// URI 解析 - internal/i18n: en/zh-CN/de 三语 TOML UI 模块 (Gio): - 主窗口:圆环倒计时进度条、复制按钮 + Toast 反馈、空列表占位、行分隔线 - 添加流程:vendor 菜单 + 各 vendor 独立对话框 + 二维码扫描入口(文件 / 剪贴板) - 设置:密码加密、老版 XML 导入、每条目热键配置 - Steam:注册向导(含 captcha/email/SMS 多步)+ 交易确认窗 构建:Windows 主目标,非 Windows 平台所有 Win32 功能走 build-tag 桩实现。
This commit is contained in:
@@ -0,0 +1,369 @@
|
||||
# German locale file for winauth-go.
|
||||
|
||||
[app_title]
|
||||
other = "WinAuth"
|
||||
|
||||
[menu_file]
|
||||
other = "Datei"
|
||||
|
||||
[menu_help]
|
||||
other = "Hilfe"
|
||||
|
||||
[menu_add_authenticator]
|
||||
other = "Authentifikator hinzufügen"
|
||||
|
||||
[menu_choose_vendor]
|
||||
other = "Authentifikator-Typ auswählen"
|
||||
|
||||
[btn_ok]
|
||||
other = "OK"
|
||||
|
||||
[btn_cancel]
|
||||
other = "Abbrechen"
|
||||
|
||||
[btn_add]
|
||||
other = "Hinzufügen"
|
||||
|
||||
[btn_remove]
|
||||
other = "Entfernen"
|
||||
|
||||
[btn_close]
|
||||
other = "Schließen"
|
||||
|
||||
[btn_enroll]
|
||||
other = "Registrieren"
|
||||
|
||||
[vendor_google]
|
||||
other = "Google"
|
||||
|
||||
[vendor_microsoft]
|
||||
other = "Microsoft"
|
||||
|
||||
[vendor_okta]
|
||||
other = "Okta Verify"
|
||||
|
||||
[vendor_hotp]
|
||||
other = "HOTP (zählerbasiert)"
|
||||
|
||||
[vendor_battlenet]
|
||||
other = "Battle.Net"
|
||||
|
||||
[vendor_steam]
|
||||
other = "Steam"
|
||||
|
||||
[vendor_battlenet_restore]
|
||||
other = "Battle.Net (mit Wiederherstellungscode wiederherstellen)"
|
||||
|
||||
[dialog_add_google_title]
|
||||
other = "Google Authenticator hinzufügen"
|
||||
|
||||
[dialog_add_microsoft_title]
|
||||
other = "Microsoft Authenticator hinzufügen"
|
||||
|
||||
[dialog_add_okta_title]
|
||||
other = "Okta Verify hinzufügen"
|
||||
|
||||
[dialog_add_hotp_title]
|
||||
other = "HOTP-Authentifikator hinzufügen"
|
||||
|
||||
[dialog_add_battlenet_title]
|
||||
other = "Battle.Net-Authentifikator hinzufügen"
|
||||
|
||||
[dialog_add_steam_title]
|
||||
other = "Steam-Authentifikator hinzufügen"
|
||||
|
||||
[label_secret_key]
|
||||
other = "Geheimschlüssel"
|
||||
|
||||
[label_name]
|
||||
other = "Name"
|
||||
|
||||
[label_counter]
|
||||
other = "Zähler"
|
||||
|
||||
[label_serial]
|
||||
other = "Seriennummer"
|
||||
|
||||
[label_device_id]
|
||||
other = "Geräte-ID"
|
||||
|
||||
[label_steam_data]
|
||||
other = "Steam-Daten (JSON, optional)"
|
||||
|
||||
[label_region]
|
||||
other = "Region"
|
||||
|
||||
[label_show_secret]
|
||||
other = "Geheimnis anzeigen"
|
||||
|
||||
[region_auto]
|
||||
other = "Automatisch erkennen"
|
||||
|
||||
[msg_empty_secret]
|
||||
other = "Bitte einen Geheimschlüssel eingeben."
|
||||
|
||||
[msg_invalid_secret]
|
||||
other = "Der Geheimschlüssel ist kein gültiger Base32-Wert."
|
||||
|
||||
[msg_empty_serial]
|
||||
other = "Bitte die Seriennummer eingeben."
|
||||
|
||||
[msg_invalid_counter]
|
||||
other = "Der Zähler muss eine nicht-negative ganze Zahl sein."
|
||||
|
||||
[msg_enrolling]
|
||||
other = "Verbinde mit dem Server..."
|
||||
|
||||
[msg_enroll_failed]
|
||||
other = "Registrierung fehlgeschlagen: %s"
|
||||
|
||||
[menu_settings]
|
||||
other = "Einstellungen"
|
||||
|
||||
[menu_set_password]
|
||||
other = "Passwort festlegen..."
|
||||
|
||||
[menu_about]
|
||||
other = "Über"
|
||||
|
||||
[dialog_password_title]
|
||||
other = "Passwort eingeben"
|
||||
|
||||
[dialog_set_password_title]
|
||||
other = "Passwort festlegen"
|
||||
|
||||
[label_password]
|
||||
other = "Passwort"
|
||||
|
||||
[label_password_confirm]
|
||||
other = "Passwort bestätigen"
|
||||
|
||||
[hint_password_empty_disables]
|
||||
other = "Beide Felder leer lassen, um die Verschlüsselung zu deaktivieren."
|
||||
|
||||
[msg_password_required]
|
||||
other = "Die Konfiguration ist verschlüsselt. Bitte das Passwort eingeben."
|
||||
|
||||
[msg_password_wrong]
|
||||
other = "Falsches Passwort."
|
||||
|
||||
[msg_password_mismatch]
|
||||
other = "Die beiden Passwörter stimmen nicht überein."
|
||||
|
||||
[msg_save_failed]
|
||||
other = "Speichern der Konfiguration fehlgeschlagen: %s"
|
||||
|
||||
[msg_load_failed]
|
||||
other = "Laden der Konfiguration fehlgeschlagen: %s"
|
||||
|
||||
# --- Steam-Registrierungsassistent ---
|
||||
|
||||
[steam_step_credentials]
|
||||
other = "Bitte geben Sie Ihre Steam-Zugangsdaten ein. Das Passwort wird mit Steams öffentlichem RSA-Schlüssel verschlüsselt gesendet und nicht lokal gespeichert."
|
||||
|
||||
[steam_step_captcha]
|
||||
other = "Steam verlangt ein Captcha. Bitte geben Sie die Zeichen aus dem Bild unten ein."
|
||||
|
||||
[steam_step_email]
|
||||
other = "Steam hat einen Bestätigungscode an %s gesendet. Bitte unten eingeben."
|
||||
|
||||
[steam_step_activation]
|
||||
other = "Steam hat einen SMS-Code an Ihr Telefon gesendet. Geben Sie ihn unten ein, um die Registrierung abzuschließen."
|
||||
|
||||
[steam_step_done]
|
||||
other = "Registrierung abgeschlossen. Notieren Sie den Widerrufscode JETZT — ohne ihn können Sie den Authentifikator nicht mehr aus Ihrem Steam-Konto entfernen."
|
||||
|
||||
[label_username]
|
||||
other = "Benutzername"
|
||||
|
||||
[label_captcha_text]
|
||||
other = "Captcha"
|
||||
|
||||
[label_email_code]
|
||||
other = "E-Mail-Code"
|
||||
|
||||
[label_activation_code]
|
||||
other = "Aktivierungscode (SMS)"
|
||||
|
||||
[label_revocation_code]
|
||||
other = "Widerrufscode"
|
||||
|
||||
[hint_captcha_loading]
|
||||
other = "Captcha wird geladen..."
|
||||
|
||||
[hint_captcha_failed]
|
||||
other = "Captcha konnte nicht geladen werden: %s"
|
||||
|
||||
[btn_login]
|
||||
other = "Anmelden"
|
||||
|
||||
[btn_continue]
|
||||
other = "Weiter"
|
||||
|
||||
[btn_activate]
|
||||
other = "Aktivieren"
|
||||
|
||||
[btn_finish]
|
||||
other = "Fertig"
|
||||
|
||||
[btn_trades]
|
||||
other = "Bestätigungen"
|
||||
|
||||
[btn_refresh]
|
||||
other = "Aktualisieren"
|
||||
|
||||
[btn_accept]
|
||||
other = "Annehmen"
|
||||
|
||||
[btn_reject]
|
||||
other = "Ablehnen"
|
||||
|
||||
[msg_empty_username]
|
||||
other = "Bitte einen Benutzernamen eingeben."
|
||||
|
||||
[msg_empty_password]
|
||||
other = "Bitte ein Passwort eingeben."
|
||||
|
||||
[msg_empty_captcha]
|
||||
other = "Bitte den Captcha-Text eingeben."
|
||||
|
||||
[msg_empty_email_code]
|
||||
other = "Bitte den Code aus Ihrer E-Mail eingeben."
|
||||
|
||||
[msg_empty_activation_code]
|
||||
other = "Bitte den Aktivierungscode aus der SMS eingeben."
|
||||
|
||||
[msg_busy]
|
||||
other = "Verarbeitung läuft — bitte warten..."
|
||||
|
||||
# --- Steam Bestätigungsfenster ---
|
||||
|
||||
[dialog_steam_trades_title]
|
||||
other = "Steam-Bestätigungen"
|
||||
|
||||
[steam_trades_empty]
|
||||
other = "Keine ausstehenden Bestätigungen."
|
||||
|
||||
[steam_trades_loading]
|
||||
other = "Bestätigungen werden geladen..."
|
||||
|
||||
[steam_trades_session_missing]
|
||||
other = "Dieser Steam-Authentifikator hat keine gespeicherte Login-Sitzung. Bitte fügen Sie ihn erneut über den Registrierungsassistenten hinzu, um Bestätigungen zu verwalten."
|
||||
|
||||
[steam_trades_error]
|
||||
other = "Bestätigungen konnten nicht geladen werden: %s"
|
||||
|
||||
# --- Battle.Net Wiederherstellung mit Papier-Code ---
|
||||
|
||||
[dialog_restore_battlenet_title]
|
||||
other = "Battle.Net-Authentifikator wiederherstellen"
|
||||
|
||||
[battlenet_restore_intro]
|
||||
other = "Geben Sie die Seriennummer und den 10-stelligen Wiederherstellungscode ein, den Sie bei der Erstregistrierung notiert haben. Jeder, der beides besitzt, kann den vollen Kontozugriff wiederherstellen — bewahren Sie den Code geheim auf."
|
||||
|
||||
[label_restore_code]
|
||||
other = "Wiederherstellungscode"
|
||||
|
||||
[label_show_restore_code]
|
||||
other = "Wiederherstellungscode anzeigen"
|
||||
|
||||
[btn_restore]
|
||||
other = "Wiederherstellen"
|
||||
|
||||
[msg_empty_restore_code]
|
||||
other = "Bitte den 10-stelligen Wiederherstellungscode eingeben."
|
||||
|
||||
[msg_restoring]
|
||||
other = "Wird von Battle.Net wiederhergestellt..."
|
||||
|
||||
[msg_restore_failed]
|
||||
other = "Wiederherstellung fehlgeschlagen: %s"
|
||||
|
||||
# --- Import alter WinAuth-XML-Konfiguration ---
|
||||
|
||||
[menu_import_legacy]
|
||||
other = "Alte WinAuth-XML importieren..."
|
||||
|
||||
[dialog_import_legacy_title]
|
||||
other = "Alte WinAuth-Konfiguration importieren"
|
||||
|
||||
[import_legacy_intro]
|
||||
other = "Wählen Sie die winauth.xml der ursprünglichen WinAuth (gewöhnlich unter %APPDATA%\\WinAuth). DPAPI-verschlüsselte Einträge lassen sich nur auf demselben Windows-Konto/Rechner entschlüsseln, mit dem sie verschlüsselt wurden. Importierte Einträge werden an die aktuelle Liste angehängt."
|
||||
|
||||
[label_import_path]
|
||||
other = "Pfad zur winauth.xml"
|
||||
|
||||
[btn_import]
|
||||
other = "Importieren"
|
||||
|
||||
[msg_empty_import_path]
|
||||
other = "Bitte den Pfad zur winauth.xml angeben."
|
||||
|
||||
[msg_legacy_password_required]
|
||||
other = "Diese Datei enthält passwortverschlüsselte Einträge — bitte das ursprüngliche WinAuth-Passwort eingeben."
|
||||
|
||||
[msg_legacy_password_wrong]
|
||||
other = "Falsches Passwort für die alte WinAuth-Datei."
|
||||
|
||||
[msg_import_failed]
|
||||
other = "Import fehlgeschlagen: %s"
|
||||
|
||||
# --- Hotkey-Konfiguration ---
|
||||
|
||||
[btn_hotkey]
|
||||
other = "Hotkey..."
|
||||
|
||||
[btn_clear_hotkey]
|
||||
other = "Hotkey löschen"
|
||||
|
||||
[dialog_hotkey_title]
|
||||
other = "Hotkey bearbeiten"
|
||||
|
||||
[label_hotkey]
|
||||
other = "Hotkey"
|
||||
|
||||
[hotkey_intro]
|
||||
other = "Geben Sie eine globale Tastenkombination für diesen Eintrag ein, z. B. \"Strg+Alt+G\". Es ist mindestens ein Modifikator (Strg, Alt, Umschalt oder Win) erforderlich. Beim Drücken der Kombination wird das OTP in die Zwischenablage kopiert und in das Vordergrundfenster eingegeben."
|
||||
|
||||
# --- Sonstige UX ---
|
||||
|
||||
[btn_copy]
|
||||
other = "Kopieren"
|
||||
|
||||
[msg_copied]
|
||||
other = "Code in die Zwischenablage kopiert"
|
||||
|
||||
[msg_copy_failed]
|
||||
other = "Kopieren in die Zwischenablage fehlgeschlagen"
|
||||
|
||||
[msg_empty_list]
|
||||
other = "Noch keine Authentifikatoren. Klicken Sie auf \"Hinzufügen\", um einen zu registrieren."
|
||||
|
||||
# --- QR-Code Scan ---
|
||||
|
||||
[vendor_scan_qr]
|
||||
other = "QR-Code scannen (otpauth://)"
|
||||
|
||||
[dialog_scan_qr_title]
|
||||
other = "otpauth QR-Code scannen"
|
||||
|
||||
[qr_intro]
|
||||
other = "Geben Sie den Pfad zu einer PNG/JPG-Datei mit dem QR-Code ein und klicken Sie auf \"Aus Datei\". Oder kopieren Sie das QR-Bild in die Zwischenablage (Win+Umschalt+S funktioniert) und klicken Sie auf \"Aus Zwischenablage\"."
|
||||
|
||||
[label_qr_path]
|
||||
other = "Pfad zur Bilddatei"
|
||||
|
||||
[btn_qr_from_file]
|
||||
other = "Aus Datei"
|
||||
|
||||
[btn_qr_from_clipboard]
|
||||
other = "Aus Zwischenablage"
|
||||
|
||||
[msg_empty_qr_path]
|
||||
other = "Bitte den Pfad zu einer Bilddatei eingeben oder \"Aus Zwischenablage\" verwenden."
|
||||
|
||||
[msg_qr_failed]
|
||||
other = "QR-Scan fehlgeschlagen: %s"
|
||||
|
||||
[msg_clipboard_no_image]
|
||||
other = "Zwischenablage enthält kein Bild"
|
||||
@@ -0,0 +1,371 @@
|
||||
# English locale file for winauth-go.
|
||||
# Use {{.Name}} placeholders for go-i18n templating, or %s/%d style for
|
||||
# direct fmt-based substitution via T(id, args...).
|
||||
|
||||
[app_title]
|
||||
other = "WinAuth"
|
||||
|
||||
[menu_file]
|
||||
other = "File"
|
||||
|
||||
[menu_help]
|
||||
other = "Help"
|
||||
|
||||
[menu_add_authenticator]
|
||||
other = "Add authenticator"
|
||||
|
||||
[menu_choose_vendor]
|
||||
other = "Choose authenticator type"
|
||||
|
||||
[btn_ok]
|
||||
other = "OK"
|
||||
|
||||
[btn_cancel]
|
||||
other = "Cancel"
|
||||
|
||||
[btn_add]
|
||||
other = "Add"
|
||||
|
||||
[btn_remove]
|
||||
other = "Remove"
|
||||
|
||||
[btn_close]
|
||||
other = "Close"
|
||||
|
||||
[btn_enroll]
|
||||
other = "Enroll"
|
||||
|
||||
[vendor_google]
|
||||
other = "Google"
|
||||
|
||||
[vendor_microsoft]
|
||||
other = "Microsoft"
|
||||
|
||||
[vendor_okta]
|
||||
other = "Okta Verify"
|
||||
|
||||
[vendor_hotp]
|
||||
other = "HOTP (counter-based)"
|
||||
|
||||
[vendor_battlenet]
|
||||
other = "Battle.Net"
|
||||
|
||||
[vendor_steam]
|
||||
other = "Steam"
|
||||
|
||||
[vendor_battlenet_restore]
|
||||
other = "Battle.Net (restore from paper code)"
|
||||
|
||||
[dialog_add_google_title]
|
||||
other = "Add Google Authenticator"
|
||||
|
||||
[dialog_add_microsoft_title]
|
||||
other = "Add Microsoft Authenticator"
|
||||
|
||||
[dialog_add_okta_title]
|
||||
other = "Add Okta Verify"
|
||||
|
||||
[dialog_add_hotp_title]
|
||||
other = "Add HOTP Authenticator"
|
||||
|
||||
[dialog_add_battlenet_title]
|
||||
other = "Add Battle.Net Authenticator"
|
||||
|
||||
[dialog_add_steam_title]
|
||||
other = "Add Steam Authenticator"
|
||||
|
||||
[label_secret_key]
|
||||
other = "Secret key"
|
||||
|
||||
[label_name]
|
||||
other = "Name"
|
||||
|
||||
[label_counter]
|
||||
other = "Counter"
|
||||
|
||||
[label_serial]
|
||||
other = "Serial number"
|
||||
|
||||
[label_device_id]
|
||||
other = "Device ID"
|
||||
|
||||
[label_steam_data]
|
||||
other = "Steam data (JSON, optional)"
|
||||
|
||||
[label_region]
|
||||
other = "Region"
|
||||
|
||||
[label_show_secret]
|
||||
other = "Show secret"
|
||||
|
||||
[region_auto]
|
||||
other = "Auto detect"
|
||||
|
||||
[msg_empty_secret]
|
||||
other = "Please enter a secret key."
|
||||
|
||||
[msg_invalid_secret]
|
||||
other = "The secret key is not valid Base32."
|
||||
|
||||
[msg_empty_serial]
|
||||
other = "Please enter the serial number."
|
||||
|
||||
[msg_invalid_counter]
|
||||
other = "Counter must be a non-negative integer."
|
||||
|
||||
[msg_enrolling]
|
||||
other = "Contacting server..."
|
||||
|
||||
[msg_enroll_failed]
|
||||
other = "Enrollment failed: %s"
|
||||
|
||||
[menu_settings]
|
||||
other = "Settings"
|
||||
|
||||
[menu_set_password]
|
||||
other = "Set password..."
|
||||
|
||||
[menu_about]
|
||||
other = "About"
|
||||
|
||||
[dialog_password_title]
|
||||
other = "Enter password"
|
||||
|
||||
[dialog_set_password_title]
|
||||
other = "Set password"
|
||||
|
||||
[label_password]
|
||||
other = "Password"
|
||||
|
||||
[label_password_confirm]
|
||||
other = "Confirm password"
|
||||
|
||||
[hint_password_empty_disables]
|
||||
other = "Leave both fields empty to disable encryption."
|
||||
|
||||
[msg_password_required]
|
||||
other = "The configuration is encrypted. Please enter the password."
|
||||
|
||||
[msg_password_wrong]
|
||||
other = "Wrong password."
|
||||
|
||||
[msg_password_mismatch]
|
||||
other = "The two passwords do not match."
|
||||
|
||||
[msg_save_failed]
|
||||
other = "Saving the configuration failed: %s"
|
||||
|
||||
[msg_load_failed]
|
||||
other = "Loading the configuration failed: %s"
|
||||
|
||||
# --- Steam enrollment wizard ---
|
||||
|
||||
[steam_step_credentials]
|
||||
other = "Enter your Steam account credentials. The password is sent encrypted with Steam's public RSA key and is never stored locally."
|
||||
|
||||
[steam_step_captcha]
|
||||
other = "Steam asked for a captcha. Open the image below and type the characters."
|
||||
|
||||
[steam_step_email]
|
||||
other = "Steam sent a verification code to %s. Enter it below."
|
||||
|
||||
[steam_step_activation]
|
||||
other = "Steam sent an SMS code to your phone. Enter it below to finish enrolling the authenticator."
|
||||
|
||||
[steam_step_done]
|
||||
other = "Enrollment complete. Write the revocation code down NOW — without it you cannot remove this authenticator from your Steam account."
|
||||
|
||||
[label_username]
|
||||
other = "Username"
|
||||
|
||||
[label_captcha_text]
|
||||
other = "Captcha"
|
||||
|
||||
[label_email_code]
|
||||
other = "Email code"
|
||||
|
||||
[label_activation_code]
|
||||
other = "Activation code (SMS)"
|
||||
|
||||
[label_revocation_code]
|
||||
other = "Revocation code"
|
||||
|
||||
[hint_captcha_loading]
|
||||
other = "Loading captcha image..."
|
||||
|
||||
[hint_captcha_failed]
|
||||
other = "Could not load captcha image: %s"
|
||||
|
||||
[btn_login]
|
||||
other = "Sign in"
|
||||
|
||||
[btn_continue]
|
||||
other = "Continue"
|
||||
|
||||
[btn_activate]
|
||||
other = "Activate"
|
||||
|
||||
[btn_finish]
|
||||
other = "Finish"
|
||||
|
||||
[btn_trades]
|
||||
other = "Trades"
|
||||
|
||||
[btn_refresh]
|
||||
other = "Refresh"
|
||||
|
||||
[btn_accept]
|
||||
other = "Accept"
|
||||
|
||||
[btn_reject]
|
||||
other = "Reject"
|
||||
|
||||
[msg_empty_username]
|
||||
other = "Please enter a username."
|
||||
|
||||
[msg_empty_password]
|
||||
other = "Please enter a password."
|
||||
|
||||
[msg_empty_captcha]
|
||||
other = "Please enter the captcha text."
|
||||
|
||||
[msg_empty_email_code]
|
||||
other = "Please enter the code from your email."
|
||||
|
||||
[msg_empty_activation_code]
|
||||
other = "Please enter the activation code from the SMS."
|
||||
|
||||
[msg_busy]
|
||||
other = "Working — please wait..."
|
||||
|
||||
# --- Steam trade confirmations window ---
|
||||
|
||||
[dialog_steam_trades_title]
|
||||
other = "Steam confirmations"
|
||||
|
||||
[steam_trades_empty]
|
||||
other = "No pending confirmations."
|
||||
|
||||
[steam_trades_loading]
|
||||
other = "Loading confirmations..."
|
||||
|
||||
[steam_trades_session_missing]
|
||||
other = "This Steam authenticator has no saved login session. Re-add it through the enrollment wizard before you can manage trade confirmations."
|
||||
|
||||
[steam_trades_error]
|
||||
other = "Failed to load confirmations: %s"
|
||||
|
||||
# --- Battle.Net paper-code restore ---
|
||||
|
||||
[dialog_restore_battlenet_title]
|
||||
other = "Restore Battle.Net Authenticator"
|
||||
|
||||
[battlenet_restore_intro]
|
||||
other = "Enter the serial number and the 10-character restore code you wrote down when first enrolling the authenticator. Anyone holding both can recover full account access — keep the code secret."
|
||||
|
||||
[label_restore_code]
|
||||
other = "Restore code"
|
||||
|
||||
[label_show_restore_code]
|
||||
other = "Show restore code"
|
||||
|
||||
[btn_restore]
|
||||
other = "Restore"
|
||||
|
||||
[msg_empty_restore_code]
|
||||
other = "Please enter the 10-character restore code."
|
||||
|
||||
[msg_restoring]
|
||||
other = "Restoring from Battle.Net..."
|
||||
|
||||
[msg_restore_failed]
|
||||
other = "Restore failed: %s"
|
||||
|
||||
# --- Legacy WinAuth XML import ---
|
||||
|
||||
[menu_import_legacy]
|
||||
other = "Import legacy WinAuth XML..."
|
||||
|
||||
[dialog_import_legacy_title]
|
||||
other = "Import legacy WinAuth config"
|
||||
|
||||
[import_legacy_intro]
|
||||
other = "Locate the winauth.xml from the original WinAuth (usually under %APPDATA%\\WinAuth). DPAPI-encrypted entries can only be decrypted on the same Windows account / machine that produced them. Imported entries are appended to your current list."
|
||||
|
||||
[label_import_path]
|
||||
other = "Path to winauth.xml"
|
||||
|
||||
[btn_import]
|
||||
other = "Import"
|
||||
|
||||
[msg_empty_import_path]
|
||||
other = "Please enter the path to winauth.xml."
|
||||
|
||||
[msg_legacy_password_required]
|
||||
other = "This file contains password-encrypted entries — enter the original WinAuth password."
|
||||
|
||||
[msg_legacy_password_wrong]
|
||||
other = "Wrong password for the legacy WinAuth file."
|
||||
|
||||
[msg_import_failed]
|
||||
other = "Import failed: %s"
|
||||
|
||||
# --- Hotkey configuration ---
|
||||
|
||||
[btn_hotkey]
|
||||
other = "Hotkey..."
|
||||
|
||||
[btn_clear_hotkey]
|
||||
other = "Clear hotkey"
|
||||
|
||||
[dialog_hotkey_title]
|
||||
other = "Edit hotkey"
|
||||
|
||||
[label_hotkey]
|
||||
other = "Hotkey"
|
||||
|
||||
[hotkey_intro]
|
||||
other = "Type a global keyboard shortcut for this entry, e.g. \"Ctrl+Alt+G\". Requires at least one modifier (Ctrl, Alt, Shift or Win). Pressing the shortcut anywhere on the desktop copies the OTP to the clipboard and types it into the foreground window."
|
||||
|
||||
# --- Misc UX ---
|
||||
|
||||
[btn_copy]
|
||||
other = "Copy"
|
||||
|
||||
[msg_copied]
|
||||
other = "Code copied to clipboard"
|
||||
|
||||
[msg_copy_failed]
|
||||
other = "Could not copy to clipboard"
|
||||
|
||||
[msg_empty_list]
|
||||
other = "No authenticators yet. Click \"Add\" to enroll one."
|
||||
|
||||
# --- QR scan dialog ---
|
||||
|
||||
[vendor_scan_qr]
|
||||
other = "Scan QR code (otpauth://)"
|
||||
|
||||
[dialog_scan_qr_title]
|
||||
other = "Scan otpauth QR code"
|
||||
|
||||
[qr_intro]
|
||||
other = "Either enter the path to a PNG/JPG containing the QR code, then click \"From file\". Or copy the QR image to the clipboard (Win+Shift+S works) and click \"From clipboard\"."
|
||||
|
||||
[label_qr_path]
|
||||
other = "Path to image file"
|
||||
|
||||
[btn_qr_from_file]
|
||||
other = "From file"
|
||||
|
||||
[btn_qr_from_clipboard]
|
||||
other = "From clipboard"
|
||||
|
||||
[msg_empty_qr_path]
|
||||
other = "Please enter a path to an image file, or use \"From clipboard\"."
|
||||
|
||||
[msg_qr_failed]
|
||||
other = "QR scan failed: %s"
|
||||
|
||||
[msg_clipboard_no_image]
|
||||
other = "Clipboard does not contain an image"
|
||||
@@ -0,0 +1,369 @@
|
||||
# Simplified Chinese locale file for winauth-go.
|
||||
|
||||
[app_title]
|
||||
other = "WinAuth"
|
||||
|
||||
[menu_file]
|
||||
other = "文件"
|
||||
|
||||
[menu_help]
|
||||
other = "帮助"
|
||||
|
||||
[menu_add_authenticator]
|
||||
other = "添加身份验证器"
|
||||
|
||||
[menu_choose_vendor]
|
||||
other = "选择身份验证器类型"
|
||||
|
||||
[btn_ok]
|
||||
other = "确定"
|
||||
|
||||
[btn_cancel]
|
||||
other = "取消"
|
||||
|
||||
[btn_add]
|
||||
other = "添加"
|
||||
|
||||
[btn_remove]
|
||||
other = "删除"
|
||||
|
||||
[btn_close]
|
||||
other = "关闭"
|
||||
|
||||
[btn_enroll]
|
||||
other = "注册"
|
||||
|
||||
[vendor_google]
|
||||
other = "Google"
|
||||
|
||||
[vendor_microsoft]
|
||||
other = "Microsoft"
|
||||
|
||||
[vendor_okta]
|
||||
other = "Okta Verify"
|
||||
|
||||
[vendor_hotp]
|
||||
other = "HOTP(基于计数器)"
|
||||
|
||||
[vendor_battlenet]
|
||||
other = "战网"
|
||||
|
||||
[vendor_steam]
|
||||
other = "Steam"
|
||||
|
||||
[vendor_battlenet_restore]
|
||||
other = "战网(纸质恢复码恢复)"
|
||||
|
||||
[dialog_add_google_title]
|
||||
other = "添加 Google 身份验证器"
|
||||
|
||||
[dialog_add_microsoft_title]
|
||||
other = "添加 Microsoft 身份验证器"
|
||||
|
||||
[dialog_add_okta_title]
|
||||
other = "添加 Okta Verify"
|
||||
|
||||
[dialog_add_hotp_title]
|
||||
other = "添加 HOTP 身份验证器"
|
||||
|
||||
[dialog_add_battlenet_title]
|
||||
other = "添加战网身份验证器"
|
||||
|
||||
[dialog_add_steam_title]
|
||||
other = "添加 Steam 身份验证器"
|
||||
|
||||
[label_secret_key]
|
||||
other = "密钥"
|
||||
|
||||
[label_name]
|
||||
other = "名称"
|
||||
|
||||
[label_counter]
|
||||
other = "计数器"
|
||||
|
||||
[label_serial]
|
||||
other = "序列号"
|
||||
|
||||
[label_device_id]
|
||||
other = "设备 ID"
|
||||
|
||||
[label_steam_data]
|
||||
other = "Steam 数据(JSON,可选)"
|
||||
|
||||
[label_region]
|
||||
other = "区域"
|
||||
|
||||
[label_show_secret]
|
||||
other = "显示密钥"
|
||||
|
||||
[region_auto]
|
||||
other = "自动检测"
|
||||
|
||||
[msg_empty_secret]
|
||||
other = "请输入密钥。"
|
||||
|
||||
[msg_invalid_secret]
|
||||
other = "密钥不是有效的 Base32 字符串。"
|
||||
|
||||
[msg_empty_serial]
|
||||
other = "请输入序列号。"
|
||||
|
||||
[msg_invalid_counter]
|
||||
other = "计数器必须是非负整数。"
|
||||
|
||||
[msg_enrolling]
|
||||
other = "正在连接服务器……"
|
||||
|
||||
[msg_enroll_failed]
|
||||
other = "注册失败:%s"
|
||||
|
||||
[menu_settings]
|
||||
other = "设置"
|
||||
|
||||
[menu_set_password]
|
||||
other = "设置密码…"
|
||||
|
||||
[menu_about]
|
||||
other = "关于"
|
||||
|
||||
[dialog_password_title]
|
||||
other = "输入密码"
|
||||
|
||||
[dialog_set_password_title]
|
||||
other = "设置密码"
|
||||
|
||||
[label_password]
|
||||
other = "密码"
|
||||
|
||||
[label_password_confirm]
|
||||
other = "确认密码"
|
||||
|
||||
[hint_password_empty_disables]
|
||||
other = "两个字段均留空可关闭加密。"
|
||||
|
||||
[msg_password_required]
|
||||
other = "配置已加密,请输入密码。"
|
||||
|
||||
[msg_password_wrong]
|
||||
other = "密码错误。"
|
||||
|
||||
[msg_password_mismatch]
|
||||
other = "两次输入的密码不一致。"
|
||||
|
||||
[msg_save_failed]
|
||||
other = "保存配置失败:%s"
|
||||
|
||||
[msg_load_failed]
|
||||
other = "加载配置失败:%s"
|
||||
|
||||
# --- Steam 注册向导 ---
|
||||
|
||||
[steam_step_credentials]
|
||||
other = "请输入 Steam 账号凭证。密码会使用 Steam 公钥 RSA 加密后发送,不会在本地保存。"
|
||||
|
||||
[steam_step_captcha]
|
||||
other = "Steam 需要图形验证码,请输入下面图片中的字符。"
|
||||
|
||||
[steam_step_email]
|
||||
other = "Steam 已将验证码发送到 %s,请在下方输入。"
|
||||
|
||||
[steam_step_activation]
|
||||
other = "Steam 已将短信验证码发送至您的手机,请在下方输入以完成注册。"
|
||||
|
||||
[steam_step_done]
|
||||
other = "注册完成。请立即记录吊销码 —— 若丢失将无法再从 Steam 账号上移除该验证器。"
|
||||
|
||||
[label_username]
|
||||
other = "用户名"
|
||||
|
||||
[label_captcha_text]
|
||||
other = "图形验证码"
|
||||
|
||||
[label_email_code]
|
||||
other = "邮件验证码"
|
||||
|
||||
[label_activation_code]
|
||||
other = "激活码(短信)"
|
||||
|
||||
[label_revocation_code]
|
||||
other = "吊销码"
|
||||
|
||||
[hint_captcha_loading]
|
||||
other = "正在加载验证码图片……"
|
||||
|
||||
[hint_captcha_failed]
|
||||
other = "无法加载验证码图片:%s"
|
||||
|
||||
[btn_login]
|
||||
other = "登录"
|
||||
|
||||
[btn_continue]
|
||||
other = "继续"
|
||||
|
||||
[btn_activate]
|
||||
other = "激活"
|
||||
|
||||
[btn_finish]
|
||||
other = "完成"
|
||||
|
||||
[btn_trades]
|
||||
other = "交易确认"
|
||||
|
||||
[btn_refresh]
|
||||
other = "刷新"
|
||||
|
||||
[btn_accept]
|
||||
other = "接受"
|
||||
|
||||
[btn_reject]
|
||||
other = "拒绝"
|
||||
|
||||
[msg_empty_username]
|
||||
other = "请输入用户名。"
|
||||
|
||||
[msg_empty_password]
|
||||
other = "请输入密码。"
|
||||
|
||||
[msg_empty_captcha]
|
||||
other = "请输入图形验证码。"
|
||||
|
||||
[msg_empty_email_code]
|
||||
other = "请输入邮件中的验证码。"
|
||||
|
||||
[msg_empty_activation_code]
|
||||
other = "请输入短信中的激活码。"
|
||||
|
||||
[msg_busy]
|
||||
other = "正在处理,请稍候……"
|
||||
|
||||
# --- Steam 交易确认窗 ---
|
||||
|
||||
[dialog_steam_trades_title]
|
||||
other = "Steam 交易确认"
|
||||
|
||||
[steam_trades_empty]
|
||||
other = "暂无待确认交易。"
|
||||
|
||||
[steam_trades_loading]
|
||||
other = "正在加载交易……"
|
||||
|
||||
[steam_trades_session_missing]
|
||||
other = "该 Steam 验证器没有可用的登录会话。请通过注册向导重新添加,才能管理交易确认。"
|
||||
|
||||
[steam_trades_error]
|
||||
other = "加载交易失败:%s"
|
||||
|
||||
# --- 战网纸质恢复码 ---
|
||||
|
||||
[dialog_restore_battlenet_title]
|
||||
other = "恢复战网身份验证器"
|
||||
|
||||
[battlenet_restore_intro]
|
||||
other = "请输入您在初次注册验证器时记录的序列号与 10 字符恢复码。任何同时持有二者的人都能恢复完整账号控制权 —— 请妥善保管恢复码。"
|
||||
|
||||
[label_restore_code]
|
||||
other = "恢复码"
|
||||
|
||||
[label_show_restore_code]
|
||||
other = "显示恢复码"
|
||||
|
||||
[btn_restore]
|
||||
other = "恢复"
|
||||
|
||||
[msg_empty_restore_code]
|
||||
other = "请输入 10 字符恢复码。"
|
||||
|
||||
[msg_restoring]
|
||||
other = "正在从战网服务器恢复……"
|
||||
|
||||
[msg_restore_failed]
|
||||
other = "恢复失败:%s"
|
||||
|
||||
# --- 老 WinAuth XML 导入 ---
|
||||
|
||||
[menu_import_legacy]
|
||||
other = "导入旧版 WinAuth XML..."
|
||||
|
||||
[dialog_import_legacy_title]
|
||||
other = "导入旧版 WinAuth 配置"
|
||||
|
||||
[import_legacy_intro]
|
||||
other = "请定位原 WinAuth 的 winauth.xml(通常位于 %APPDATA%\\WinAuth)。DPAPI 加密条目只能在加密时使用的 Windows 用户/电脑上解密。导入的条目会追加到当前列表后面。"
|
||||
|
||||
[label_import_path]
|
||||
other = "winauth.xml 路径"
|
||||
|
||||
[btn_import]
|
||||
other = "导入"
|
||||
|
||||
[msg_empty_import_path]
|
||||
other = "请输入 winauth.xml 的路径。"
|
||||
|
||||
[msg_legacy_password_required]
|
||||
other = "该文件包含密码加密的条目 —— 请输入原 WinAuth 的密码。"
|
||||
|
||||
[msg_legacy_password_wrong]
|
||||
other = "旧版 WinAuth 文件密码错误。"
|
||||
|
||||
[msg_import_failed]
|
||||
other = "导入失败:%s"
|
||||
|
||||
# --- 热键配置 ---
|
||||
|
||||
[btn_hotkey]
|
||||
other = "热键..."
|
||||
|
||||
[btn_clear_hotkey]
|
||||
other = "清除热键"
|
||||
|
||||
[dialog_hotkey_title]
|
||||
other = "编辑热键"
|
||||
|
||||
[label_hotkey]
|
||||
other = "热键"
|
||||
|
||||
[hotkey_intro]
|
||||
other = "为该条目设置一个全局快捷键,例如 \"Ctrl+Alt+G\"。至少需要一个修饰键(Ctrl、Alt、Shift 或 Win)。在桌面任意位置按下该快捷键后,OTP 会被复制到剪贴板并直接输入到当前前台窗口。"
|
||||
|
||||
# --- 其他 UX ---
|
||||
|
||||
[btn_copy]
|
||||
other = "复制"
|
||||
|
||||
[msg_copied]
|
||||
other = "验证码已复制到剪贴板"
|
||||
|
||||
[msg_copy_failed]
|
||||
other = "复制到剪贴板失败"
|
||||
|
||||
[msg_empty_list]
|
||||
other = "还没有验证器,点击\"添加\"开始。"
|
||||
|
||||
# --- 二维码扫描 ---
|
||||
|
||||
[vendor_scan_qr]
|
||||
other = "扫描二维码 (otpauth://)"
|
||||
|
||||
[dialog_scan_qr_title]
|
||||
other = "扫描 otpauth 二维码"
|
||||
|
||||
[qr_intro]
|
||||
other = "输入包含二维码的 PNG/JPG 文件路径后点击\"从文件\"。或者将二维码图片复制到剪贴板(Win+Shift+S 截图即可)后点击\"从剪贴板\"。"
|
||||
|
||||
[label_qr_path]
|
||||
other = "图片文件路径"
|
||||
|
||||
[btn_qr_from_file]
|
||||
other = "从文件"
|
||||
|
||||
[btn_qr_from_clipboard]
|
||||
other = "从剪贴板"
|
||||
|
||||
[msg_empty_qr_path]
|
||||
other = "请输入图片文件路径,或使用\"从剪贴板\"。"
|
||||
|
||||
[msg_qr_failed]
|
||||
other = "二维码扫描失败:%s"
|
||||
|
||||
[msg_clipboard_no_image]
|
||||
other = "剪贴板中没有图片"
|
||||
Reference in New Issue
Block a user