573 lines
21 KiB
TypeScript
573 lines
21 KiB
TypeScript
import i18n from 'i18next';
|
|
import { initReactI18next } from 'react-i18next';
|
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
|
|
|
i18n
|
|
.use(LanguageDetector)
|
|
.use(initReactI18next)
|
|
.init({
|
|
fallbackLng: 'en',
|
|
detection: {
|
|
order: ['localStorage', 'navigator'],
|
|
caches: ['localStorage'],
|
|
lookupLocalStorage: 'lang',
|
|
},
|
|
supportedLngs: ['en', 'zh-CN'],
|
|
load: 'currentOnly', // Only load the exact language code, not variants
|
|
resources: {
|
|
en: {
|
|
translation: {
|
|
appName: 'Antigravity Manager',
|
|
status: {
|
|
checking: 'Checking status...',
|
|
running: 'Antigravity is running in background',
|
|
stopped: 'Antigravity service stopped',
|
|
},
|
|
action: {
|
|
stop: 'Stop',
|
|
start: 'Start',
|
|
switch: 'Switch',
|
|
deleteBackup: 'Delete Backup',
|
|
backupCurrent: 'Backup Current',
|
|
retry: 'Retry',
|
|
openLogs: 'Open Log Directory',
|
|
},
|
|
error: {
|
|
generic: 'An unexpected error occurred.',
|
|
},
|
|
nav: {
|
|
accounts: 'Accounts',
|
|
proxy: 'API Proxy',
|
|
settings: 'Settings',
|
|
},
|
|
account: {
|
|
current: 'Current',
|
|
lastUsed: 'Last used {{time}}',
|
|
},
|
|
home: {
|
|
title: 'Accounts',
|
|
description: 'Manage your Antigravity Google Gemini accounts.',
|
|
noBackups: {
|
|
title: 'No backups found',
|
|
description: 'Create a backup of your current Antigravity account to get started.',
|
|
action: 'Backup Current Account',
|
|
},
|
|
},
|
|
settings: {
|
|
title: 'Settings',
|
|
description: 'Manage application preferences.',
|
|
general: 'General',
|
|
connection: 'Connection',
|
|
models: 'Models',
|
|
appearance: {
|
|
title: 'Appearance',
|
|
description: 'Customize how Antigravity Manager looks on your device.',
|
|
},
|
|
darkMode: 'Dark Mode',
|
|
darkModeDescription: 'Enable dark mode for better viewing at night.',
|
|
language: {
|
|
title: 'Language',
|
|
description: 'Select your preferred language.',
|
|
english: 'English',
|
|
chinese: 'Chinese (Simplified)',
|
|
},
|
|
about: {
|
|
title: 'About',
|
|
description: 'Application information.',
|
|
},
|
|
version: 'Version',
|
|
platform: 'Platform',
|
|
license: 'License',
|
|
openLogDir: 'Open',
|
|
account: {
|
|
title: 'Account Settings',
|
|
description: 'Configure automatic account refresh and sync.',
|
|
auto_refresh: 'Auto Refresh Quota',
|
|
auto_refresh_desc: 'Periodically refresh quota info for all accounts',
|
|
auto_sync: 'Auto Sync Current Account',
|
|
auto_sync_desc: 'Periodically sync active account information',
|
|
},
|
|
proxy: {
|
|
title: 'Upstream Proxy',
|
|
description: 'Configure a proxy for outgoing requests to Google/Gemini APIs.',
|
|
enable: 'Enable Upstream Proxy',
|
|
url: 'Proxy URL',
|
|
timeout: 'Request Timeout (Seconds)',
|
|
},
|
|
modelMapping: {
|
|
title: 'Model Mapping',
|
|
description:
|
|
'Map Claude Code models to Antigravity models. Optimize cost and speed by routing requests intelligently.',
|
|
claudeKeyword: 'Claude Model (Keyword)',
|
|
targetGemini: 'Target Gemini Model',
|
|
addPlaceholderKey: 'e.g. op-3',
|
|
addPlaceholderValue: 'e.g. gemini-2.0-flash-exp',
|
|
noMappings: 'No custom mappings defined.',
|
|
mapsTo: 'Maps to',
|
|
default: 'Default',
|
|
restoreDefaults: 'Restore Defaults',
|
|
},
|
|
|
|
examples: {
|
|
title: 'Usage Examples',
|
|
description: 'Example commands to call the local API proxy.',
|
|
curl: 'cURL',
|
|
python: 'Python',
|
|
copy: 'Copy',
|
|
copied: 'Copied!',
|
|
openai_protocol: 'OpenAI Protocol',
|
|
anthropic_protocol: 'Anthropic Protocol',
|
|
openai_tools: 'Cursor, Windsurf, NextChat',
|
|
anthropic_tools: 'Claude Code CLI',
|
|
flash: 'Fast',
|
|
pro: 'Pro',
|
|
flash_preview: 'Preview',
|
|
pro_high: 'Best',
|
|
sonnet: 'Thinking',
|
|
opus: 'Opus',
|
|
},
|
|
gateway: {
|
|
title: 'API Proxy Service',
|
|
description: 'Control the local API proxy server.',
|
|
status_running: 'Running',
|
|
status_stopped: 'Stopped',
|
|
action_start: 'Start Service',
|
|
action_stop: 'Stop Service',
|
|
accounts_info: '{{count}} accounts available',
|
|
port: 'Listen Port',
|
|
port_hint: 'Default 8045, restart required to apply changes',
|
|
timeout: 'Request Timeout',
|
|
timeout_hint: 'Default 120s, range 30-600s',
|
|
api_key: 'API Key',
|
|
regenerate_key: 'Regenerate',
|
|
regenerateConfirm: {
|
|
title: 'Regenerate API Key?',
|
|
description:
|
|
'This will invalidate the current API key immediately. Any applications using the old key will stop working.',
|
|
cancel: 'Cancel',
|
|
confirm: 'Regenerate',
|
|
},
|
|
key_warning: 'Keep your API key secure. Do not share it.',
|
|
auto_start: 'Auto Start with App',
|
|
auto_start_desc: 'Start proxy service when application launches',
|
|
},
|
|
proxy_tab: 'Proxy',
|
|
save: 'Save Settings',
|
|
},
|
|
toast: {
|
|
backupSuccess: {
|
|
title: 'Success',
|
|
description: 'Account backup created successfully.',
|
|
},
|
|
backupError: {
|
|
title: 'Error',
|
|
description: 'Failed to create backup: {{error}}',
|
|
},
|
|
switchSuccess: {
|
|
title: 'Success',
|
|
description: 'Switched account successfully.',
|
|
},
|
|
switchError: {
|
|
title: 'Error',
|
|
description: 'Failed to switch account: {{error}}',
|
|
},
|
|
deleteSuccess: {
|
|
title: 'Success',
|
|
description: 'Account backup deleted successfully.',
|
|
},
|
|
deleteError: {
|
|
title: 'Error',
|
|
description: 'Failed to delete backup: {{error}}',
|
|
},
|
|
},
|
|
cloud: {
|
|
title: 'Accounts',
|
|
description: 'Manage your Google Gemini account pool.',
|
|
autoSwitch: 'Auto-Switch',
|
|
addAccount: 'Add Account',
|
|
syncFromIDE: 'Sync from IDE',
|
|
checkQuota: 'Check Quota Now',
|
|
polling: 'Polling triggered',
|
|
authDialog: {
|
|
title: 'Add Google Account',
|
|
description: 'To add an account, you need to authorize the application.',
|
|
openLogin: 'Open Login Page',
|
|
authCode: 'Authorization Code',
|
|
placeholder: 'Paste the code starting with 4/...',
|
|
instruction:
|
|
'Will open default browser for Google login. Copy the code from localhost page and paste here.',
|
|
verify: 'Verify & Add',
|
|
},
|
|
card: {
|
|
active: 'Active',
|
|
use: 'Use',
|
|
rateLimited: 'Rate Limited',
|
|
left: 'left',
|
|
used: 'Used',
|
|
unknown: 'Unknown User',
|
|
actions: 'Actions',
|
|
useAccount: 'Use Account',
|
|
refresh: 'Refresh Quota',
|
|
delete: 'Delete Account',
|
|
noQuota: 'No quota data',
|
|
},
|
|
list: {
|
|
noAccounts: 'No cloud accounts added yet.',
|
|
},
|
|
toast: {
|
|
syncSuccess: {
|
|
title: 'Sync Successful',
|
|
description: 'Imported {{email}} from IDE.',
|
|
},
|
|
syncFailed: {
|
|
title: 'Sync Failed',
|
|
description: 'No active account found in IDE database.',
|
|
},
|
|
addSuccess: 'Account added successfully!',
|
|
addFailed: {
|
|
title: 'Failed to add account',
|
|
},
|
|
quotaRefreshed: 'Quota refreshed',
|
|
refreshFailed: 'Failed to refresh quota',
|
|
switched: {
|
|
title: 'Account switched!',
|
|
description: 'Restarting Antigravity...',
|
|
},
|
|
switchFailed: 'Failed to switch account',
|
|
deleted: 'Account deleted',
|
|
deleteFailed: 'Failed to delete account',
|
|
deleteConfirm: 'Are you sure you want to delete this account?',
|
|
autoSwitchOn: 'Auto-Switch Enabled',
|
|
autoSwitchOff: 'Auto-Switch Disabled',
|
|
updateSettingsFailed: 'Failed to update settings',
|
|
},
|
|
batch: {
|
|
selected: 'Selected {{count}}',
|
|
delete: 'Delete Selected',
|
|
refresh: 'Refresh Selected',
|
|
selectAll: 'Select All',
|
|
clear: 'Clear Selection',
|
|
confirmDelete: 'Are you sure you want to delete {{count}} accounts?',
|
|
},
|
|
},
|
|
proxy: {
|
|
title: 'API Proxy',
|
|
description: 'Manage the local API proxy service.',
|
|
save: 'Save Settings',
|
|
copy: 'Copy',
|
|
regenerate: 'Regenerate',
|
|
regenerateConfirm: {
|
|
title: 'Regenerate API Key?',
|
|
description:
|
|
'This will invalidate the current API key immediately. Any applications using the old key will stop working.',
|
|
cancel: 'Cancel',
|
|
confirm: 'Regenerate',
|
|
},
|
|
service: {
|
|
title: 'Service Status',
|
|
description: 'Control the local API proxy server.',
|
|
running: 'Running',
|
|
stopped: 'Stopped',
|
|
start: 'Start Service',
|
|
stop: 'Stop Service',
|
|
},
|
|
config: {
|
|
port: 'Listen Port',
|
|
timeout: 'Request Timeout',
|
|
api_key: 'API Key',
|
|
auto_start: 'Auto Start with App',
|
|
auto_start_desc: 'Start proxy service when application launches',
|
|
},
|
|
mapping: {
|
|
title: 'Model Mapping',
|
|
description: 'Map Claude models to Gemini models for routing.',
|
|
maps_to: 'Maps to',
|
|
restore: 'Restore Defaults',
|
|
},
|
|
examples: {
|
|
title: 'Usage Examples',
|
|
description: 'Example commands to call the local API proxy.',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
'zh-CN': {
|
|
translation: {
|
|
appName: 'Antigravity 管理器',
|
|
status: {
|
|
checking: '正在检查状态...',
|
|
running: 'Antigravity 正在后台运行',
|
|
stopped: 'Antigravity 服务已停止',
|
|
},
|
|
action: {
|
|
stop: '停止',
|
|
start: '启动',
|
|
switch: '切换',
|
|
deleteBackup: '删除备份',
|
|
backupCurrent: '备份当前账号',
|
|
retry: '重试',
|
|
openLogs: '打开日志目录',
|
|
},
|
|
error: {
|
|
generic: '发生未知错误。',
|
|
},
|
|
nav: {
|
|
accounts: '账号',
|
|
proxy: 'API 反代',
|
|
settings: '设置',
|
|
},
|
|
account: {
|
|
current: '当前',
|
|
lastUsed: '上次使用 {{time}}',
|
|
},
|
|
home: {
|
|
title: '账号列表',
|
|
description: '管理您的 Antigravity Google Gemini 账号。',
|
|
noBackups: {
|
|
title: '未找到备份',
|
|
description: '备份您当前的 Antigravity 账号以开始使用。',
|
|
action: '备份当前账号',
|
|
},
|
|
},
|
|
settings: {
|
|
title: '设置',
|
|
description: '管理应用偏好设置。',
|
|
general: '常规',
|
|
connection: '连接',
|
|
models: '模型',
|
|
appearance: {
|
|
title: '外观',
|
|
description: '自定义 Antigravity 管理器在您设备上的显示方式。',
|
|
},
|
|
darkMode: '深色模式',
|
|
darkModeDescription: '启用深色模式以获得更好的夜间观看体验。',
|
|
language: {
|
|
title: '语言',
|
|
description: '选择您的首选语言。',
|
|
english: '英语',
|
|
chinese: '中文 (简体)',
|
|
},
|
|
about: {
|
|
title: '关于',
|
|
description: '应用信息。',
|
|
},
|
|
version: '版本',
|
|
platform: '平台',
|
|
license: '许可证',
|
|
openLogDir: '打开',
|
|
account: {
|
|
title: '账号设置',
|
|
description: '配置自动刷新和同步账号。',
|
|
auto_refresh: '自动刷新配额',
|
|
auto_refresh_desc: '定期自动刷新所有账号的配额信息',
|
|
auto_sync: '自动获取当前账号',
|
|
auto_sync_desc: '定期自动同步当前活跃账号信息',
|
|
},
|
|
proxy: {
|
|
title: '上游代理',
|
|
description: '为发往 Google/Gemini API 的请求配置代理。',
|
|
enable: '启用上游代理',
|
|
url: '代理地址',
|
|
timeout: '请求超时 (秒)',
|
|
},
|
|
modelMapping: {
|
|
title: '模型映射',
|
|
description:
|
|
'将 Claude Code 模型映射到 Antigravity 模型,智能路由请求以优化成本和速度。',
|
|
claudeKeyword: 'Claude 模型 (关键词)',
|
|
targetGemini: '目标 Gemini 模型',
|
|
addPlaceholderKey: '例如 op-3',
|
|
addPlaceholderValue: '例如 gemini-2.0-flash-exp',
|
|
noMappings: '暂无自定义映射。',
|
|
mapsTo: '映射到',
|
|
default: '默认',
|
|
restoreDefaults: '恢复默认配置',
|
|
},
|
|
|
|
examples: {
|
|
title: '使用示例',
|
|
description: '调用本地 API 代理的示例命令。',
|
|
curl: 'cURL',
|
|
python: 'Python',
|
|
copy: '复制',
|
|
copied: '已复制!',
|
|
openai_protocol: 'OpenAI 协议',
|
|
anthropic_protocol: 'Anthropic 协议',
|
|
openai_tools: 'Cursor, Windsurf, NextChat',
|
|
anthropic_tools: 'Claude Code CLI',
|
|
flash: '极速',
|
|
pro: '专业版',
|
|
flash_preview: '预览版',
|
|
pro_high: '最强',
|
|
sonnet: '思维链',
|
|
opus: 'Opus',
|
|
},
|
|
gateway: {
|
|
title: 'API 反代服务',
|
|
description: '控制本地 API 代理服务器。',
|
|
status_running: '运行中',
|
|
status_stopped: '已停止',
|
|
action_start: '启动服务',
|
|
action_stop: '停止服务',
|
|
accounts_info: '{{count}} 个账号可用',
|
|
port: '监听端口',
|
|
port_hint: '默认 8045,修改端口需重启服务',
|
|
timeout: '请求超时',
|
|
timeout_hint: '默认 120 秒,范围 30-600 秒',
|
|
api_key: 'API 密钥',
|
|
regenerate_key: '重新生成',
|
|
regenerateConfirm: {
|
|
title: '重新生成 API 密钥?',
|
|
description: '这将立即废除当前 API 密钥。任何使用旧密钥的应用将无法继续工作。',
|
|
cancel: '取消',
|
|
confirm: '重新生成',
|
|
},
|
|
key_warning: '请妥善保管您的 API 密钥,不要泄露给他人。',
|
|
auto_start: '跟随应用自动启动',
|
|
auto_start_desc: '应用启动时自动启动代理服务',
|
|
},
|
|
proxy_tab: '反代',
|
|
save: '保存设置',
|
|
},
|
|
toast: {
|
|
backupSuccess: {
|
|
title: '成功',
|
|
description: '账号备份创建成功。',
|
|
},
|
|
backupError: {
|
|
title: '错误',
|
|
description: '创建备份失败:{{error}}',
|
|
},
|
|
switchSuccess: {
|
|
title: '成功',
|
|
description: '切换账号成功。',
|
|
},
|
|
switchError: {
|
|
title: '错误',
|
|
description: '切换账号失败:{{error}}',
|
|
},
|
|
deleteSuccess: {
|
|
title: '成功',
|
|
description: '账号备份删除成功。',
|
|
},
|
|
deleteError: {
|
|
title: '错误',
|
|
description: '删除备份失败:{{error}}',
|
|
},
|
|
},
|
|
cloud: {
|
|
title: '账号列表',
|
|
description: '管理您的 Google Gemini 账号池。',
|
|
autoSwitch: '自动切换',
|
|
addAccount: '添加账号',
|
|
syncFromIDE: '从 IDE 同步',
|
|
checkQuota: '立即检查配额',
|
|
polling: '已触发轮询',
|
|
authDialog: {
|
|
title: '添加 Google 账号',
|
|
description: '添加账号需要进行应用授权。',
|
|
openLogin: '打开登录页面',
|
|
authCode: '授权码',
|
|
placeholder: '粘贴以 4/ 开头的代码...',
|
|
instruction: '将打开默认浏览器进行 Google 登录授权,自动获取并保存 Token。',
|
|
verify: '验证并添加',
|
|
},
|
|
card: {
|
|
active: '活跃',
|
|
use: '使用',
|
|
rateLimited: '受限',
|
|
left: '剩余',
|
|
used: '已用',
|
|
unknown: '未知用户',
|
|
actions: '操作',
|
|
useAccount: '使用账号',
|
|
refresh: '刷新配额',
|
|
delete: '删除账号',
|
|
noQuota: '无配额数据',
|
|
},
|
|
list: {
|
|
noAccounts: '暂无云账号。',
|
|
},
|
|
toast: {
|
|
syncSuccess: {
|
|
title: '同步成功',
|
|
description: '已从 IDE 导入 {{email}}。',
|
|
},
|
|
syncFailed: {
|
|
title: '同步失败',
|
|
description: 'IDE 数据库中未找到活跃账号。',
|
|
},
|
|
addSuccess: '账号添加成功!',
|
|
addFailed: {
|
|
title: '添加账号失败',
|
|
},
|
|
quotaRefreshed: '配额已刷新',
|
|
refreshFailed: '刷新配额失败',
|
|
switched: {
|
|
title: '账号已切换!',
|
|
description: '正在重启 Antigravity...',
|
|
},
|
|
switchFailed: '切换账号失败',
|
|
deleted: '账号已删除',
|
|
deleteFailed: '删除账号失败',
|
|
deleteConfirm: '确定要删除此账号吗?',
|
|
autoSwitchOn: '自动切换已启用',
|
|
autoSwitchOff: '自动切换已禁用',
|
|
updateSettingsFailed: '更新设置失败',
|
|
},
|
|
batch: {
|
|
selected: '已选 {{count}} 项',
|
|
delete: '删除选中',
|
|
refresh: '刷新选中',
|
|
selectAll: '全选',
|
|
clear: '取消选择',
|
|
confirmDelete: '确定要删除选中的 {{count}} 个账号吗?',
|
|
},
|
|
},
|
|
proxy: {
|
|
title: 'API 反代',
|
|
description: '管理本地 API 代理服务。',
|
|
save: '保存设置',
|
|
copy: '复制',
|
|
regenerate: '重新生成',
|
|
regenerateConfirm: {
|
|
title: '重新生成 API 密钥?',
|
|
description: '这将立即废除当前 API 密钥。任何使用旧密钥的应用将无法继续工作。',
|
|
cancel: '取消',
|
|
confirm: '重新生成',
|
|
},
|
|
service: {
|
|
title: '服务状态',
|
|
description: '控制本地 API 代理服务器。',
|
|
running: '运行中',
|
|
stopped: '已停止',
|
|
start: '启动服务',
|
|
stop: '停止服务',
|
|
},
|
|
config: {
|
|
port: '监听端口',
|
|
timeout: '请求超时',
|
|
api_key: 'API 密钥',
|
|
auto_start: '随应用启动',
|
|
auto_start_desc: '应用启动时自动启动代理服务',
|
|
local_access: '局域网访问:',
|
|
no_token_warning: '⚠️ 未设置 API 密钥。服务对公网开放!',
|
|
show_key: '显示密钥',
|
|
hide_key: '隐藏密钥',
|
|
},
|
|
mapping: {
|
|
title: '模型映射',
|
|
description: '将 Claude 模型映射到 Gemini 模型进行路由。',
|
|
maps_to: '映射到',
|
|
restore: '恢复默认',
|
|
},
|
|
examples: {
|
|
title: '使用示例',
|
|
description: '调用本地 API 代理的示例命令。',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|