app / src /locales /en.json
AZILS's picture
Upload 323 files
a21c316 verified
{
"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</1> 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</1>, 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</1> in terminal first.",
"tip2": "For production environments, using a <1>Service Account</1> 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</1> 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</1>. 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/<version> <os>/<arch>",
"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 <API_KEY> 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."
}
}