AIstudioProxyAPI / gui /i18n.py
peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
21.7 kB
"""
GUI Launcher Internationalization (i18n)
Contains all translations for English and Chinese.
"""
from typing import Dict
# Current language setting (module-level state)
_current_language = "en"
def get_language() -> str:
"""Get current language code."""
return _current_language
def set_language(lang_code: str) -> None:
"""Set current language code."""
global _current_language
if lang_code in ("en", "zh"):
_current_language = lang_code
def get_text(key: str, **kwargs) -> str:
"""Get translated text for the given key."""
try:
text = TRANSLATIONS[key][_current_language]
if kwargs:
return text.format(**kwargs)
return text
except KeyError:
# Fallback to English
try:
text = TRANSLATIONS[key]["en"]
if kwargs:
return text.format(**kwargs)
return text
except KeyError:
return f"<{key}>"
# =============================================================================
# All Translations
# =============================================================================
TRANSLATIONS: Dict[str, Dict[str, str]] = {
# Window title
"title": {"en": "🚀 AI Studio Proxy API", "zh": "🚀 AI Studio 代理 API"},
# Status messages
"status_ready": {"en": "⚪ Ready", "zh": "⚪ 就绪"},
"status_running": {"en": "🟢 Running", "zh": "🟢 运行中"},
"status_stopping": {"en": "🟡 Stopping...", "zh": "🟡 停止中..."},
"status_stopped": {"en": "⚪ Stopped", "zh": "⚪ 已停止"},
"status_error": {"en": "🔴 Error", "zh": "🔴 错误"},
# Tabs
"tab_control": {"en": "🎮 Control", "zh": "🎮 控制"},
"tab_accounts": {"en": "👤 Accounts", "zh": "👤 账户"},
"tab_settings": {"en": "⚙️ Settings", "zh": "⚙️ 设置"},
"tab_logs": {"en": "📋 Logs", "zh": "📋 日志"},
# Control tab
"quick_start": {"en": "⚡ Quick Start", "zh": "⚡ 快速启动"},
"account_label": {"en": "Account:", "zh": "账户:"},
"mode_label": {"en": "Mode:", "zh": "模式:"},
"mode_headless": {"en": "Headless", "zh": "无头模式"},
"mode_visible": {"en": "Visible", "zh": "有头模式"},
"btn_start": {"en": "▶️ START", "zh": "▶️ 启动"},
"btn_stop": {"en": "⏹️ STOP", "zh": "⏹️ 停止"},
"api_info": {"en": "🌐 API Info", "zh": "🌐 API 信息"},
"btn_test": {"en": "🔍 Test", "zh": "🔍 测试"},
"btn_open_browser": {"en": "🌐 Open in Browser", "zh": "🌐 在浏览器中打开"},
"status_card": {"en": "📊 Status", "zh": "📊 状态"},
"service_stopped": {"en": "Service is stopped", "zh": "服务已停止"},
"service_started": {"en": "Service started", "zh": "服务已启动"},
"pid_label": {"en": "PID:", "zh": "进程ID:"},
# Account tab
"saved_accounts": {"en": "📋 Saved Accounts", "zh": "📋 已保存账户"},
"btn_add_account": {"en": "➕ Add New Account", "zh": "➕ 添加新账户"},
"btn_delete_account": {"en": "🗑️ Delete Selected", "zh": "🗑️ 删除选中"},
"btn_refresh": {"en": "🔄 Refresh", "zh": "🔄 刷新"},
"account_details": {"en": "ℹ️ Account Details", "zh": "ℹ️ 账户详情"},
"select_account_hint": {
"en": "Select an account to see details",
"zh": "选择账户查看详情",
},
"file_label": {"en": "📁 File:", "zh": "📁 文件:"},
"last_modified": {"en": "📅 Last modified:", "zh": "📅 最后修改:"},
"size_label": {"en": "📊 Size:", "zh": "📊 大小:"},
# Settings tab
"port_settings": {"en": "🔌 Port Settings", "zh": "🔌 端口设置"},
"fastapi_port": {"en": "FastAPI Port:", "zh": "FastAPI 端口:"},
"stream_port": {"en": "Stream Port:", "zh": "流代理端口:"},
"proxy_settings": {"en": "🌍 Proxy Settings", "zh": "🌍 代理设置"},
"use_proxy": {"en": "Use Proxy", "zh": "使用代理"},
"proxy_address": {"en": "Address:", "zh": "地址:"},
"proxy_example": {
"en": "Example: http://127.0.0.1:7890",
"zh": "示例: http://127.0.0.1:7890",
},
"language_settings": {"en": "🌐 Language / 语言", "zh": "🌐 Language / 语言"},
"btn_save_settings": {"en": "💾 Save Settings", "zh": "💾 保存设置"},
"btn_reset_default": {"en": "🔄 Reset to Default", "zh": "🔄 恢复默认"},
# Logs tab
"btn_clear_logs": {"en": "🗑️ Clear", "zh": "🗑️ 清空"},
"btn_save_logs": {"en": "💾 Save to File", "zh": "💾 保存到文件"},
"btn_open_log_folder": {"en": "📂 Open Log File", "zh": "📂 打开日志文件"},
# Dialog messages
"new_account_title": {"en": "New Account", "zh": "新建账户"},
"new_account_prompt": {
"en": "Enter a name for the account\n(e.g.: my_gmail_account):",
"zh": "请输入账户名称\n(例如: my_gmail_account):",
},
"invalid_filename": {
"en": "Only letters, numbers, - and _ are allowed!",
"zh": "只允许使用字母、数字、- 和 _!",
},
"confirm_delete": {
"en": "Are you sure you want to delete '{name}'?",
"zh": "确定要删除 '{name}' 吗?",
},
"confirm_title": {"en": "Confirm", "zh": "确认"},
"warning_title": {"en": "Warning", "zh": "警告"},
"error_title": {"en": "Error", "zh": "错误"},
"success_title": {"en": "Success", "zh": "成功"},
"select_account_warning": {
"en": "Please select an account to delete",
"zh": "请选择要删除的账户",
},
"select_account_error": {
"en": "Please select an account!",
"zh": "请选择一个账户!",
},
"service_already_running": {
"en": "Service is already running!",
"zh": "服务已在运行中!",
},
"api_running": {"en": "API is running! ✅", "zh": "API 运行正常! ✅"},
"api_not_responding": {
"en": "Could not connect to API.\nIs the service running?",
"zh": "无法连接到 API。\n服务是否在运行?",
},
"settings_saved": {"en": "Settings saved!", "zh": "设置已保存!"},
"reset_confirm": {
"en": "All settings will be reset to default. Continue?",
"zh": "所有设置将恢复为默认值。继续吗?",
},
"exit_confirm": {
"en": "Service is running. Stop and exit?",
"zh": "服务正在运行。停止并退出吗?",
},
"logs_saved": {"en": "Logs saved:", "zh": "日志已保存:"},
"logs_save_error": {"en": "Logs could not be saved:", "zh": "无法保存日志:"},
"folder_open_error": {"en": "Folder could not be opened:", "zh": "无法打开文件夹:"},
"account_delete_error": {
"en": "Account could not be deleted:",
"zh": "无法删除账户:",
},
"start_error": {"en": "Could not start:", "zh": "无法启动:"},
# Log messages
"log_ready": {
"en": "🚀 AI Studio Proxy Launcher ready",
"zh": "🚀 AI Studio 代理启动器就绪",
},
"log_accounts_loaded": {
"en": "✅ {count} account(s) loaded",
"zh": "✅ 已加载 {count} 个账户",
},
"log_no_accounts": {
"en": "⚠️ No saved accounts found",
"zh": "⚠️ 未找到已保存的账户",
},
"log_adding_account": {
"en": "🔐 Adding new account: {name}",
"zh": "🔐 正在添加新账户: {name}",
},
"log_browser_login": {
"en": "📌 Browser will open, log in to your Google account",
"zh": "📌 浏览器将打开,请登录您的 Google 账户",
},
"log_auto_save": {
"en": "📌 After logging in, account will be saved automatically",
"zh": "📌 登录后,账户将自动保存",
},
"log_account_deleted": {
"en": "🗑️ Account deleted: {name}",
"zh": "🗑️ 账户已删除: {name}",
},
"log_testing_api": {"en": "🔍 Testing API: {url}", "zh": "🔍 正在测试 API: {url}"},
"log_api_running": {"en": "✅ API is running!", "zh": "✅ API 运行正常!"},
"log_api_status": {
"en": "⚠️ API responded but status code: {code}",
"zh": "⚠️ API 响应但状态码: {code}",
},
"log_api_error": {
"en": "❌ Could not connect to API. Service may not be running.",
"zh": "❌ 无法连接到 API。服务可能未运行。",
},
"log_api_test_error": {
"en": "❌ API test error: {error}",
"zh": "❌ API 测试错误: {error}",
},
"log_settings_saved": {"en": "💾 Settings saved", "zh": "💾 设置已保存"},
"log_settings_reset": {
"en": "🔄 Settings reset to default",
"zh": "🔄 设置已恢复默认",
},
"log_checking_ports": {"en": "🔍 Checking ports...", "zh": "🔍 正在检查端口..."},
"log_port_in_use": {
"en": "🔍 Port {port} is in use, cleaning...",
"zh": "🔍 端口 {port} 被占用,正在清理...",
},
"log_pid_terminated": {
"en": " ✅ PID {pid} terminated",
"zh": " ✅ PID {pid} 已终止",
},
"log_pid_error": {
"en": " ❌ PID {pid}: {error}",
"zh": " ❌ PID {pid}: {error}",
},
"log_port_still_in_use": {
"en": " ❌ Port {port} is still in use!",
"zh": " ❌ 端口 {port} 仍被占用!",
},
"log_starting": {
"en": "🚀 Starting: {mode} mode",
"zh": "🚀 正在启动: {mode} 模式",
},
"log_service_started": {
"en": "✅ Service started (PID: {pid})",
"zh": "✅ 服务已启动 (PID: {pid})",
},
"log_stopping": {"en": "🛑 Stopping...", "zh": "🛑 正在停止..."},
"log_force_closing": {"en": "⚠️ Force closing...", "zh": "⚠️ 正在强制关闭..."},
"log_stopped": {"en": "✅ Stopped", "zh": "✅ 已停止"},
"log_stop_error": {"en": "❌ Stop error: {error}", "zh": "❌ 停止错误: {error}"},
"log_service_ended": {"en": "✅ Service ended normally", "zh": "✅ 服务正常结束"},
"log_service_error": {
"en": "⚠️ Service stopped with error: {code}",
"zh": "⚠️ 服务异常停止,错误码: {code}",
},
"log_minimized": {
"en": "📌 Minimized to system tray",
"zh": "📌 已最小化到系统托盘",
},
"log_accounts_refreshed": {
"en": "🔄 Account list refreshed",
"zh": "🔄 账户列表已刷新",
},
"log_language_changed": {
"en": "🌐 Language changed to English",
"zh": "🌐 语言已切换为中文",
},
"log_config_load_error": {
"en": "⚠️ Configuration could not be loaded: {error}",
"zh": "⚠️ 无法加载配置: {error}",
},
"log_config_save_error": {
"en": "⚠️ Configuration could not be saved: {error}",
"zh": "⚠️ 无法保存配置: {error}",
},
"log_logs_saved": {"en": "✅ Logs saved: {name}", "zh": "✅ 日志已保存: {name}"},
"log_port_pid_error": {
"en": "⚠️ Could not find port PID: {error}",
"zh": "⚠️ 无法查找端口 PID: {error}",
},
"log_user_cancelled": {"en": "❌ User cancelled", "zh": "❌ 用户取消"},
"log_port_clean_warning": {
"en": "Some ports could not be cleaned. Continue?",
"zh": "部分端口无法清理。是否继续?",
},
# API status
"api_active": {
"en": "✅ API is active and responding",
"zh": "✅ API 活跃且响应正常",
},
"api_not_active": {"en": "❌ API is not responding", "zh": "❌ API 无响应"},
# Menu bar
"menu_file": {"en": "File", "zh": "文件"},
"menu_start_service": {"en": "Start Service", "zh": "启动服务"},
"menu_stop_service": {"en": "Stop Service", "zh": "停止服务"},
"menu_exit": {"en": "Exit", "zh": "退出"},
"menu_help": {"en": "Help", "zh": "帮助"},
"menu_about": {"en": "About", "zh": "关于"},
"menu_documentation": {"en": "Documentation", "zh": "文档"},
"menu_github": {"en": "GitHub Repository", "zh": "GitHub 仓库"},
# About dialog
"about_title": {"en": "About AI Studio Proxy", "zh": "关于 AI Studio 代理"},
"about_version": {"en": "Version:", "zh": "版本:"},
"about_description": {
"en": "A proxy server that converts Google AI Studio's web interface into an OpenAI-compatible API.",
"zh": "将 Google AI Studio 网页界面转换为兼容 OpenAI API 的代理服务器。",
},
"about_credits": {"en": "Credits:", "zh": "致谢:"},
# Tooltips
"tooltip_account": {
"en": "Select the Google account to use for authentication",
"zh": "选择用于身份验证的 Google 账户",
},
"tooltip_headless": {
"en": "Run browser in background (no visible window)",
"zh": "在后台运行浏览器(无可见窗口)",
},
"tooltip_visible": {
"en": "Show browser window (useful for debugging)",
"zh": "显示浏览器窗口(用于调试)",
},
"tooltip_start": {
"en": "Start the proxy service (Ctrl+S)",
"zh": "启动代理服务 (Ctrl+S)",
},
"tooltip_stop": {
"en": "Stop the running service (Ctrl+X)",
"zh": "停止正在运行的服务 (Ctrl+X)",
},
"tooltip_test_api": {"en": "Test if API is responding", "zh": "测试 API 是否响应"},
"tooltip_copy_url": {
"en": "Copy API URL to clipboard",
"zh": "复制 API 地址到剪贴板",
},
"tooltip_add_account": {
"en": "Open browser to log in with a new Google account",
"zh": "打开浏览器以使用新的 Google 账户登录",
},
"tooltip_delete_account": {
"en": "Delete the selected account",
"zh": "删除选中的账户",
},
"tooltip_fastapi_port": {
"en": "Port for the OpenAI-compatible API (default: 2048)",
"zh": "OpenAI 兼容 API 的端口(默认:2048)",
},
"tooltip_stream_port": {
"en": "Port for streaming proxy (default: 3120)",
"zh": "流代理端口(默认:3120)",
},
"tooltip_proxy": {
"en": "HTTP proxy for accessing Google (e.g., http://127.0.0.1:7890)",
"zh": "访问 Google 的 HTTP 代理(例如:http://127.0.0.1:7890)",
},
# Status bar
"statusbar_ready": {"en": "Ready", "zh": "就绪"},
"statusbar_running": {"en": "Running", "zh": "运行中"},
"statusbar_uptime": {"en": "Uptime:", "zh": "运行时间:"},
"statusbar_port": {"en": "Port:", "zh": "端口:"},
# Copy
"copied_to_clipboard": {"en": "Copied to clipboard!", "zh": "已复制到剪贴板!"},
"btn_copy": {"en": "📋 Copy", "zh": "📋 复制"},
# Empty states
"no_accounts_title": {"en": "No Accounts Found", "zh": "未找到账户"},
"no_accounts_hint": {
"en": "Click '➕ Add New Account' to get started",
"zh": "点击 '➕ 添加新账户' 开始",
},
# Validation
"invalid_port": {
"en": "Invalid port number. Must be between 1 and 65535.",
"zh": "无效的端口号。必须在 1 到 65535 之间。",
},
"port_conflict": {
"en": "FastAPI and Stream ports cannot be the same.",
"zh": "FastAPI 端口和流代理端口不能相同。",
},
# Theme settings
"theme_settings": {"en": "🎨 Appearance", "zh": "🎨 外观"},
"theme_mode": {"en": "Theme Mode:", "zh": "主题模式:"},
"theme_dark": {"en": "🌙 Dark", "zh": "🌙 深色"},
"theme_light": {"en": "☀️ Light", "zh": "☀️ 浅色"},
"theme_system": {"en": "💻 System", "zh": "💻 跟随系统"},
"log_theme_changed": {
"en": "🎨 Theme changed to {mode}",
"zh": "🎨 主题已切换为 {mode}",
},
"tooltip_theme": {
"en": "Choose your preferred appearance mode",
"zh": "选择您偏好的外观模式",
},
# =========================================================================
# Advanced Settings
# =========================================================================
"advanced_settings": {"en": "🔧 Advanced Settings", "zh": "🔧 高级设置"},
"advanced_settings_hint": {
"en": "Configure .env file settings (click to expand/collapse)",
"zh": "配置 .env 文件设置(点击展开/折叠)",
},
"show_advanced": {"en": "▶ Show Advanced Settings", "zh": "▶ 显示高级设置"},
"hide_advanced": {"en": "▼ Hide Advanced Settings", "zh": "▼ 隐藏高级设置"},
# Category names
"cat_server": {"en": "🖥️ Server Configuration", "zh": "🖥️ 服务器配置"},
"cat_logging": {"en": "📝 Logging & Debugging", "zh": "📝 日志与调试"},
"cat_auth": {"en": "🔐 Authentication", "zh": "🔐 认证设置"},
"cat_cookie": {"en": "🍪 Cookie Refresh", "zh": "🍪 Cookie 刷新"},
"cat_browser": {"en": "🌐 Browser & Model", "zh": "🌐 浏览器与模型"},
"cat_api": {"en": "⚡ API Defaults", "zh": "⚡ API 默认参数"},
"cat_function_calling": {"en": "🔧 Function Calling", "zh": "🔧 函数调用"},
"cat_timeouts": {"en": "⏱️ Timeouts", "zh": "⏱️ 超时设置"},
"cat_misc": {"en": "📦 Miscellaneous", "zh": "📦 其他设置"},
# Action buttons
"btn_apply_env": {"en": "💾 Apply Changes", "zh": "💾 应用更改"},
"btn_reload_env": {"en": "🔄 Reload from File", "zh": "🔄 从文件重载"},
"btn_reset_env": {"en": "⚙️ Reset to Defaults", "zh": "⚙️ 恢复默认值"},
"btn_hot_reload": {"en": "🔥 Hot Reload", "zh": "🔥 热重载"},
# Status messages
"env_saved": {
"en": "Environment settings saved to .env",
"zh": "环境设置已保存到 .env",
},
"env_save_error": {"en": "Failed to save .env file", "zh": "保存 .env 文件失败"},
"env_reloaded": {
"en": "Settings reloaded from .env file",
"zh": "设置已从 .env 文件重新加载",
},
"env_reset_confirm": {
"en": "Reset all advanced settings to defaults? This cannot be undone.",
"zh": "将所有高级设置恢复为默认值?此操作不可撤销。",
},
"env_reset_done": {"en": "Settings reset to defaults", "zh": "设置已恢复默认"},
"env_unsaved_changes": {
"en": "You have unsaved changes. Save before continuing?",
"zh": "您有未保存的更改。是否在继续前保存?",
},
"env_hot_reload_success": {
"en": "Settings applied via hot reload",
"zh": "设置已通过热重载应用",
},
"env_hot_reload_warning": {
"en": "Proxy is running. Some settings require restart to take effect.",
"zh": "代理正在运行。部分设置需要重启才能生效。",
},
"env_hot_reload_confirm": {
"en": "Apply settings to running proxy? Some changes may require restart.",
"zh": "将设置应用到正在运行的代理?部分更改可能需要重启。",
},
"env_modified_indicator": {"en": "(modified)", "zh": "(已修改)"},
"env_file_not_found": {
"en": ".env file not found. Created from template.",
"zh": "未找到 .env 文件。已从模板创建。",
},
# Tooltips for settings
"tooltip_env_port": {
"en": "Main API server port (default: 2048)",
"zh": "主 API 服务器端口(默认:2048)",
},
"tooltip_env_stream_port": {
"en": "Streaming proxy port. Set to 0 to disable (default: 3120)",
"zh": "流代理端口。设置为 0 禁用(默认:3120)",
},
"tooltip_env_log_level": {
"en": "Server log verbosity level",
"zh": "服务器日志详细程度",
},
"tooltip_env_temperature": {
"en": "Default sampling temperature (0.0-2.0)",
"zh": "默认采样温度(0.0-2.0)",
},
"tooltip_env_max_tokens": {
"en": "Maximum output tokens per request",
"zh": "每次请求的最大输出令牌数",
},
"tooltip_env_auto_rotate": {
"en": "Automatically switch auth profile when quota exceeded",
"zh": "配额超限时自动切换认证配置文件",
},
"tooltip_env_quota_soft": {
"en": "Token count that triggers rotation pending state",
"zh": "触发待轮换状态的令牌计数",
},
"tooltip_env_quota_hard": {
"en": "Token count that triggers immediate rotation",
"zh": "触发立即轮换的令牌计数",
},
"tooltip_env_fc_mode": {
"en": "Function calling mode: auto (recommended), native, or emulated",
"zh": "函数调用模式:auto(推荐)、native 或 emulated",
},
"tooltip_env_hot_reload": {
"en": "Apply settings immediately without restart (some settings require restart)",
"zh": "立即应用设置无需重启(部分设置需要重启)",
},
# Log messages for advanced settings
"log_env_loaded": {
"en": "📁 Advanced settings loaded from .env",
"zh": "📁 高级设置已从 .env 加载",
},
"log_env_saved": {
"en": "💾 Advanced settings saved to .env",
"zh": "💾 高级设置已保存到 .env",
},
"log_env_hot_reload": {
"en": "🔥 Hot reload applied: {count} setting(s) updated",
"zh": "🔥 热重载已应用:{count} 个设置已更新",
},
"log_env_reset": {
"en": "⚙️ Advanced settings reset to defaults",
"zh": "⚙️ 高级设置已恢复默认",
},
}