{ "common": { "loading": "Loading...", "empty": "Empty", "load_more": "Load More", "add": "Add", "copy": "Copy", "action": "Action", "save": "Save", "saved": "Saved successfully", "cancel": "Cancel", "confirm": "Confirm", "close": "Close", "delete": "Delete", "edit": "Edit", "refresh": "Refresh", "refreshing": "Refreshing...", "export": "Export", "import": "Import", "success": "Success", "error": "Error", "unknown": "Unknown", "warning": "Warning", "info": "Info", "details": "Details", "example": "Example", "clear": "Clear", "clearing": "Clearing...", "prev_page": "Previous", "next_page": "Next", "pagination_info": "Showing {{start}} to {{end}} of {{total}} entries", "per_page": "Per page", "items": "items", "accounts": "accounts", "enabled": "Enabled", "disabled": "Disabled", "tauri_api_not_loaded": "Tauri API not loaded, please restart the app", "environment_error": "Environment error: {{error}}", "submit": "Submit", "update": "Update", "load_failed": "Load failed", "create_success": "Created successfully", "update_success": "Updated successfully", "delete_success": "Deleted successfully", "copied": "Copied to clipboard", "retry": "Retry", "back": "Back", "reason": "Reason", "show_raw": "Show Raw", "show_parsed": "Show Parsed" }, "nav": { "dashboard": "Dashboard", "accounts": "Accounts", "proxy": "API Proxy", "call_records": "Traffic Logs", "token_stats": "Token Stats", "security": "IP Management", "security_logs": "IP Logs", "settings": "Settings", "theme_to_dark": "Switch to Dark Mode", "theme_to_light": "Switch to Light Mode", "switch_to_english": "Switch to English", "switch_to_chinese": "Switch to Chinese", "switch_to_traditional_chinese": "Switch to Traditional Chinese", "switch_to_english_short": "EN", "switch_to_chinese_short": "ZH", "switch_to_traditional_chinese_short": "TW", "switch_to_japanese": "Switch to Japanese", "switch_to_japanese_short": "JA", "switch_to_turkish": "Switch to Turkish", "switch_to_turkish_short": "TR", "switch_to_vietnamese": "Switch to Vietnamese", "switch_to_vietnamese_short": "VI", "switch_to_russian": "Switch to Russian", "switch_to_russian_short": "RU", "switch_to_portuguese": "Switch to Portuguese", "switch_to_portuguese_short": "PT", "switch_to_korean": "Switch to Korean", "switch_to_korean_short": "KO", "switch_to_spanish": "Switch to Spanish", "switch_to_spanish_short": "ES", "switch_to_malay": "Switch to Malay", "switch_to_malay_short": "MY", "user_token": "User Tokens", "logout": "Logout" }, "dashboard": { "hello": "Hello, User ๐Ÿ‘‹", "refresh_quota": "Refresh Quota", "refreshing": "Refreshing...", "total_accounts": "Total Accounts", "avg_gemini": "Avg. Gemini Quota", "avg_gemini_image": "Avg. Gemini Image Quota", "avg_claude": "Avg. Claude Quota", "low_quota_accounts": "Low Quota Accounts", "quota_sufficient": "Quota Sufficient", "quota_low": "Low Quota", "quota_desc": "Quota < 20%", "current_account": "Current Account", "switch_account": "Switch Account", "no_active_account": "No Active Account", "best_accounts": "Best Accounts", "best_account_recommendation": "Best Account", "switch_best": "Switch to Best", "switch_successfully": "Switch to Best", "view_all_accounts": "View All Accounts", "export_data": "Export Data", "for_gemini": "For Gemini", "for_claude": "For Claude", "toast": { "switch_success": "Switch successful!", "switch_error": "Switch account failed", "refresh_success": "Quota refresh successful", "refresh_error": "Refresh failed", "export_no_accounts": "No accounts to export", "export_success": "Export successful! File saved to: {{path}}", "export_error": "Export failed" } }, "accounts": { "account": "Account", "search_placeholder": "Search email...", "all": "All", "available": "Available", "low_quota": "Low Quota", "ultra": "ULTRA", "pro": "PRO", "free": "FREE", "edit_label": "Edit Label", "custom_label_placeholder": "Enter custom label", "label_updated": "Label updated", "add_account": "Add Account", "refresh_all": "Refresh All", "refresh_selected": "Refresh ({{count}})", "export_selected": "Export ({{count}})", "import_json": "Import", "import_success": "Successfully imported {{count}} accounts", "import_partial": "Import completed: {{success}} succeeded, {{fail}} failed", "import_fail": "Import failed: {{error}}", "import_invalid_format": "Invalid JSON format, please ensure the file contains email and refresh_token fields", "delete_selected": "Delete ({{count}})", "current": "Current", "current_badge": "Current", "disabled": "Disabled", "disabled_tooltip": "Account is disabled (e.g. refresh_token revoked/expired). Reauthorize or update token to re-enable.", "proxy_disabled": "Proxy Disabled", "proxy_disabled_tooltip": "This account has proxy disabled manually, it will not handle API requests but remains usable in the app.", "enable_proxy": "Enable Proxy", "disable_proxy": "Disable Proxy", "enable_proxy_selected": "Enable ({{count}})", "disable_proxy_selected": "Disable ({{count}})", "proxy_disabled_reason_manual": "Disabled manually by user", "proxy_disabled_reason_batch": "Disabled in batch", "forbidden": "403", "forbidden_badge": "403", "forbidden_tooltip": "API returned 403 Forbidden, account has no permission for Gemini Code Assist", "forbidden_msg": "Forbidden, skip auto-refresh", "status": { "forbidden": "403 Forbidden", "disabled": "Account Disabled", "proxy_disabled": "Proxy Disabled", "validation_required": "Verification Required", "risk_controlled": "Risk / Rate Limited", "oauth_reauth_required": "OAuth Re-auth Required", "violation_blocked": "Blocked due to Violation" }, "error_details": "Error Details", "error_status": "Error Status", "error_time": "Detection Time", "view_error": "View Reason", "click_to_verify": "Click to Verify", "copy_validation_url": "Copy Verification Link", "validation_url_copied": "Verification link copied to clipboard", "fix_guide": { "title": "Terminal Quick Fix (Resolves internal 403s)", "step1_title": "๐Ÿš€ Quickest Solution", "step1_desc": "Open your Terminal and run the following command to tell Google \"it's me\", which resolves most 403 blocks:", "step1_li1": "Press Enter, input <1>Y when prompted to continue.", "step1_li2": "Your browser will open automatically, select your account and click \"Allow\".", "step1_li3": "Once you see <1>You are now authenticated, you're all set!", "step2_title": "๐Ÿงน If that fails (Clear Cache)", "step2_li1_prefix": "Run this to clear your old credentials:", "step2_li2_prefix": "Then log in again:", "tips_title": "๐Ÿ’ก Common Tips", "tip1": "If you still get 403, try running <1>unset GOOGLE_APPLICATION_CREDENTIALS in terminal first.", "tip2": "For production environments, using a <1>Service Account JSON key is highly recommended for stability and headless operation.", "tip3": "If it still fails, check the Generative Language API in <1>Google Cloud Console to see if permissions are frozen. If so, your account is under risk control. Please let the account cool down for 72 hours before trying again.", "tip4": "You can also try <1>npm install -g @google/gemini-cli. If it doesn't throw errors, simply deleting and re-authorizing the account in the app will likely fix it." }, "no_data": "No Data", "last_used": "Last Used", "reset_time": "Reset Time", "switch_to": "Switch to this account", "actions": "Actions", "device_fingerprint": "Device Fingerprint", "show_all_quotas": "Show All Quotas", "device_fingerprint_dialog": { "title": "Device Fingerprint", "operations": "Device Fingerprint Operations", "generate_and_bind": "Generate and Bind", "restore_original": "Restore Original", "open_storage_directory": "Open Storage Directory", "current_storage": "Current Storage", "effective": "Effective", "current_storage_desc": "Read from storage.json (updated after applying binding when switching accounts)", "account_binding": "Account Binding", "pending_application": "Pending Application", "account_binding_desc": "Saved as binding after generation/restoration, written to storage.json when switching accounts", "historical_fingerprints": "Historical Fingerprints (optional restore/delete)", "no_history": "No History", "current": "Current", "restore": "Restore", "delete_version": "Delete this version", "confirm_generate_title": "Confirm generate and bind?", "confirm_generate_desc": "Will generate a new set of device fingerprints and set as current fingerprint. Confirm continue?", "confirm_restore_title": "Confirm restore original fingerprint?", "confirm_restore_desc": "Will restore to original fingerprint and overwrite current fingerprint. Confirm continue?", "cancel": "Cancel", "confirm": "Confirm", "processing": "Processing...", "loading": "Loading...", "failed_to_load_device_info": "Failed to load device info", "generation_failed": "Generation failed", "binding_failed": "Binding failed", "restoration_failed": "Restoration failed", "deletion_failed": "Deletion failed", "directory_open_failed": "Unable to open directory", "generated_and_bound": "Generated and bound", "restored": "Restored", "deleted": "Deleted", "directory_opened": "Storage directory opened", "original_fingerprint_not_found": "Original fingerprint not found" }, "warmup_all": "One-click Warmup", "warmup_selected": "Warmup ({{count}})", "warmup_this": "Warmup this account", "warmup_now": "Warmup Now", "warmup_batch_triggered": "Warmup tasks triggered for {{count}} accounts", "quota_protected": "Protected", "details": { "title": "Quota Details", "model_quota": "Model Quota", "protected_models": "Protected Models" }, "toast": { "proxy_enabled": "Enabled proxy for {{count}} accounts", "proxy_disabled": "Disabled proxy for {{count}} accounts" }, "add": { "title": "Add Account", "tabs": { "oauth": "OAuth", "token": "Refresh Token", "import": "Import DB" }, "oauth": { "recommend": "Recommended", "desc": "Opens default browser for Google login to auto-fetch and save Token.", "btn_start": "Start OAuth", "btn_waiting": "Waiting for auth...", "btn_finish": "I already authorized", "copy_link": "Copy Auth Link", "copied": "Copied", "link_label": "Authorization URL", "link_click_to_copy": "Click to copy", "manual_hint": "Browser didn't redirect? Paste the full callback URL or raw Code here:", "manual_placeholder": "Paste callback URL or code...", "error_no_flow": "Please click 'Start OAuth' first", "web_hint": "Google login page will open in a new window", "error_no_url": "Could not obtain OAuth URL", "popup_blocked": "Popup blocked", "manual_submitting": "Submitting authorization code...", "manual_submitted": "Authorization code submitted. Backend is processing..." }, "token": { "label": "Refresh Token", "placeholder": "Paste your Refresh Token here (Batch supported)\n\nSupported formats:\n1. Single Token (1//...)\n2. JSON Array (with refresh_token field)\n3. Any text containing tokens (Auto-extraction)", "hint": "Tip: You can paste multiple tokens or a JSON array to import in batch.", "error_token": "Please enter Refresh Token", "batch_progress": "Importing {{current}}/{{total}} accounts...", "batch_success": "Successfully imported {{count}} accounts", "batch_partial": "Import finished: {{success}} success, {{fail}} failed", "batch_fail": "Import failed" }, "import": { "scheme_a": "Plan A: From IDE DB", "scheme_a_desc": "Auto-read current logged-in account from local Antigravity DB.", "btn_db": "Import Current Account", "or": "OR", "scheme_b": "Plan B: From V1 Backup", "scheme_b_desc": "Scan ~/.antigravity-agent for V1 account data.", "btn_v1": "Batch Import V1", "btn_custom_db": "Import Custom DB" }, "btn_cancel": "Cancel", "btn_confirm": "Confirm", "oauth_error": "OAuth failed: {{error}}", "status": { "error_token": "Please enter Refresh Token" } }, "table": { "email": "Email", "quota": "Model Quota", "last_used": "Last Used", "actions": "Actions" }, "drag_to_reorder": "Drag to reorder", "empty": { "title": "No Accounts", "desc": "Click the \"Add Account\" button above to add your first account" }, "views": { "list": "List View", "grid": "Grid View" }, "dialog": { "add_title": "Add Account", "batch_delete_title": "Batch Delete Confirmation", "delete_title": "Delete Confirmation", "batch_delete_msg": "Are you sure you want to delete the selected {{count}} accounts? This action cannot be undone.", "delete_msg": "Are you sure you want to delete this account? This action cannot be undone.", "refresh_title": "Refresh Quota", "batch_refresh_title": "Batch Refresh", "refresh_msg": "Are you sure you want to refresh the quota for the current account?", "batch_refresh_msg": "Are you sure you want to refresh quotas for the selected {{count}} accounts? This may take some time.", "disable_proxy_title": "Disable Proxy", "disable_proxy_msg": "Are you sure you want to disable proxy for this account? The account will remain usable in the app.", "enable_proxy_title": "Enable Proxy", "enable_proxy_msg": "Are you sure you want to re-enable proxy for this account?", "warmup_all_title": "Full Manual Warmup", "warmup_all_msg": "Are you sure you want to trigger warmup tasks for all eligible accounts immediately? This will send minimal traffic to Google services to reset quota cycles.", "batch_warmup_title": "Batch Manual Warmup", "batch_warmup_msg": "Are you sure you want to trigger warmup for the selected {{count}} accounts immediately?" } }, "settings": { "save": "Save Settings", "tabs": { "general": "General", "account": "Account", "proxy": "Proxy Settings", "advanced": "Advanced", "debug": "Debug", "about": "About" }, "general": { "title": "General Settings", "language": "Language", "theme": "Theme", "theme_light": "Light", "theme_dark": "Dark", "theme_system": "System", "auto_launch": "Launch at Startup", "auto_launch_enabled": "Enabled", "auto_launch_disabled": "Disabled", "auto_launch_desc": "Automatically launch Antigravity Tools when system starts", "auto_check_update": "Auto Check for Updates", "auto_check_update_desc": "Automatically check for new versions on startup", "auto_check_update_enabled": "Auto check enabled", "auto_check_update_disabled": "Auto check disabled", "update_check_interval": "Check Interval (hours)", "update_check_interval_desc": "Set auto-check interval (1-168 hours)", "update_check_interval_saved": "Check interval settings saved" }, "account": { "title": "Account Settings", "auto_refresh": "Background Auto Refresh", "auto_refresh_desc": "Automatically refresh all account quotas in the background. This is required for quota protection and smart warmup.", "always_on": "Always On", "refresh_interval": "Refresh Interval (minutes)", "auto_sync": "Auto Sync Current Account", "auto_sync_desc": "Automatically sync current active account information periodically", "sync_interval": "Sync Interval (minutes)" }, "warmup": { "title": "Smart Warmup", "desc": "Automatically monitors all models and triggers warmup immediately when quota reaches 100%, keeping models warm" }, "quota_protection": { "title": "Quota Protection", "enable": "Enable Quota Protection", "enable_desc": "Automatically disable proxy when account quota falls below threshold, and auto-restore when quota resets", "threshold_label": "Reserved Quota Percentage", "monitored_models_label": "Monitored Models (Trigger Conditions)", "monitored_models_desc": "Select at least one. Protection triggers if ANY selected model falls below threshold", "range": "Range", "example": "Example: At {{percentage}}%, an account with {{total}} quota will be disabled when remaining โ‰ค {{threshold}}", "auto_restore_info": "Account will be automatically re-enabled when quota resets" }, "pinned_quota_models": { "title": "Pinned Quota Models", "desc": "Choose which model quotas to display in the account list. Unselected models are only shown in the detail popup." }, "proxy": { "title": "Proxy Settings" }, "proxy_pool": { "title": "Proxy Pool", "strategy_priority": "Priority", "strategy_round_robin": "Round Robin", "strategy_random": "Random", "strategy_least_connections": "Least Connections", "test_all": "Test All", "batch_import": "Import", "binding_manager": "Bindings", "add_proxy": "Add Proxy", "edit_proxy": "Edit Proxy", "name": "Name", "url": "Proxy URL", "username": "Username", "password": "Password", "max_accounts": "Max Accounts", "max_accounts_hint": "0 = Unlimited", "priority": "Priority", "priority_hint": "Lower is better", "health_check_url": "Health Check URL", "tags": "Tags", "add_tag_placeholder": "Add tag...", "seconds": "Sec", "test_completed": "Health check completed", "test_failed": "Health check failed", "confirm_delete": "Are you sure you want to delete this proxy?", "empty": "No proxies available", "column_priority": "Priority", "column_status": "Status", "column_details": "Proxy Details", "column_bindings": "Bindings", "import_title": "Batch Import Proxies", "import_label": "Paste Proxy List (One per line)", "import_hint": "Supported formats: protocol://user:pass@host:port, host:port:user:pass", "import_preview": "Preview", "import_confirm": "Import {{count}} Proxies", "no_valid_proxies": "No valid proxies found", "binding": { "title": "Account Proxy Bindings", "load_failed": "Failed to load bindings", "unbind_success": "Unbound successfully", "bind_success": "Bound successfully", "update_failed": "Failed to update binding", "assigned_proxy": "Assigned Proxy", "default_strategy": "Default (Follow Strategy)" }, "status": { "inactive": "Inactive", "checking": "Checking", "healthy": "Healthy", "timeout": "Timeout" } }, "advanced": { "title": "Advanced Settings", "export_path": "Default Export Path", "export_path_placeholder": "Not set (Ask every time)", "default_export_path_desc": "Files will be saved directly to this folder without asking", "select_btn": "Select", "open_btn": "Open", "data_dir": "Data Directory", "data_dir_desc": "Account data and config file location", "antigravity_path": "Antigravity Path", "antigravity_path_placeholder": "Not set (Will use auto-detection)", "antigravity_path_desc": "If you installed Antigravity in a non-standard location, you can manually specify the executable path here (Points to .app on MacOS).", "antigravity_path_select": "Select Antigravity Executable", "antigravity_path_detected": "Detected path updated", "detect_btn": "Detect", "antigravity_args": "Antigravity Startup Arguments", "antigravity_args_placeholder": "--user-data-dir=/path/to/data --some-other-flag", "antigravity_args_desc": "Specify startup arguments for Antigravity, e.g. --user-data-dir to specify user data directory", "detect_args_btn": "Detect", "antigravity_args_detected": "Startup arguments updated", "antigravity_args_detect_error": "Failed to detect startup arguments", "accounts_page_size": "Accounts Page Size", "page_size_auto": "Auto Calculate (Recommended)", "page_size_desc": "Set the number of accounts displayed per page. Select 'Auto Calculate' to dynamically adjust based on window size.", "logs_title": "Logs Maintenance", "logs_desc": "Clear log cache files. Does not affect account data.", "clear_logs": "Clear Logs Cache", "clear_logs_title": "Clear Logs Confirmation", "clear_logs_msg": "Are you sure you want to clear all log cache files?", "logs_cleared": "Logs cache cleared", "antigravity_cache_title": "Antigravity Cache Cleanup", "antigravity_cache_desc": "Clear Antigravity cache to resolve login failures, version validation errors, and OAuth authorization issues.", "antigravity_cache_warning": "Please ensure Antigravity is completely closed before clearing cache.", "clear_antigravity_cache": "Clear Antigravity Cache", "clear_cache_confirm_title": "Confirm Clear Antigravity Cache", "clear_cache_confirm_msg": "The following cache directories will be cleared:", "cache_cleared_success": "Cache cleared successfully, freed {{size}} MB", "cache_not_found": "No Antigravity cache directories found", "debug_logs_title": "Debug Logging", "debug_logs_enable_desc": "When enabled, records the complete request and response chain. Recommended to enable only when troubleshooting issues.", "debug_logs_desc": "Records the full chain: original input, transformed v1internal request, and upstream response. For troubleshooting only, may contain sensitive data.", "debug_log_dir": "Debug Log Output Directory", "debug_log_dir_hint": "Leave empty to use the default directory: {{path}}/debug_logs", "debug_log_dir_select": "Select Debug Log Output Directory", "http_api_title": "HTTP API Service", "http_api_desc": "Provides local HTTP interface for external programs (e.g. VS Code plugins).", "http_api_enabled": "Enable HTTP API", "http_api_enabled_desc": "When enabled, external programs can manage accounts via HTTP interface", "http_api_port": "Listen Port", "http_api_port_desc": "Restart required after changing port. If port conflict occurs, please use another available port.", "http_api_port_placeholder": "Default port 19527", "http_api_port_invalid": "Invalid port number (range: 1024-65535)", "http_api_settings_saved": "HTTP API settings saved, restart required to apply", "http_api_restart_required": "โš ๏ธ Restart required to apply" }, "debug": { "title": "Debug Console", "desc": "View real-time application logs for debugging", "enabled": "Enabled", "disabled": "Disabled", "disabled_hint": "Debug Console is Off", "disabled_desc": "Enable to start recording application logs", "console_title": "Debug Console", "console_desc": "View real-time application logs to troubleshoot issues.", "enable_desc": "Enable to capture and display backend logs.", "open_btn": "Open Console", "debug_logging": "Debug Logging", "debug_logging_desc": "When enabled, records the complete request and response chain. Recommended to enable only when troubleshooting issues." }, "menu": { "title": "Menu Display Settings", "desc": "Select the function items to display in the menu bar. Hiding infrequently used menus can save space.", "selected_items_note": "Selected items will be displayed in the top menu bar.", "required": "Required" }, "about": { "title": "About", "version": "App Version", "tech_stack": "Tech Stack", "author": "Author", "wechat": "WeChat", "telegram": "Telegram Channel", "github": "GitHub", "view_code": "View Code", "copyright": "Copyright ยฉ 2025-2026 Antigravity. All rights reserved.", "check_update": "Check for Updates", "checking_update": "Checking...", "latest_version": "You're up to date", "new_version_available": "New version {{version}} available", "download_update": "Download", "brew_upgrade": "Update via Homebrew", "brew_upgrading": "Upgrading...", "brew_confirm_title": "Update via Homebrew", "brew_confirm_desc": "The following command will be executed to update the app. A restart is required after the upgrade.", "brew_quarantine_hint": "If you see an \"App is damaged\" error after update, run in terminal:", "brew_confirm_btn": "Start Update", "brew_success_title": "Upgrade Complete", "brew_upgrade_success": "Homebrew upgrade succeeded. Please restart the app to load the new version.", "brew_restart_btn": "Restart Now", "brew_restart_failed": "Auto restart failed. Please close and reopen the app manually", "brew_upgrade_failed": "Homebrew upgrade failed. Try running manually: brew upgrade --cask antigravity-tools", "brew_error_brew_not_found": "Homebrew not found. Please ensure brew is installed", "brew_error_brew_exec_failed": "Failed to execute brew command. Try running manually in terminal", "brew_error_brew_timeout": "Homebrew upgrade timed out (3min). Try running manually: brew upgrade --cask antigravity-tools", "brew_error_brew_already_latest": "Already up to date, no upgrade needed", "brew_error_brew_not_supported": "Homebrew update is not supported on this platform", "update_check_failed": "Update check failed", "support_btn": "Support Author", "support_title": "Donation & Support", "support_desc": "If you find this project helpful, feel free to buy me a coffee! Your support is the biggest motivation for me to maintain this project.", "support_alipay": "Alipay", "support_wechat": "WeChat Pay", "support_buymeacoffee": "Buy Me a Coffee" }, "advanced_thinking": { "title": "Advanced Thinking & Global Config", "description": "Manage thinking capabilities, image modes, and global instructions." }, "thinking_budget": { "title": "Thinking Budget", "description": "Controls the token budget for AI deep thinking. Some models (e.g., Flash, -thinking suffix models) are limited to 24576 by upstream API.", "mode_label": "Processing Mode", "mode": { "auto": "Auto Limit", "passthrough": "Passthrough", "custom": "Custom", "adaptive": "Adaptive" }, "effort_label": "Thinking Effort", "effort": { "low": "Low", "medium": "Medium", "high": "High" }, "auto_hint": "Auto mode: Automatically caps budget to 24576 for Flash, -thinking suffix models, and Web Search requests.", "adaptive_hint": "Adaptive mode: The model automatically adjusts thinking budget based on task complexity. Recommended for Claude 4.6+.", "passthrough_warning": "Passthrough: Uses caller's value directly. High values may cause failures.", "custom_value_hint": "Rec: 24576 (Flash) or 51200 (Extended)", "tokens": "tokens" }, "image_thinking_mode": { "title": "Image Thinking Mode", "hint": "Affects quality and generation flow", "options": { "enabled": "Enabled", "disabled": "Disabled", "enabled_desc": "On: Preserves thinking chain, returns sketch + final image.", "disabled_desc": "Off: Disables thinking chain, generates single ultra-clear image (Quality First)." } }, "global_system_prompt": { "title": "Global System Prompt", "hint": "Automatically injected into all systemInstructions", "placeholder": "Enter global system prompt...\nExample: You are a senior full-stack developer. Please respond in English.", "char_count": "{{count}} characters", "long_prompt_warning": "Prompt is quite long (over 2000 chars) and may consume significant context space." }, "branding": { "title": "Antigravity Tools", "subtitle": "Professional Account Management" } }, "tray": { "current": "Current", "quota": "Quota", "switch_next": "Switch to Next Account", "refresh_current": "Refresh Current Quota", "show_window": "Show Main Window", "quit": "Quit Application", "no_account": "No Account", "unknown_quota": "Unknown (Click to Refresh)", "forbidden": "Account Forbidden" }, "proxy": { "title": "API Proxy Service", "error": { "load_failed": "Failed to load configuration" }, "status": { "running": "Service Running", "stopped": "Service Stopped", "accounts_available": "{{count}} Accounts Available", "processing": "Processing..." }, "action": { "start": "Start Service", "stop": "Stop Service" }, "config": { "title": "Service Configuration", "request": { "user_agent": "User-Agent Override", "user_agent_tooltip": "Override the User-Agent header sent to upstream APIs. Leave empty to use default.", "user_agent_hint": "Current Default: antigravity/ /", "user_agent_placeholder": "Enter custom User-Agent string..." }, "port": "Listen Port", "port_tooltip": "TCP port the local API Proxy listens on. Stop the service to change it, then restart to apply.", "port_hint": "Default 8045, restart required to apply changes", "auto_start": "Auto Start with App", "auto_start_tooltip": "Automatically starts the local API Proxy service when the app launches.", "allow_lan_access": "Allow LAN Access", "allow_lan_access_tooltip": "When enabled, the service binds to 0.0.0.0 so other devices on your LAN can access it. Keep authorization enabled and protect your API key; restart required to apply.", "allow_lan_access_hint_enabled": "๐ŸŒ Listening on 0.0.0.0, LAN devices can access", "allow_lan_access_hint_disabled": "๐Ÿ”’ Listening on 127.0.0.1 only, localhost access (Privacy First)", "allow_lan_access_warning": "โš ๏ธ LAN devices can access when enabled. Keep your API key secure", "allow_lan_access_restart_hint": "โ„น๏ธ Service restart required to apply changes", "api_key": "API Key", "api_key_tooltip": "Shared secret used by clients when proxy authorization is enabled. Regenerating the key immediately invalidates the old one.", "btn_regenerate": "Regenerate Key", "btn_edit": "Edit", "btn_save": "Save", "btn_copy": "Copy", "btn_copied": "Copied", "warning_key": "Note: Keep your API key secure. Do not share it.", "api_key_invalid": "Invalid API key format, must start with sk- and be at least 10 characters long", "api_key_updated": "API key updated", "admin_password": "Web UI Management Password", "admin_password_tooltip": "Password used to log in to the Web management console. If empty, the API Key is used by default.", "admin_password_default": "(Same as API Key)", "admin_password_placeholder": "Enter new password, leave empty to use API Key", "admin_password_hint": "Tip: In Docker/Web deployment scenarios, you can set a separate login password to improve the security of your API Key.", "admin_password_short": "Password too short (at least 4 characters)", "admin_password_updated": "Web UI login password updated", "auth": { "title": "Authorization", "title_tooltip": "Controls whether incoming requests must be authenticated, and which routes are protected.", "enabled": "Enabled", "enabled_tooltip": "Turns authorization on/off by switching the authorization mode. When enabled, clients must include the API key via Authorization: Bearer or x-api-key.", "mode": "Mode", "mode_tooltip": "Selects which routes require the API key: Off = no auth; All = protect everything; All except Health = /healthz stays open; Auto = Off for localhost-only, otherwise All except Health.", "hint": "When enabled, clients must send the API key via Authorization: Bearer ... (except health if selected).", "modes": { "off": "Off (Open)", "strict": "All (Strict)", "all_except_health": "All except Health", "auto": "Auto (Recommended)" } }, "zai": { "title": "z.ai (GLM) Provider", "title_tooltip": "Optional Anthropic-compatible upstream for Claude protocol. Only affects Anthropic endpoints; Google account routing remains unchanged.", "subtitle": "Optional Anthropic-compatible upstream for Claude protocol only.", "enabled": "Enabled", "enabled_tooltip": "Enables z.ai routing for Anthropic requests according to the selected dispatch mode.", "base_url": "Base URL", "base_url_tooltip": "Anthropic-compatible base URL. The proxy appends paths like /v1/messages. Leave the default unless you use a custom gateway.", "dispatch_mode": "Dispatch Mode", "dispatch_mode_tooltip": "Controls when to use z.ai for Anthropic requests: Off disables it; All Anthropic requests forwards everything; Pooled adds z.ai as one slot in round-robin with Google accounts; Fallback uses z.ai only when there are no Google accounts.", "api_key": "API Key", "api_key_tooltip": "API key used to authenticate requests to z.ai. Stored locally and required for z.ai and MCP features.", "api_key_placeholder": "Paste your z.ai API key here", "warning": "Note: This key is stored locally in the app data directory.", "models": { "title": "Model Mapping", "title_tooltip": "Fetch available z.ai model ids and configure how incoming Anthropic/Claude model names are translated to z.ai model ids.", "refresh": "Fetch models", "refreshing": "Fetching...", "hint": "Available models: {{count}}. Select a suggestion or type a custom model id.", "error": "Failed to fetch models: {{error}}", "select_placeholder": "Select model...", "opus": "Opus family โ†’ z.ai model", "opus_tooltip": "Default z.ai model id used when the incoming model contains \"opus\" (e.g. claude-opus-*).", "sonnet": "Sonnet family โ†’ z.ai model", "sonnet_tooltip": "Default z.ai model id used for other Claude models (e.g. claude-sonnet-* and most claude-* requests).", "haiku": "Haiku family โ†’ z.ai model", "haiku_tooltip": "Default z.ai model id used when the incoming model contains \"haiku\" (e.g. claude-haiku-*).", "advanced_title": "Advanced overrides", "advanced_tooltip": "Optional exact-match overrides. If an incoming model string matches a rule key, it will be replaced with the mapped z.ai model id.", "from_label": "Incoming model", "to_label": "z.ai model", "add_rule": "Add", "empty": "No override rules configured.", "from_placeholder": "From (e.g. claude-3-opus)", "to_placeholder": "To (e.g. glm-4)" }, "modes": { "off": "Off", "exclusive": "All Anthropic requests", "pooled": "Pooled (one slot)", "fallback": "Fallback only" }, "mcp": { "title": "MCP Servers (via local proxy)", "title_tooltip": "Exposes optional /mcp/* endpoints on this local proxy so MCP clients can connect. Available only when the service is running, z.ai is configured, and the corresponding toggles are enabled.", "enabled": "Enable MCP proxy", "enabled_tooltip": "Master switch for MCP endpoints. When off, all /mcp/* routes return 404.", "web_search": "Web Search", "web_search_tooltip": "Exposes /mcp/web_search_prime/mcp and forwards requests to the z.ai Web Search MCP upstream.", "web_reader": "Web Reader", "web_reader_tooltip": "Exposes /mcp/web_reader/mcp and forwards requests to the z.ai Web Reader MCP upstream.", "vision": "Vision", "vision_tooltip": "Exposes /mcp/zai-mcp-server/mcp (local MCP server) that provides vision tools backed by z.ai.", "local_endpoints": "Local endpoints (configure your MCP client to use these URLs):", "local_endpoints_tooltip": "Use these URLs in your MCP client. They share the same host/port as the API Proxy and follow the proxy authorization policy." } }, "request_timeout": "Request Timeout", "request_timeout_tooltip": "Maximum time (seconds) the proxy waits for an upstream response, including streaming. Increase for long generations; restart required to apply.", "request_timeout_hint": "Default 120s, range 30-7200s. Restart service to apply changes.", "enable_logging": "Enable Request Logging", "enable_logging_hint": "Record history for debugging (Minor perf cost)", "upstream_proxy": { "title": "Global Upstream Proxy (Global Proxy)", "desc": "When enabled, all external requests (API Proxy, Token Refresh, Quota Check, Update Check) will be routed through this proxy.", "desc_short": "Fallback proxy used when no suitable proxy is found in the pool.", "enable": "Enable Upstream Proxy", "url": "Proxy URL", "url_placeholder": "e.g. http://127.0.0.1:7890 or socks5://127.0.0.1:7890", "tip": "Supports HTTP, HTTPS and SOCKS5.", "socks5h_hint": "To bypass upstream risk control and use Remote DNS resolution, manually change the protocol to socks5h://", "validation_error": "Proxy URL is required when upstream proxy is enabled", "restart_hint": "Proxy settings saved. Restart the app to apply changes." }, "scheduling": { "title": "Account Rotation & Scheduling", "title_tooltip": "Controls how sessions are bound to accounts and how rate limits are handled.", "subtitle": "Optimizes Prompt Caching and rate limit handling for all protocols (OpenAI/Gemini/Claude).", "mode": "Scheduling Mode", "mode_tooltip": "Cache-First: Bind session to account, wait on rate limit (maximize cache utility); Balance: Bind session, switch account on rate limit; Performance: Standard Round-robin.", "modes": { "CacheFirst": "Cache First", "Balance": "Balance", "PerformanceFirst": "Performance" }, "modes_desc": { "CacheFirst": "Binds session to account, waits precisely if limited (Maximizes Prompt Cache hits).", "Balance": "Binds session, auto-switches to available account if limited (Balanced cache & availability).", "PerformanceFirst": "No session binding, pure round-robin rotation (Best for high concurrency)." }, "max_wait": "Max Wait (sec)", "max_wait_tooltip": "Only used in 'Cache First' mode: wait instead of switching if the rate limit reset time is below this value.", "clear_bindings": "Clear Session Bindings", "clear_bindings_tooltip": "Hard reset all session-account bindings, forcing accounts to be re-assigned on next request.", "clear_rate_limits": "Clear Rate Limit Records", "clear_rate_limits_tooltip": "Immediately clear local rate limit records for all accounts, forcing next requests to try upstream directly." }, "circuit_breaker": { "title": "Adaptive Circuit Breaker", "tooltip": "Automatically increases lockout duration for accounts that repeatedly fail with quota exhaustion. This prevents wasting API calls on dead accounts while allowing transient errors to recover quickly.", "backoff_levels": "Backoff Levels (Seconds)", "input_placeholder": "Enter backoff durations in seconds, separated by commas", "level": "Lv {{level}}", "invalid_format": "Invalid format. Use comma separated numbers (e.g. 60, 300)", "clear_records": "Clear All Rate Limit Records" }, "experimental": { "title": "Experimental Settings", "title_tooltip": "Exploratory features that may be adjusted or removed in future versions.", "enable_usage_scaling": "Enable Usage Scaling", "enable_usage_scaling_tooltip": "For Claude protocol. Enables aggressive scaling when total input exceeds 30k tokens to prevent frequent client-side compression. Note: Reported usage will not reflect actual billing after enabling.", "context_compression_threshold_l1": "L1 Compression Threshold (Tool Trimming)", "context_compression_threshold_l1_tooltip": "Trims old tool call records to save space. Recommended: 0.4 (40%)", "context_compression_threshold_l2": "L2 Compression Threshold (Thinking Compression)", "context_compression_threshold_l2_tooltip": "Compresses early thinking blocks while preserving signatures. Recommended: 0.55 (55%)", "context_compression_threshold_l3": "L3 Compression Threshold (Summary Pivot)", "context_compression_threshold_l3_tooltip": "Ultimate reset: generates an XML state summary and pivots to a fresh session. Most token-efficient. Recommended: 0.7 (70%)" }, "opencode_sync": { "card_title": "OpenCode", "status": { "detecting": "Detecting...", "installed": "Installed ({{version}})", "not_installed": "Not Installed", "synced": "Synced", "not_synced": "Not Synced", "current_base_url": "Current Base URL" }, "sync_accounts": "Sync accounts to antigravity-accounts.json", "btn_sync": "Sync Config", "btn_view": "View Config", "btn_restore": "Restore", "btn_restore_backup": "Restore Backup", "btn_clear": "Clear Config", "clear_confirm_title": "Confirm Clear Config", "clear_confirm_message": "Are you sure you want to clear OpenCode configuration? This will remove the config file.", "toast": { "config_missing": "Please generate API Key and start service first", "sync_success": "OpenCode config synced successfully", "sync_error": "OpenCode sync failed: {{error}}", "clear_success": "OpenCode config cleared successfully", "clear_error": "Failed to clear OpenCode config: {{error}}" }, "modal": { "view_title": "OpenCode Config Viewer", "copy_success": "Config copied" }, "sync_confirm_title": "Confirm Sync", "sync_confirm_message": "OpenCode config will be overwritten based on current proxy settings. Continue?", "restore_confirm": "Are you sure you want to restore OpenCode to default settings?", "restore_backup_confirm": "Are you sure you want to restore OpenCode config from backup?", "modal_title": "Select OpenCode Models", "select_models": "Select models to sync", "auth_plugin_warning": "Detected opencode-antigravity-auth plugin. Sync only creates provider antigravity-manager and will not overwrite the google provider/plugin.", "btn_confirm_sync": "Confirm Sync", "custom_base_url_label": "Custom Manager BaseURL", "custom_base_url_desc": "For Docker Compose networking", "custom_base_url_reset": "Reset" }, "droid_sync": { "modal_title": "Add models to Droid", "modal_desc": "Selected models will be added as customModels to settings.json", "selected": "selected", "btn_confirm_sync": "Add selected models", "toast": { "no_models_selected": "Please select at least one model", "sync_success_count": "Added {{count}} model(s) to Droid", "sync_error": "Sync failed: {{error}}" } } }, "cloudflared": { "title": "Public Access (Cloudflared)", "subtitle": "Expose your local service to the internet via Cloudflare Tunnel", "not_installed": "Cloudflared not installed", "install_hint": "Cloudflared is a free tunnel tool from Cloudflare. It exposes your local proxy to the internet without a public IP or port forwarding. Click the button below to install.", "install": "Install Now", "installing": "Installing...", "install_success": "Cloudflared installed successfully", "install_failed": "Installation failed: {{error}}", "installed": "Installed", "version": "Version", "mode_label": "Tunnel Mode", "mode_quick": "Quick Tunnel", "mode_quick_desc": "Auto-generated temporary URL (*.trycloudflare.com), no account needed, URL changes on restart", "mode_auth": "Named Tunnel", "mode_auth_desc": "Use Cloudflare account token, supports custom domain, persistent URL", "token": "Tunnel Token", "token_placeholder": "Paste your Cloudflare Tunnel Token here", "token_hint": "Get from Cloudflare Zero Trust dashboard", "token_required": "Token is required for Named Tunnel mode", "use_http2": "Use HTTP/2", "use_http2_desc": "More compatible, recommended for China mainland", "status_label": "Tunnel Status", "status_stopped": "Stopped", "status_starting": "Starting...", "status_running": "Running", "status_stopping": "Stopping...", "status_error": "Error", "public_url": "Public URL", "public_url_placeholder": "Public URL will appear here after tunnel starts", "copy_url": "Copy URL", "url_copied": "URL copied", "start_tunnel": "Start Tunnel", "stop_tunnel": "Stop Tunnel", "running": "Tunnel Running", "started": "Tunnel started", "stopped": "Tunnel stopped", "start_failed": "Start failed: {{error}}", "stop_failed": "Stop failed: {{error}}", "require_proxy_running": "Please start the local proxy service first", "connection_info": "Connection Info", "local_port": "Local Port", "tunnel_protocol": "Tunnel Protocol" }, "example": { "title": "Usage Examples", "curl": "cURL", "python": "Python", "python_anthropic": "from anthropic import Anthropic\n\nclient = Anthropic(\n # Recommended: 127.0.0.1\n base_url=\"{{baseUrl}}\",\n api_key=\"{{apiKey}}\"\n)\n\n# Note: Antigravity supports calling any model via the Anthropic SDK\nresponse = client.messages.create(\n model=\"{{modelId}}\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n\nprint(response.content[0].text)", "python_gemini": "# Install: pip install google-generativeai\nimport google.generativeai as genai\n\n# Use Antigravity proxy address (recommended 127.0.0.1)\ngenai.configure(\n api_key=\"{{apiKey}}\",\n transport='rest',\n client_options={'api_endpoint': '{{rawBaseUrl}}'}\n)\n\nmodel = genai.GenerativeModel('{{modelId}}')\nresponse = model.generate_content(\"Hello\")\nprint(response.text)", "python_openai_image": "from openai import OpenAI\n\nclient = OpenAI(\n base_url=\"{{baseUrl}}\",\n api_key=\"{{apiKey}}\"\n)\n\nresponse = client.chat.completions.create(\n model=\"{{modelId}}\",\n # Option 1: use size (recommended)\n # Supported: \"1024x1024\" (1:1), \"1280x720\" (16:9), \"720x1280\" (9:16), \"1216x896\" (4:3)\n extra_body={ \"size\": \"1024x1024\" },\n\n # Option 2: use model suffix\n # e.g. gemini-3-pro-image-16-9, gemini-3-pro-image-4-3\n # model=\"gemini-3-pro-image-16-9\",\n messages=[{\n \"role\": \"user\",\n \"content\": \"Draw a futuristic city\"\n }]\n)\n\nprint(response.choices[0].message.content)", "python_openai": "from openai import OpenAI\n\nclient = OpenAI(\n base_url=\"{{baseUrl}}\",\n api_key=\"{{apiKey}}\"\n)\n\nresponse = client.chat.completions.create(\n model=\"{{modelId}}\",\n messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n\nprint(response.choices[0].message.content)" }, "examples": { "title": "Usage Examples" }, "dialog": { "confirm_regenerate": "Are you sure to regenerate API Key? The old key will be invalid immediately.", "operate_failed": "Operation failed: {{error}}", "reset_mapping_title": "Reset Model Mapping", "reset_mapping_msg": "Are you sure you want to reset all model mappings to system defaults? This action cannot be undone.", "regenerate_key_title": "Regenerate API Key", "regenerate_key_msg": "Are you sure you want to regenerate the API Key? The old key will be invalidated immediately.", "clear_bindings_title": "Clear Session Bindings", "clear_bindings_msg": "Are you sure you want to clear all session-account bindings?", "clear_rate_limits_title": "Clear Rate Limit Records", "clear_rate_limits_confirm": "Are you sure you want to clear all local rate limit records?" }, "model": { "flash": "Fast Response", "flash_preview": "Flash Preview (Flash 3.1)", "flash_lite": "Lite & Fast (Lite)", "flash_thinking": "Thinking Capability (Thinking)", "pro_legacy": "Legacy Pro", "pro_low": "3.1 Pro Low", "pro_high": "3.1 Pro High", "pro_image": "Image Generation (1:1)", "pro_image_16_9": "Image Generation (16:9)", "pro_image_9_16": "Image Generation (9:16)", "pro_image_4_3": "Image Generation (4:3)", "pro_image_3_4": "Image Generation (3:4)", "pro_image_1_1": "Image Generation (1:1)", "claude_sonnet": "Code Reasoning (Claude 4.6)", "claude_sonnet_thinking": "Chain of Thought (4.6 Think)", "claude_opus_thinking": "Strongest Thinking (Opus Think)", "gemini_2_5_flash": "Flash Model (2.5 Flash)", "gemini_2_5_pro": "High Performance (2.5 Pro)", "claude_4_6": "Latest Reasoning (4.6)" }, "mapping": { "title": "Claude Code Model Mapping", "description": "Map Claude Code models to Antigravity models. Optimize cost and speed by routing requests intelligently.", "default": "Default", "sonnet_desc": "Most capable for complex work", "opus_desc": "Premium tier", "haiku_desc": "Fastest for quick answers", "maps_to": "Maps to Antigravity", "apply_recommended": "Apply Recommended", "restore_defaults": "Restore Default Configuration", "reset_all": "Reset All" }, "models": { "flash": "Ultra-fast", "flash_thinking": "Thinking Capability", "pro_high": "Best Reasoning", "pro_low": "Low Quota", "sonnet": "Code Reasoning", "sonnet_thinking": "Chain of Thought", "opus_thinking": "Strongest Thinking" }, "router": { "title": "Model Router", "subtitle": "Route models by series or add custom exact mappings.\nNote: Native Claude pass-through models (e.g. claude-sonnet-4-6-thinking, claude-opus-4-6-thinking) bypass series groups by default. Use \"Expert Custom Routing\" to override.", "subtitle_simple": "Customize model routing with wildcards or exact mappings", "background_task_title": "Background Task Model", "background_task_desc": "Model used for Claude CLI background tasks like title generation, summary, etc. (Default: gemini-2.5-flash)", "use_default": "Use System Default", "current_model": "Current Model", "apply_presets": "Apply Presets", "presets_applied": "Presets applied successfully", "preset_default": "Default Preset", "preset_default_desc": "GPT-4 โ†’ Gemini Pro, Claude โ†’ Opus", "preset_performance": "Performance First", "preset_performance_desc": "Use high-performance models for all", "preset_cost": "Cost Optimized", "preset_cost_desc": "Prioritize cost-effective models", "preset_balanced": "Balanced Mode", "preset_balanced_desc": "Balance performance and cost", "built_in_presets": "Built-in Presets", "custom_presets": "Custom Presets", "apply_selected": "Apply Selected", "add_preset": "Save Current Mapping", "delete_preset": "Delete Current Preset", "cannot_delete_builtin": "Cannot delete built-in presets", "no_mapping_to_save": "No mapping configuration to save", "preset_name_required": "Preset name is required", "preset_saved": "Preset saved successfully", "manage_presets_title": "Manage Custom Presets", "save_current_as_preset": "Save Current Configuration", "preset_name_placeholder": "Enter preset name...", "save_hint": "Saves the currently active model mappings as a reusable preset.", "your_presets": "Your Presets", "no_custom_presets": "No custom presets yet", "mappings_count": "mappings", "custom_preset_desc": "User defined preset", "custom_mappings": "Custom Mappings", "group_title": "Series Groups", "gemini3_group_label": "Gemini 3 (Recommended)", "gemini3_option_high": "gemini-3.1-pro-high (High Quality)", "gemini3_option_low": "gemini-3.1-pro-low (Balanced)", "gemini3_option_flash": "gemini-3-flash (Fast)", "groups": { "claude_45": { "name": "Opus 4.6 TK Series", "desc": "Opus 4.5 TK (Thinking)" }, "claude_35": { "name": "Claude 3.5 Series", "desc": "Sonnet 3.5, Haiku 3.5" }, "gpt_4": { "name": "GPT-4 / o1 Series", "desc": "GPT-4, Turbo, o1-preview" }, "gpt_4o": { "name": "GPT-4o / 3.5 Series", "desc": "GPT-4o, Mini, 3.5 Turbo" }, "gpt_5": { "name": "GPT-5 Series", "desc": "GPT-5.1, GPT-5.2 xhigh" } }, "expert_title": "Expert Custom Routing", "expert_subtitle": "Precise matching for any original model ID.", "custom_mapping_tip": "๐Ÿ’ก Supports manual input of any model ID to experience unreleased models (e.g. claude-opus-4-6).", "custom_mapping_warning": "Note: Not all accounts support unreleased models.", "money_saving_tip": "๐Ÿ’ฐ Cost-saving tip:", "haiku_optimization_tip": "Claude CLI uses {{model}} for background tasks by default. Map it to a cheaper Flash model to save ~95% costs", "haiku_optimization_btn": "Quick Optimize", "haiku_tip_title": "๐Ÿ’ฐ Cost-saving tip:", "haiku_tip_body_before": "Claude CLI defaults to", "haiku_tip_body_after": "for background tasks; mapping it to a cheaper Flash model can save about 95% of the cost.", "haiku_tip_action": "Optimize", "reset_confirm": "Reset all mappings to system defaults?", "reset_mapping": "Reset Mapping", "add_mapping": "Add Mapping", "current_list": "Custom List", "no_custom_mapping": "No custom mappings yet", "gemini3_only_warning": "โš ๏ธ Gemini 3 series only", "default_suffix": " (Default)", "original_id": "Original ID", "route_to": "Route To", "select_target_model": "Select Target Model", "original_placeholder": "Original (e.g. gpt-4 or gpt-4*)" }, "multi_protocol": { "title": "Multi-Protocol Support", "subtitle": "Seamlessly integrate with your favorite AI tools and CLIs", "description": "The local proxy supports OpenAI, Anthropic, and Gemini protocols, ensuring compatibility with a wide range of applications.", "openai_label": "OpenAI Protocol", "anthropic_label": "Anthropic Protocol", "openai_tools": "Cherry Studio, NextChat", "anthropic_tools": "Claude Code CLI", "gemini_label": "Gemini Protocol", "gemini_tools": "Google AI SDK, LangChain", "quick_integration": "Quick Integration", "click_tip": "๐Ÿ‘† Click a model to update code examples", "copy_base": "Copy Base" }, "supported_models": { "title": "Supported Models & Integration", "model_name": "Model Name", "model_id": "Model ID", "description": "Description", "action": "Action" }, "cli_sync": { "title": "One-click CLI Sync", "subtitle": "Quickly sync current API endpoints and keys to your local AI CLI tools.", "card_title": "{{name}} Config", "status": { "not_installed": "Not detected", "installed": "v{{version}}", "synced": "Pointed to this app", "not_synced": "Not synced", "detecting": "Detecting...", "current_base_url": "Current Base URL" }, "model_select": "Select Model", "btn_sync": "Sync Config Now", "btn_view": "View Config", "btn_restore": "Restore Defaults", "btn_restore_backup": "Restore Backup", "restore_confirm": "Are you sure you want to restore the configuration for {{name}} to the official default URL?", "restore_backup_confirm": "Backup configuration found. Are you sure you want to restore it?", "modal": { "view_title": "{{name}} Config Content", "copy_success": "Config content copied" }, "toast": { "sync_success": "Sync successful! {{name}} is ready.", "sync_error": "Sync failed: {{error}}" }, "sync_confirm_title": "Sync Confirmation", "sync_confirm_message": "Ready to sync {{name}} configuration. โš ๏ธ Warning: This will overwrite your existing local configuration files (e.g. login tokens, API Keys). Are you sure you want to continue?" } }, "monitor": { "page_title": "API Monitor Dashboard", "page_subtitle": "Real-time request logging and analysis", "open_monitor": "Open Monitor", "logging_status": { "active": "Recording", "paused": "Paused" }, "stats": { "total": "Total", "ok": "OK", "err": "ERR" }, "filters": { "placeholder": "Filter by model, path, or status...", "quick_filters": "Quick Filters:", "all": "All", "error": "Error", "chat": "Chat", "gemini": "Gemini", "claude": "Claude", "images": "Images", "reset": "Reset", "by_account": "Filter by account", "all_accounts": "All Accounts" }, "table": { "status": "Status", "method": "Method", "model": "Model", "protocol": "Protocol", "account": "Account", "path": "Path", "usage": "Tokens", "duration": "Duration", "time": "Time", "empty": "No requests recorded" }, "details": { "title": "Request Details", "request_payload": "Request Payload", "response_payload": "Response Payload", "duration": "Duration", "tokens": "Tokens (I/O)", "time": "Time", "model": "Model", "mapped_model": "Mapped Model", "protocol": "Protocol", "account_used": "Account Used", "id": "Request ID", "payload_empty": "No data" }, "dialog": { "clear_title": "Clear Proxy Logs", "clear_msg": "Are you sure you want to clear all proxy logs? This action cannot be undone." }, "network": { "title": "Network Monitor", "open": "Open Network Monitor", "requests_count": "{{count}} requests", "start_recording": "Start Recording", "stop_recording": "Stop Recording", "clear_requests": "Clear Requests", "empty": "No requests recorded", "waiting": "Waiting for response...", "badge_error": "Error", "table": { "status": "Status", "command": "Command", "time": "Time", "duration": "Duration" }, "sections": { "general": "General", "request_args": "Request Args", "error_details": "Error Details", "response": "Response" }, "fields": { "status": "Status", "start_time": "Start Time", "duration": "Duration" } } }, "update_notification": { "title": "Updating...", "message": "A new version is ready with optimizations and improvements. Current: v{{current}}", "ready": "Update Ready!", "downloading": "Downloading update in background...", "restarting": "Restarting application...", "auto_update": "Auto Update", "restart_prompt": "Update downloaded and ready to install. Restart now?", "btn_restart": "Restart", "btn_later": "Later", "toast": { "not_ready": "Update artifacts are not ready yet. Will retry later.", "failed": "Auto-update failed" } }, "login": { "title": "Secure Access Control", "desc": "Running in Web mode. Please enter management password or API Key to access.", "placeholder": "Enter management password or API Key", "btn_login": "Verify and Enter", "btn_verifying": "Verifying...", "error_invalid_key": "Invalid password or API Key, please try again", "error_network": "Network connection failed, please check if the service is running", "note": "Note: If a separate management password is set, please enter it; otherwise, enter API_KEY.", "lookup_hint": "If forgotten, run docker logs antigravity-manager to find Current API Key or Web UI Password", "config_hint": "Or run grep -E '\"api_key\"|\"admin_password\"' ~/.antigravity_tools/gui_config.json to view." }, "token_stats": { "title": "Token Consumption Stats", "hourly": "Hour", "daily": "Day", "weekly": "Week", "total_tokens": "Total Tokens", "input_tokens": "Input Tokens", "output_tokens": "Output Tokens", "accounts_used": "Active Accounts", "models_used": "Models Used", "model_trend": "Model Usage Trend", "account_trend": "Account Usage Trend", "usage_trend": "Token Usage Trend", "by_account": "By Account", "by_model": "By Model", "by_account_view": "By Account", "model_details": "Model Breakdown", "account_details": "Account Breakdown", "model": "Model", "account": "Account", "requests": "Requests", "input": "Input", "output": "Output", "total": "Total", "percentage": "Share", "no_data": "No data available" }, "errors": { "stream": { "timeout_error": "Request timeout, please check your network connection", "connection_error": "Connection failed, please check your network or proxy settings", "decode_error": "Network unstable, data transmission interrupted. Try: 1) Check network 2) Switch proxy 3) Retry", "stream_error": "Stream transmission error, please retry later", "unknown_error": "Unknown error occurred, please retry later" } }, "security": { "title": "Security Monitor", "refresh_data": "Refresh Data", "refresh": "Refresh", "tab_logs": "Access Logs", "tab_stats": "Statistics", "tab_blacklist": "Blacklist", "tab_whitelist": "Whitelist", "tab_config": "Security Config", "stats": { "total_requests": "Total Requests", "total_requests_desc": "All recorded requests", "unique_ips": "Unique IPs", "unique_ips_desc": "Distinct client IP addresses", "blocked_requests": "Blocked Requests", "blocked_requests_desc": "Requests rejected by rules", "ip_activity_token_usage": "IP Activity & Token Usage", "hour": "Hr", "day": "Day", "week": "Wk", "month": "Mo", "rank": "Rank", "ip_address": "IP Address", "activity_reqs": "Activity (Reqs)", "total_token": "Total Token", "prompt": "Prompt", "completion": "Completion", "no_data": "No Data" }, "logs": { "search_placeholder": "Search IP, Path, User Agent...", "username": "User", "show_blocked_only": "Show Blocked Only", "status": "Status", "ip_address": "IP Address", "method": "Method", "path": "Path", "duration": "Duration", "time": "Time", "reason": "Reason", "blocked": "Blocked", "no_logs": "No logs available", "total_records": "Total {{total}} records", "prev_page": "Previous", "next_page": "Next", "page_num": "Page {{page}}", "per_page_suffix": "/page" }, "blacklist": { "add_ip": "Add IP", "search_placeholder": "Search...", "added_at": "Added At", "expires_at": "Expires At", "no_data": "No blacklist data", "add_title": "Add to Blacklist", "ip_cidr_label": "IP Address or CIDR", "ip_cidr_placeholder": "e.g. 192.168.1.1 or 10.0.0.0/24", "reason_label": "Reason (Optional)", "reason_placeholder": "e.g. Malicious scanning", "expires_label": "Expire Time (Hours, Optional)", "expires_placeholder": "Leave empty for permanent", "cancel": "Cancel", "confirm": "Add", "add_btn": "Add" }, "whitelist": { "add_ip": "Add Trusted IP", "no_data": "No whitelist data", "add_title": "Add to Whitelist", "description_label": "Description (Optional)", "description_placeholder": "e.g. Internal Server", "cancel": "Cancel", "confirm": "Add", "add_btn": "Add" }, "config": { "title": "Security Settings", "save": "Save Changes", "saving": "Saving...", "blacklist_title": "IP Blacklist", "blacklist_desc": "Manage blocked IP addresses and rules.", "enable_blacklist": "Enable Blacklist Protection", "block_msg_label": "Custom Block Message", "block_msg_desc": "Response content returned to blocked clients.", "whitelist_title": "IP Whitelist", "whitelist_desc": "Manage trusted IP addresses.", "enable_whitelist": "Enable Whitelist Mode", "whitelist_warning": "Warning: Enabling whitelist mode will block ALL requests from IPs not in the whitelist. If you access via proxy, be careful not to lock yourself out.", "whitelist_priority": "Whitelist Priority (Overrides Blacklist)", "whitelist_priority_desc": "If enabled, whitelisted IPs will be allowed even if they match blacklist rules.", "load_error": "Failed to load configuration", "save_success": "Configuration saved", "save_error": "Failed to save configuration" } }, "user_token": { "title": "User Tokens", "total_users": "Total Users", "active_tokens": "Active Tokens", "total_created": "Total Created", "create": "Create Token", "username": "Username", "token": "Token", "expires": "Expires", "usage": "Usage", "ip_limit": "IP Limit", "created": "Created", "today_requests": "Today Requests", "never": "Never", "renew": "Renew", "renew_button": "Renew", "unlimited": "Unlimited", "create_title": "Create New Token", "description": "Description", "curfew": "Curfew (Service Unavailable Time)", "edit_title": "Edit Token", "username_required": "Username is required", "renew_success": "Renewed successfully", "expires_day": "1 Day", "expires_week": "1 Week", "expires_month": "1 Month", "expires_never": "Never", "no_data": "No tokens found", "placeholder_username": "e.g. user1", "placeholder_desc": "Optional notes", "placeholder_max_ips": "0 = Unlimited", "hint_max_ips": "0 = Unlimited", "hint_curfew": "Leave empty to disable. Based on server time." } }