@viudes/windsurf-api 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +148 -0
- package/LICENSE +21 -0
- package/README.md +135 -0
- package/bin/windsurf-api.js +5 -0
- package/config.example.json +21 -0
- package/dist/app/cli.js +334 -0
- package/dist/app/index.js +286 -0
- package/dist/dashboard/data/contributors.json +337 -0
- package/dist/dashboard/i18n/en.json +1106 -0
- package/dist/dashboard/i18n/zh-CN.json +1106 -0
- package/dist/dashboard/index-sketch.html +3564 -0
- package/dist/dashboard/index.html +6327 -0
- package/install-ls.sh +174 -0
- package/package.json +69 -0
|
@@ -0,0 +1,1106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"name": "简体中文",
|
|
4
|
+
"code": "zh-CN"
|
|
5
|
+
},
|
|
6
|
+
|
|
7
|
+
"brand": {
|
|
8
|
+
"sub": "管理控制台"
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
"nav": {
|
|
12
|
+
"group": {
|
|
13
|
+
"overview": "概览",
|
|
14
|
+
"account": "账号",
|
|
15
|
+
"system": "系统",
|
|
16
|
+
"about": "关于"
|
|
17
|
+
},
|
|
18
|
+
"overview": "仪表盘",
|
|
19
|
+
"stats": "统计分析",
|
|
20
|
+
"windsurf-login": "登录取号",
|
|
21
|
+
"accounts": "账号管理",
|
|
22
|
+
"bans": "异常监测",
|
|
23
|
+
"models": "模型控制",
|
|
24
|
+
"proxy": "代理配置",
|
|
25
|
+
"logs": "运行日志",
|
|
26
|
+
"experimental": "实验性功能",
|
|
27
|
+
"credits": "致谢"
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
"pageTitle": {
|
|
31
|
+
"main": "WindsurfAPI bydwgx1337 控制台"
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
"page": {
|
|
35
|
+
"overview": "仪表盘",
|
|
36
|
+
"stats": "统计分析",
|
|
37
|
+
"windsurf-login": "登录取号",
|
|
38
|
+
"accounts": "账号管理",
|
|
39
|
+
"bans": "异常监测",
|
|
40
|
+
"models": "模型控制",
|
|
41
|
+
"proxy": "代理配置",
|
|
42
|
+
"logs": "运行日志",
|
|
43
|
+
"experimental": "实验性功能",
|
|
44
|
+
"credits": "致谢"
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
"pageSubtitle": {
|
|
48
|
+
"overview": "系统运行状态与关键指标概览",
|
|
49
|
+
"windsurf-login": "支持 Google / GitHub / 邮箱密码 三种方式登录 Windsurf 获取 API Key",
|
|
50
|
+
"accounts": "维护账号池,探测各账号订阅层级与可用模型",
|
|
51
|
+
"models": "配置模型访问策略,限制可用模型范围",
|
|
52
|
+
"proxy": "全局或按账号配置出口代理,独立代理将启动独立的语言服务器实例",
|
|
53
|
+
"logs": "通过 SSE 实时流式接收服务端日志",
|
|
54
|
+
"stats": "请求量、成功率、延迟分位数与账号/模型维度统计",
|
|
55
|
+
"bans": "追踪错误账号和异常状态",
|
|
56
|
+
"experimental": "尚未稳定的优化项;如果发现异常可以随时关闭",
|
|
57
|
+
"credits": "感谢以下朋友为项目提交 PR / 审计代码 / 修复问题"
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
"button": {
|
|
61
|
+
"cancel": "取消",
|
|
62
|
+
"confirm": "确认",
|
|
63
|
+
"forceOverride": "强制覆盖并更新",
|
|
64
|
+
"save": "保存",
|
|
65
|
+
"restart": "重启",
|
|
66
|
+
"updateAndRestart": "更新并重启"
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
"action": {
|
|
70
|
+
"checkUpdate": "检查更新",
|
|
71
|
+
"applyUpdate": "一键更新并重启",
|
|
72
|
+
"updateLsBinary": "更新 LS",
|
|
73
|
+
"restart": "重启",
|
|
74
|
+
"login": "登录",
|
|
75
|
+
"save": "保存",
|
|
76
|
+
"clear": "清除",
|
|
77
|
+
"cancel": "取消",
|
|
78
|
+
"confirm": "确认",
|
|
79
|
+
"delete": "删除",
|
|
80
|
+
"reset": "重置",
|
|
81
|
+
"clearPool": "清空对话池",
|
|
82
|
+
"refresh": "刷新",
|
|
83
|
+
"runNow": "立即测试",
|
|
84
|
+
"probe": "探测",
|
|
85
|
+
"probeTitle": "探测能力",
|
|
86
|
+
"enable": "启用",
|
|
87
|
+
"disable": "停用",
|
|
88
|
+
"copy": "复制",
|
|
89
|
+
"copyTitle": "点击复制",
|
|
90
|
+
"configure": "配置",
|
|
91
|
+
"test": "测试",
|
|
92
|
+
"readClipboard": "读取剪贴板",
|
|
93
|
+
"uploadJson": "上传 JSON",
|
|
94
|
+
"clearFile": "清除文件",
|
|
95
|
+
"batchImport": "批量导入并登录",
|
|
96
|
+
"paste": "粘贴",
|
|
97
|
+
"add": "添加",
|
|
98
|
+
"close": "关闭",
|
|
99
|
+
"edit": "编辑",
|
|
100
|
+
"selectAll": "全选",
|
|
101
|
+
"selectNone": "全不选",
|
|
102
|
+
"invert": "反选",
|
|
103
|
+
"showPassword": "显示/隐藏密码",
|
|
104
|
+
"revealKey": "点击显示并复制完整 API Key",
|
|
105
|
+
"importLocal": "从本地 Windsurf 导入"
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
"status": {
|
|
109
|
+
"active": "正常",
|
|
110
|
+
"disabled": "已禁用",
|
|
111
|
+
"error": "错误",
|
|
112
|
+
"running": "运行中",
|
|
113
|
+
"stopped": "已停止",
|
|
114
|
+
"success": "成功",
|
|
115
|
+
"failed": "失败",
|
|
116
|
+
"pending": "待处理",
|
|
117
|
+
"unknown": "未知",
|
|
118
|
+
"rateLimited": "限速中",
|
|
119
|
+
"loading": "加载中…",
|
|
120
|
+
"testing": "测试中…",
|
|
121
|
+
"saving": "保存中…",
|
|
122
|
+
"updateAndRestartHint": "更新并重启服务",
|
|
123
|
+
"proxySuccess": "✓ 连通成功 出口 IP {{ip}} · 耗时 {{latency}}ms",
|
|
124
|
+
"proxyFailed": "✗ 失败: {{error}} · {{latency}}ms",
|
|
125
|
+
"checkingUpdate": "正在检查更新…",
|
|
126
|
+
"updateAvailable": "发现新版本",
|
|
127
|
+
"currentVersion": "当前版本",
|
|
128
|
+
"remoteVersion": "远程版本",
|
|
129
|
+
"upToDate": "✓ 已是最新 ({{commit}}) · {{message}}",
|
|
130
|
+
"pullingRestarting": "正在拉取 + 重启…",
|
|
131
|
+
"cancelled": "已取消",
|
|
132
|
+
"noUpdateNeeded": "已是最新,无需更新",
|
|
133
|
+
"updateComplete": "更新完成 {{before}} → {{after}}",
|
|
134
|
+
"restarting": "服务正在后台重启 约 8 秒后自动刷新页面…",
|
|
135
|
+
"notGitRepo": "非 git 部署 — 一键更新不可用",
|
|
136
|
+
"notGitRepoHint": "如果你是通过 git clone 部署的,请确保 .git 目录随 WindsurfAPI 源码一起上传",
|
|
137
|
+
"selfUpdateUnavailable": "当前部署方式不支持一键更新",
|
|
138
|
+
"selfUpdateDockerHint": "Docker 部署请使用 docker compose pull && docker compose up -d 升级。要在 dashboard 里直接一键更新,可在 docker-compose.yml 里给 windsurf-api 服务加挂 `/var/run/docker.sock:/var/run/docker.sock`(注意:这等于把宿主机 root 权限交给容器,请评估安全后再开)。",
|
|
139
|
+
"dockerSelfUpdateBlocked": "Dashboard 一键 Docker 更新当前不可用:{{reason}} {{detail}}",
|
|
140
|
+
"dockerReady": "Docker 模式已就绪",
|
|
141
|
+
"dockerImage": "镜像:",
|
|
142
|
+
"dockerProject": "Compose 项目:",
|
|
143
|
+
"dockerUpdating": "已开始更新:拉取 {{image}},{{delay}} 秒后由 deployer 边车重建容器…",
|
|
144
|
+
"dockerSidecarStarted": "Deployer 容器 {{id}} 已启动,本页面将自动刷新",
|
|
145
|
+
"workingDirDirty": "工作区有本地修改",
|
|
146
|
+
"workingDirDirtyHint": "以下文件已被修改但未提交:<br>{{files}}<br>继续将用远程版本覆盖这些修改。",
|
|
147
|
+
"notFetched": "尚未获取",
|
|
148
|
+
"fetchFailed": "获取失败",
|
|
149
|
+
"clickToEditTier": "点击手动修改层级(探测异常时用)"
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
"tier": {
|
|
153
|
+
"pro": "PRO",
|
|
154
|
+
"free": "FREE",
|
|
155
|
+
"expired": "已过期",
|
|
156
|
+
"unknown": "未知",
|
|
157
|
+
"expiredLabel": "已过期"
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
"creditsBar": {
|
|
161
|
+
"daily": "每日配额",
|
|
162
|
+
"weekly": "每周配额",
|
|
163
|
+
"monthly": "每月额度",
|
|
164
|
+
"prompt": "提示词额度",
|
|
165
|
+
"dailyShort": "日",
|
|
166
|
+
"weeklyShort": "周",
|
|
167
|
+
"promptShort": "词",
|
|
168
|
+
"columnTitle": "配额使用情况",
|
|
169
|
+
"columnTooltip": "两条进度条分别代表:\n日 — 每日高级请求剩余百分比(重置频繁)\n周 — 每周高级请求剩余百分比(Trial 账号重点看这条)\n\n数值越高 = 剩余越多 = 越安全\n悬停单条进度条可查看重置时间",
|
|
170
|
+
"dailyDetail": "每日剩余 {{pct}}%(于 {{reset}} 重置)",
|
|
171
|
+
"weeklyDetail": "每周剩余 {{pct}}%(于 {{reset}} 重置)",
|
|
172
|
+
"promptDetail": "本月提示词剩余 {{remain}} / {{limit}}({{pct}}%)",
|
|
173
|
+
"dailyNA": "Windsurf 未返回每日配额数据",
|
|
174
|
+
"weeklyNA": "Windsurf 未返回每周配额数据",
|
|
175
|
+
"promptNA": "该账号无提示词额度数据",
|
|
176
|
+
"noResetTime": "重置时间未知"
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
"section": {
|
|
180
|
+
"banStatus": {
|
|
181
|
+
"title": "健康状态"
|
|
182
|
+
},
|
|
183
|
+
"lsStatus": {
|
|
184
|
+
"title": "Language Server",
|
|
185
|
+
"desc": "语言服务器实例状态"
|
|
186
|
+
},
|
|
187
|
+
"oauthLogin": {
|
|
188
|
+
"title": "快捷登录(推荐)",
|
|
189
|
+
"desc": "用你的 Google 或 GitHub 账号直接登录 Windsurf 无需密码"
|
|
190
|
+
},
|
|
191
|
+
"emailLogin": {
|
|
192
|
+
"title": "邮箱密码登录",
|
|
193
|
+
"desc": "仅限邮箱+密码注册的账号 第三方登录请用上面的按钮;支持单个登录或按「邮箱 密码」格式批量导入"
|
|
194
|
+
},
|
|
195
|
+
"loginProxy": {
|
|
196
|
+
"title": "登录代理(可选)",
|
|
197
|
+
"desc": "为本次登录指定代理;留空则使用全局代理设置。代理生效后账号的后续聊天请求也会经此代理出站"
|
|
198
|
+
},
|
|
199
|
+
"loginHistory": {
|
|
200
|
+
"title": "登录历史",
|
|
201
|
+
"desc": "本地记录最近 50 条登录操作"
|
|
202
|
+
},
|
|
203
|
+
"addAccount": {
|
|
204
|
+
"title": "添加账号",
|
|
205
|
+
"desc": "支持 API Key 或 Auth Token 两种方式",
|
|
206
|
+
"hint": "推荐用 Token 方式添加账号 点 {{link}} 登录后复制 Token 粘贴到下面就行 所有登录方式(邮箱/Google/GitHub)都能用"
|
|
207
|
+
},
|
|
208
|
+
"accountList": {
|
|
209
|
+
"title": "账号列表",
|
|
210
|
+
"desc": "点击探测按钮可单独更新某个账号的能力信息"
|
|
211
|
+
},
|
|
212
|
+
"modelPolicy": {
|
|
213
|
+
"title": "访问策略",
|
|
214
|
+
"desc": "选择「全部允许」不限制;「白名单」只允许列出的模型;「黑名单」屏蔽列出的模型"
|
|
215
|
+
},
|
|
216
|
+
"modelList": {
|
|
217
|
+
"title": "模型清单",
|
|
218
|
+
"titleAllow": "允许的模型",
|
|
219
|
+
"titleBlock": "屏蔽的模型",
|
|
220
|
+
"descAllow": "只有选中的模型可以使用,未选中的模型将返回 403 错误",
|
|
221
|
+
"descBlock": "选中的模型将被屏蔽,未选中的模型可正常使用",
|
|
222
|
+
"search": "搜索模型...",
|
|
223
|
+
"provider": "供应商"
|
|
224
|
+
},
|
|
225
|
+
"globalProxy": {
|
|
226
|
+
"title": "全局代理",
|
|
227
|
+
"desc": "未配置独立代理的账号将使用此配置"
|
|
228
|
+
},
|
|
229
|
+
"accountProxy": {
|
|
230
|
+
"title": "账号独立代理",
|
|
231
|
+
"desc": "为特定账号设置专属代理;每个独立代理会启动独立 LS 实例"
|
|
232
|
+
},
|
|
233
|
+
"cascadeReuse": {
|
|
234
|
+
"title": "Cascade 对话复用",
|
|
235
|
+
"desc": "多轮对话时复用同一个 cascade_id,只把最新一条 user 消息发给 Windsurf,让服务端维持上下文缓存。命中时可显著降低 TTFB 与上传体积;未命中或账号/LS 变更会自动回退到新会话。需要客户端保留完整历史并按顺序追加(如 new-api、OpenWebUI)。注意:此开关只控制 cascade_id 的跨请求复用,不控制是否走 Cascade 模式;工具调用请求(Claude Code / Cline / Cursor)因每轮内容变化自动跳过复用,不受此开关影响。",
|
|
236
|
+
"enable": "启用 Cascade 对话复用",
|
|
237
|
+
"hint": "默认开启。关闭后每轮仍走 Cascade,只是不再复用上一轮的 session。对当前对话池立即生效。"
|
|
238
|
+
},
|
|
239
|
+
"identityPrompt": {
|
|
240
|
+
"title": "模型身份提示词",
|
|
241
|
+
"desc": "在每个请求开头注入模型身份系统提示词。",
|
|
242
|
+
"enable": "启用模型身份注入",
|
|
243
|
+
"hint": "默认开启;关闭后下面的模板不起作用",
|
|
244
|
+
"templateHint": "每个厂商的模板可编辑,{{model}} 占位符会被替换成请求的模型名(例如 claude-opus-4.6)。"
|
|
245
|
+
},
|
|
246
|
+
"identityInjection": {
|
|
247
|
+
"title": "模型身份注入",
|
|
248
|
+
"desc": "开启后在每个请求最前面注入一条系统提示词,覆盖 Cascade 自带的 Windsurf 身份;下面每个厂商的模板可自定义,保存后立即生效"
|
|
249
|
+
},
|
|
250
|
+
"systemPrompts": {
|
|
251
|
+
"title": "系统提示词",
|
|
252
|
+
"desc": "工具注入、对话模式等内置提示词模板。修改后立即生效,点「重置」恢复默认。"
|
|
253
|
+
},
|
|
254
|
+
"credentials": {
|
|
255
|
+
"title": "凭证管理",
|
|
256
|
+
"desc": "运行时改 API_KEY 和 Dashboard 密码,写入 runtime-config.json 立即生效,不用重启容器或重读 .env。改完之后下一次请求需要用新值;当前会话会要求重新登录。"
|
|
257
|
+
},
|
|
258
|
+
"droughtRestrict": {
|
|
259
|
+
"title": "配额低水位时屏蔽 premium 模型",
|
|
260
|
+
"desc": "所有账号本周配额都低于 5% 时,对 premium 模型(claude-opus / claude-sonnet 等)请求直接返 503,避免上游 rate-limit 烧最后一点配额。免费层模型(gemini-2.5-flash 等)保持可用。关闭后即使在 drought mode 也照常下发,accept 上游可能立即 429。",
|
|
261
|
+
"enable": "启用 drought-mode premium 屏蔽",
|
|
262
|
+
"hint": "默认开启。drought 状态由账号池自动判定(GET /dashboard/api/drought 看实时值)。"
|
|
263
|
+
},
|
|
264
|
+
"quietWindow": {
|
|
265
|
+
"title": "空档自动更新",
|
|
266
|
+
"desc": "每分钟看一次最近 5 分钟内的请求量,连续在阈值以下就自动 docker compose pull + recreate。冷启动 10 分钟内不动;成功后 24 小时冷却;失败不冷却。需要 /var/run/docker.sock 挂进容器(默认 docker-compose 已挂)。",
|
|
267
|
+
"enable": "启用空档自动更新",
|
|
268
|
+
"hint": "默认关闭。当前状态:"
|
|
269
|
+
},
|
|
270
|
+
"stickyByUser": {
|
|
271
|
+
"title": "粘性会话按用户绑定",
|
|
272
|
+
"desc": "开启后,同一 user 无论请求什么模型都会固定绑定到同一个上游账号。关闭时按 (user, model) 二元组分别绑定(不同模型可能分配不同账号,适合账号有模型限制的场景)。需启用 STICKY_SESSION_ENABLED=1 才生效。",
|
|
273
|
+
"enable": "忽略模型维度",
|
|
274
|
+
"hint": "默认关闭。开启后 user_a 下的 opus/haiku/gemini 全部共享同一个绑定。"
|
|
275
|
+
},
|
|
276
|
+
"stickyNoFallback": {
|
|
277
|
+
"title": "粘性会话禁止回退",
|
|
278
|
+
"desc": "开启后,粘性会话绑定的账号如果遇到限流/错误/模型不可用,不会自动切换到账号池中的其他账号,而是直接将错误返回给客户端。这样可以确保每个 user 严格只消耗自己绑定账号的额度。需启用 STICKY_SESSION_ENABLED=1 才生效。",
|
|
279
|
+
"enable": "禁止账号回退",
|
|
280
|
+
"hint": "默认关闭。开启后绑定账号失败时不会切换到其他账号消耗额度。"
|
|
281
|
+
},
|
|
282
|
+
"skin": {
|
|
283
|
+
"title": "界面风格",
|
|
284
|
+
"desc": "控制台外观。默认现代风;手绘草稿风是实验性简化布局。切换后页面会刷新。"
|
|
285
|
+
},
|
|
286
|
+
"lsPool": {
|
|
287
|
+
"title": "语言服务器池",
|
|
288
|
+
"desc": "{{count}} 个 LS 实例 · 每个独立代理对应一个进程",
|
|
289
|
+
"sectionTitle": "语言服务器池",
|
|
290
|
+
"sectionDesc": "{{count}} 个 LS 实例 · 每个独立代理对应一个进程",
|
|
291
|
+
"port": "端口",
|
|
292
|
+
"defaultInstance": "默认实例",
|
|
293
|
+
"noProxy": "无代理"
|
|
294
|
+
},
|
|
295
|
+
"modelStats": {
|
|
296
|
+
"title": "模型使用统计",
|
|
297
|
+
"desc": "按模型聚合:请求量、成功率、平均耗时与 p50 / p95 延迟分位数"
|
|
298
|
+
},
|
|
299
|
+
"accountStats": {
|
|
300
|
+
"title": "账号维度统计",
|
|
301
|
+
"desc": "每个账号 ID 前 8 位的请求量与成功率"
|
|
302
|
+
},
|
|
303
|
+
"accountHealth": {
|
|
304
|
+
"title": "账号健康状况"
|
|
305
|
+
},
|
|
306
|
+
"requestChart": {
|
|
307
|
+
"title": "请求量时间序列",
|
|
308
|
+
"subtitle": "切换图表类型和时间范围 · 悬停查看具体数值",
|
|
309
|
+
"typeArea": "面积图",
|
|
310
|
+
"typeLine": "折线图",
|
|
311
|
+
"typeBar": "柱状图",
|
|
312
|
+
"typeStacked": "堆叠图",
|
|
313
|
+
"metricAll": "全部指标",
|
|
314
|
+
"metricRequests": "请求量",
|
|
315
|
+
"metricErrors": "错误数",
|
|
316
|
+
"metricSuccess": "成功数",
|
|
317
|
+
"legendRequests": "请求",
|
|
318
|
+
"legendSuccess": "成功",
|
|
319
|
+
"legendErrors": "错误",
|
|
320
|
+
"tooltipTime": "时间",
|
|
321
|
+
"tooltipRequests": "请求",
|
|
322
|
+
"tooltipErrors": "错误",
|
|
323
|
+
"tooltipSuccess": "成功",
|
|
324
|
+
"tooltipRate": "成功率"
|
|
325
|
+
},
|
|
326
|
+
"modelPie": {
|
|
327
|
+
"title": "模型请求量分布",
|
|
328
|
+
"desc": "前 8 个模型的请求量占比"
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
"help": {
|
|
333
|
+
"token": "推荐用 Token 方式添加账号 点 {{link}} 登录后复制 Token 粘贴到下面就行 所有登录方式(邮箱/Google/GitHub)都能用",
|
|
334
|
+
"tokenGuide": "推荐用 Token 方式添加账号 点 ",
|
|
335
|
+
"tokenGuideEnd": " 登录后复制 Token 粘贴到下面就行 所有登录方式(邮箱/Google/GitHub)都能用"
|
|
336
|
+
},
|
|
337
|
+
|
|
338
|
+
"skin": {
|
|
339
|
+
"modern": "默认现代风",
|
|
340
|
+
"sketch": "手绘草稿风(实验)",
|
|
341
|
+
"hint": "选择后立即写入 cookie 并刷新"
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
"field": {
|
|
345
|
+
"email": {
|
|
346
|
+
"label": "邮箱",
|
|
347
|
+
"placeholder": "your-email@example.com"
|
|
348
|
+
},
|
|
349
|
+
"password": {
|
|
350
|
+
"label": "密码",
|
|
351
|
+
"placeholder": "••••••••"
|
|
352
|
+
},
|
|
353
|
+
"type": {
|
|
354
|
+
"label": "类型"
|
|
355
|
+
},
|
|
356
|
+
"tier": {
|
|
357
|
+
"label": "层级"
|
|
358
|
+
},
|
|
359
|
+
"host": {
|
|
360
|
+
"label": "主机",
|
|
361
|
+
"placeholder": "proxy.example.com"
|
|
362
|
+
},
|
|
363
|
+
"port": {
|
|
364
|
+
"label": "端口",
|
|
365
|
+
"placeholder": "8080"
|
|
366
|
+
},
|
|
367
|
+
"username": {
|
|
368
|
+
"label": "用户名",
|
|
369
|
+
"placeholder": "可选"
|
|
370
|
+
},
|
|
371
|
+
"passwordProxy": {
|
|
372
|
+
"label": "密码",
|
|
373
|
+
"placeholder": "可选"
|
|
374
|
+
},
|
|
375
|
+
"key": {
|
|
376
|
+
"label": "Key / Token",
|
|
377
|
+
"placeholder": "粘贴 Auth Token(从 windsurf.com/show-auth-token 获取)"
|
|
378
|
+
},
|
|
379
|
+
"label": {
|
|
380
|
+
"label": "标签",
|
|
381
|
+
"placeholder": "可选"
|
|
382
|
+
},
|
|
383
|
+
"proxy": {
|
|
384
|
+
"label": "代理",
|
|
385
|
+
"placeholder": "http://proxy:8080 或 socks5://user:pass@host:port(可选)",
|
|
386
|
+
"hint": "留空则使用全局代理设置"
|
|
387
|
+
},
|
|
388
|
+
"batchInput": {
|
|
389
|
+
"label": "批量导入",
|
|
390
|
+
"hint": "每行一个账号。支持:邮箱 密码、邮箱----密码、邮箱|密码、邮箱,密码、邮箱:密码。也支持上传 JSON 文件。代理可选,格式:[代理] 邮箱 密码。"
|
|
391
|
+
},
|
|
392
|
+
"proxyType": {
|
|
393
|
+
"label": "类型"
|
|
394
|
+
},
|
|
395
|
+
"proxyHost": {
|
|
396
|
+
"label": "主机",
|
|
397
|
+
"placeholder": "留空=使用全局"
|
|
398
|
+
},
|
|
399
|
+
"provider": {
|
|
400
|
+
"label": "供应商",
|
|
401
|
+
"all": "全部供应商"
|
|
402
|
+
},
|
|
403
|
+
"proxyUser": {
|
|
404
|
+
"placeholder": "代理认证用户名"
|
|
405
|
+
},
|
|
406
|
+
"proxyPass": {
|
|
407
|
+
"placeholder": "代理认证密码"
|
|
408
|
+
},
|
|
409
|
+
"searchProvider": {
|
|
410
|
+
"placeholder": "搜索提供商..."
|
|
411
|
+
},
|
|
412
|
+
"search": {
|
|
413
|
+
"label": "搜索",
|
|
414
|
+
"placeholder": "搜索..."
|
|
415
|
+
},
|
|
416
|
+
"searchModel": {
|
|
417
|
+
"label": "搜索模型",
|
|
418
|
+
"placeholder": "输入模型名称筛选..."
|
|
419
|
+
},
|
|
420
|
+
"defaultModel": {
|
|
421
|
+
"label": "默认模型",
|
|
422
|
+
"placeholder": "留空则拒绝清单外请求",
|
|
423
|
+
"hint": "清单外的模型请求会改用此模型,而不是被拒绝。留空表示拒绝(默认)。"
|
|
424
|
+
},
|
|
425
|
+
"providerFilter": {
|
|
426
|
+
"label": "供应商"
|
|
427
|
+
},
|
|
428
|
+
"logLevel": {
|
|
429
|
+
"label": "日志级别"
|
|
430
|
+
},
|
|
431
|
+
"identitySearch": {
|
|
432
|
+
"placeholder": "搜索提供商..."
|
|
433
|
+
},
|
|
434
|
+
"autoScroll": "自动滚动",
|
|
435
|
+
"autoAdd": "登录成功自动加入账号池"
|
|
436
|
+
},
|
|
437
|
+
|
|
438
|
+
"table": {
|
|
439
|
+
"header": {
|
|
440
|
+
"time": "时间",
|
|
441
|
+
"email": "邮箱",
|
|
442
|
+
"status": "状态",
|
|
443
|
+
"proxy": "代理",
|
|
444
|
+
"action": "操作",
|
|
445
|
+
"id": "ID",
|
|
446
|
+
"label": "标签",
|
|
447
|
+
"tier": "层级",
|
|
448
|
+
"rpm": "RPM",
|
|
449
|
+
"credits": "余额",
|
|
450
|
+
"models": "可用模型",
|
|
451
|
+
"error": "错误",
|
|
452
|
+
"lastUsed": "最后使用",
|
|
453
|
+
"key": "Key",
|
|
454
|
+
"accountId": "账号 ID",
|
|
455
|
+
"account": "账号",
|
|
456
|
+
"requests": "请求",
|
|
457
|
+
"success": "成功",
|
|
458
|
+
"errors": "错误",
|
|
459
|
+
"successRate": "成功率",
|
|
460
|
+
"avg": "平均",
|
|
461
|
+
"p50": "p50",
|
|
462
|
+
"p95": "p95",
|
|
463
|
+
"errorCount": "错误数",
|
|
464
|
+
"model": "模型",
|
|
465
|
+
"note": "说明"
|
|
466
|
+
},
|
|
467
|
+
"empty": {
|
|
468
|
+
"loginHistory": "暂无登录记录",
|
|
469
|
+
"accounts": "暂无账号,请先添加",
|
|
470
|
+
"accountNotFound": "账号不存在",
|
|
471
|
+
"probeFailed": "探测失败",
|
|
472
|
+
"noRequestData": "暂无请求数据",
|
|
473
|
+
"noAccountRequestData": "暂无账号级请求数据",
|
|
474
|
+
"noData": "暂无数据",
|
|
475
|
+
"noValidAccounts": "暂无可用账号可用于路由",
|
|
476
|
+
"accountsProxy": "暂无账号",
|
|
477
|
+
"modelStats": "暂无模型统计数据",
|
|
478
|
+
"accountStats": "暂无账号统计数据",
|
|
479
|
+
"banList": "暂无异常账号",
|
|
480
|
+
"models": "没有符合的模型",
|
|
481
|
+
"credits": "加载中…"
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
"card": {
|
|
486
|
+
"activeAccounts": {
|
|
487
|
+
"title": "活跃账号",
|
|
488
|
+
"subtitle": "{{total}} 个总账号 · {{error}} 异常"
|
|
489
|
+
},
|
|
490
|
+
"totalRequests": {
|
|
491
|
+
"title": "总请求数",
|
|
492
|
+
"subtitle": "成功率 {{rate}}%"
|
|
493
|
+
},
|
|
494
|
+
"uptime": {
|
|
495
|
+
"title": "运行时间",
|
|
496
|
+
"subtitle": "启动于 {{time}}"
|
|
497
|
+
},
|
|
498
|
+
"languageServer": {
|
|
499
|
+
"title": "Language Server",
|
|
500
|
+
"running": "运行中",
|
|
501
|
+
"stopped": "已停止",
|
|
502
|
+
"subtitle": "{{count}} 个实例 · 端口 {{port}}"
|
|
503
|
+
},
|
|
504
|
+
"responseCache": {
|
|
505
|
+
"title": "响应缓存",
|
|
506
|
+
"subtitle": "{{hits}} 命中 / {{misses}} 未命中 · {{size}}/{{max}} 条"
|
|
507
|
+
},
|
|
508
|
+
"tokens": {
|
|
509
|
+
"title": "Token 用量分布",
|
|
510
|
+
"subtitle": {
|
|
511
|
+
"empty": "等首个完整请求结束才会有数据"
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
"banStats": {
|
|
515
|
+
"title": "健康概览"
|
|
516
|
+
},
|
|
517
|
+
"abnormalAccounts": {
|
|
518
|
+
"title": "异常账号",
|
|
519
|
+
"subtitle": "共 {{count}} 个账号"
|
|
520
|
+
},
|
|
521
|
+
"disabled": {
|
|
522
|
+
"title": "已停用",
|
|
523
|
+
"subtitle": "自动错误停用"
|
|
524
|
+
},
|
|
525
|
+
"rateLimit": {
|
|
526
|
+
"title": "限流中",
|
|
527
|
+
"badge": "限流中",
|
|
528
|
+
"subtitle": "暂时不参与调度"
|
|
529
|
+
},
|
|
530
|
+
"stats": {
|
|
531
|
+
"title": "总请求",
|
|
532
|
+
"subtitle": "运行 {{time}}"
|
|
533
|
+
},
|
|
534
|
+
"success": {
|
|
535
|
+
"title": "成功",
|
|
536
|
+
"subtitle": "成功率 {{rate}}%"
|
|
537
|
+
},
|
|
538
|
+
"errors": {
|
|
539
|
+
"title": "错误",
|
|
540
|
+
"subtitle": "失败率 {{rate}}%"
|
|
541
|
+
},
|
|
542
|
+
"p95Latency": {
|
|
543
|
+
"title": "平均 p95 延迟",
|
|
544
|
+
"subtitle": "{{count}} 个模型"
|
|
545
|
+
},
|
|
546
|
+
"hitRate": {
|
|
547
|
+
"title": "命中率",
|
|
548
|
+
"subtitle": "{{hits}} 命中 / {{misses}} 未命中"
|
|
549
|
+
},
|
|
550
|
+
"poolSize": {
|
|
551
|
+
"title": "对话池",
|
|
552
|
+
"subtitle": "上限 {{max}} · TTL {{ttl}} 分钟"
|
|
553
|
+
},
|
|
554
|
+
"stores": {
|
|
555
|
+
"title": "存储次数",
|
|
556
|
+
"subtitle": "过期 {{expired}} · 淘汰 {{evicted}}"
|
|
557
|
+
},
|
|
558
|
+
"defaultInstance": "默认实例",
|
|
559
|
+
"noProxy": "无代理",
|
|
560
|
+
"restarts": "重启",
|
|
561
|
+
"custom": "已自定义"
|
|
562
|
+
},
|
|
563
|
+
|
|
564
|
+
"login": {
|
|
565
|
+
"title": "控制台登录",
|
|
566
|
+
"subtitle": "请输入管理密码以继续",
|
|
567
|
+
"passwordPlaceholder": "Dashboard 密码",
|
|
568
|
+
"lockedTitle": "Dashboard 已锁定",
|
|
569
|
+
"lockedDesc": "此实例绑定在公网/0.0.0.0 上但没有设 <code>DASHBOARD_PASSWORD</code>,v2.0.55 起此场景 fail-closed 不再用 API_KEY 当回退。",
|
|
570
|
+
"lockedFix": "修法:",
|
|
571
|
+
"lockedDocs": "详见",
|
|
572
|
+
"button": "登 录",
|
|
573
|
+
"checking": "验证中…",
|
|
574
|
+
"wrong": "密码不正确",
|
|
575
|
+
"empty": "请输入密码",
|
|
576
|
+
"locked": "后端未配置密码:请在服务端设置 DASHBOARD_PASSWORD 或 API_KEY 环境变量并重启",
|
|
577
|
+
"networkError": "无法连接服务器"
|
|
578
|
+
},
|
|
579
|
+
|
|
580
|
+
"range": {
|
|
581
|
+
"6h": "6小时",
|
|
582
|
+
"24h": "24小时",
|
|
583
|
+
"72h": "72小时",
|
|
584
|
+
"7d": "7天",
|
|
585
|
+
"30d": "30天",
|
|
586
|
+
"all": "全部",
|
|
587
|
+
"custom": "自定义",
|
|
588
|
+
"customTitle": "自定义日期范围",
|
|
589
|
+
"customStart": "起始日期",
|
|
590
|
+
"customEnd": "结束日期",
|
|
591
|
+
"customApply": "应用",
|
|
592
|
+
"customCancel": "取消",
|
|
593
|
+
"customHint": "最多显示最近 30 天数据"
|
|
594
|
+
},
|
|
595
|
+
|
|
596
|
+
"credits": {
|
|
597
|
+
"contributors": "核心贡献者",
|
|
598
|
+
"history": "贡献历史 · {{count}} 项",
|
|
599
|
+
"contributionDetails": "贡献详情",
|
|
600
|
+
"cta": {
|
|
601
|
+
"title": "想加入这份名单?",
|
|
602
|
+
"desc": "欢迎到 GitHub 提 issue 或 pull request — 不管是修 bug、加模型、改 UI 还是发现安全问题,都会被记录在这里。",
|
|
603
|
+
"issue": "提 issue",
|
|
604
|
+
"pr": "提 PR"
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
|
|
608
|
+
"experimental": {
|
|
609
|
+
"enable": "启用",
|
|
610
|
+
"disable": "禁用",
|
|
611
|
+
"cascadeReuse": {
|
|
612
|
+
"title": "Cascade 对话复用",
|
|
613
|
+
"desc": "多轮对话时复用同一个 cascade_id,只把最新一条 user 消息发给 Windsurf,让服务端维持上下文缓存。命中时可显著降低 TTFB 与上传体积;未命中或账号/LS 变更会自动回退到新会话。需要客户端保留完整历史并按顺序追加(如 new-api、OpenWebUI)。",
|
|
614
|
+
"enable": "启用 Cascade 对话复用",
|
|
615
|
+
"hint": "默认关闭。开启后对当前对话池立即生效。"
|
|
616
|
+
},
|
|
617
|
+
"identityPrompt": {
|
|
618
|
+
"title": "启用模型身份注入",
|
|
619
|
+
"desc": "默认开启;关闭后下面的模板不起作用。"
|
|
620
|
+
},
|
|
621
|
+
"templateHint": "每个厂商的模板可编辑,{{model}} 占位符会被替换成请求的模型名(例如 claude-opus-4.6)。",
|
|
622
|
+
"clearPool": "清空对话池",
|
|
623
|
+
"refresh": "刷新",
|
|
624
|
+
"noMatch": "无匹配",
|
|
625
|
+
"restoreDefault": "恢复默认",
|
|
626
|
+
"save": "保存",
|
|
627
|
+
"default": "默认",
|
|
628
|
+
"toolReinforcement": "工具调用格式指引",
|
|
629
|
+
"communicationWithTools": "有工具时的通信指令",
|
|
630
|
+
"communicationNoTools": "无工具时的通信指令",
|
|
631
|
+
"promptEmpty": "模板不能为空",
|
|
632
|
+
"missingPlaceholder": "缺少 {model} 占位符",
|
|
633
|
+
"missingPlaceholderDesc": "保存后该厂商的模型名将无法被替换进提示词。确定继续?",
|
|
634
|
+
"restored": "已恢复"
|
|
635
|
+
},
|
|
636
|
+
|
|
637
|
+
"drought": {
|
|
638
|
+
"title": "配额预警:",
|
|
639
|
+
"body": "所有账号本周配额都低于阈值,建议补账号或等待重置"
|
|
640
|
+
},
|
|
641
|
+
|
|
642
|
+
"credentials": {
|
|
643
|
+
"apiKey": "API_KEY",
|
|
644
|
+
"dashboardPassword": "Dashboard 密码",
|
|
645
|
+
"apiKeyPlaceholder": "新 API_KEY(≥ 8 字符;留空清除运行时覆盖)",
|
|
646
|
+
"dashboardPwPlaceholder": "新 Dashboard 密码(≥ 8 字符;留空清除运行时覆盖)",
|
|
647
|
+
"show": "显示/隐藏",
|
|
648
|
+
"save": "保存",
|
|
649
|
+
"saved": "已保存",
|
|
650
|
+
"set": "已设置",
|
|
651
|
+
"unset": "未设置",
|
|
652
|
+
"apiKeyHint": "改完后所有 chat 客户端要换成新 KEY;旧 KEY 立即失效。",
|
|
653
|
+
"dashboardPwHint": "用 scrypt 派生哈希存盘;改完之后会自动登出当前会话,需要用新密码重登。",
|
|
654
|
+
"bruteForceHint": "为防暴破:同一 IP 连续 5 次 dashboard 登录失败会被锁 30 分钟(v2.0.56 起)。",
|
|
655
|
+
"confirmSave": "改完之后旧值立即失效,要继续吗?",
|
|
656
|
+
"confirmClear": "清除运行时覆盖,回退 .env 值?"
|
|
657
|
+
},
|
|
658
|
+
|
|
659
|
+
"confirm": {
|
|
660
|
+
"restartTitle": "重启 Language Server",
|
|
661
|
+
"restartDesc": "进行中的请求将会失败,确定要继续吗?",
|
|
662
|
+
"updateLsTitle": "更新 LS Binary",
|
|
663
|
+
"updateLsDesc": "从 WindsurfAPI / Windsurf 桌面 LS / Exafunction GitHub release 下载最新 language_server 并重启 LS 池。期间正在进行的请求会失败一次。",
|
|
664
|
+
"updateLsButton": "更新",
|
|
665
|
+
"restoreDefaultDesc": "恢复到默认?",
|
|
666
|
+
"clearPoolDesc": "当前所有进行中的 Cascade 会话都将被清除,确定继续吗?"
|
|
667
|
+
},
|
|
668
|
+
|
|
669
|
+
"modal": {
|
|
670
|
+
"blockedModels": {
|
|
671
|
+
"title": "编辑可用模型 — {{email}}",
|
|
672
|
+
"hint": "勾选 = 可用;取消 = 对该账号禁用",
|
|
673
|
+
"enabled": "已启用",
|
|
674
|
+
"saved": "已保存:启用 {{enabled}} / 禁用 {{disabled}}",
|
|
675
|
+
"saving": "保存中...",
|
|
676
|
+
"total": "总计"
|
|
677
|
+
},
|
|
678
|
+
"restartLS": {
|
|
679
|
+
"title": "重启 Language Server",
|
|
680
|
+
"desc": "进行中的请求将会失败,确定要继续吗?"
|
|
681
|
+
},
|
|
682
|
+
"deleteAccount": {
|
|
683
|
+
"title": "删除账号",
|
|
684
|
+
"desc": "此操作不可撤销,确定要删除该账号吗?"
|
|
685
|
+
},
|
|
686
|
+
"resetStats": {
|
|
687
|
+
"title": "重置统计",
|
|
688
|
+
"desc": "清空所有统计数据?"
|
|
689
|
+
},
|
|
690
|
+
"overrideTier": {
|
|
691
|
+
"title": "手动设置账号层级",
|
|
692
|
+
"desc": "当前:{{current}}。系统优先按 Windsurf 上游的 cascade_allowed_models_config 路由(每个号实际能用什么模型上游说了算,常见免费号会含 GLM / SWE / Kimi 等)。Pro 试用偶尔被探测错(issue #8)时手动改成 pro 即可强制解锁所有模型。",
|
|
693
|
+
"options": {
|
|
694
|
+
"pro": "Pro(强制解锁所有模型)",
|
|
695
|
+
"free": "Free(按上游 allowlist 路由)",
|
|
696
|
+
"unknown": "Unknown(让系统重新判定)"
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"applyUpdate": {
|
|
700
|
+
"title": "一键更新并重启",
|
|
701
|
+
"desc": "将执行 git pull 并重启 PM2。重启期间 dashboard 会短暂不可用(约 5-10 秒)。确定继续?"
|
|
702
|
+
},
|
|
703
|
+
"dirtyWorktree": {
|
|
704
|
+
"title": "工作区有本地修改",
|
|
705
|
+
"desc": "以下文件已被修改但未提交:<br><br><code>{{files}}</code><br>继续将用远程版本覆盖这些修改。非 git 部署(SFTP / 压缩包)请点强制覆盖。",
|
|
706
|
+
"forceUpdate": "强制覆盖并更新"
|
|
707
|
+
},
|
|
708
|
+
"configureProxy": {
|
|
709
|
+
"title": "配置账号代理",
|
|
710
|
+
"desc": "为账号 {{label}} 设置独立代理"
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
|
|
714
|
+
"oauth": {
|
|
715
|
+
"tryAnotherWay": "换个方式试试",
|
|
716
|
+
"google": "Google 登录",
|
|
717
|
+
"github": "GitHub 登录",
|
|
718
|
+
"copyAuthToken": "复制 Auth Token",
|
|
719
|
+
"pasteToken": "去账号管理粘贴 Token",
|
|
720
|
+
"inlineTokenTitle": "或者直接粘贴 Auth Token(推荐 OAuth-only 账号用这个)",
|
|
721
|
+
"inlineTokenDesc": "点左边按钮在新 tab 打开 windsurf.com → 用 Google/GitHub 登录 → 页面会显示 Auth Token → 复制粘到右边输入框 → 点添加",
|
|
722
|
+
"openWindsurfToken": "打开 windsurf.com 拿 Token",
|
|
723
|
+
"tokenPlaceholder": "粘贴 Auth Token...",
|
|
724
|
+
"addWithToken": "用 Token 添加",
|
|
725
|
+
"status": {
|
|
726
|
+
"loading": "正在通过 {{provider}} 登录...",
|
|
727
|
+
"success": "登录成功 {{email}} 已加入账号池",
|
|
728
|
+
"codeium": "{{provider}} 认证成功 正在注册 Codeium...",
|
|
729
|
+
"firebaseError": "Firebase SDK 加载失败 请刷新页面重试",
|
|
730
|
+
"loggingIn": "正在通过 {{label}} 登录...",
|
|
731
|
+
"codeiumRegistering": "{{label}} 认证成功 正在注册 Codeium...",
|
|
732
|
+
"loginSuccess": "登录成功 {{email}} 已加入账号池",
|
|
733
|
+
"loginFailed": "{{label}} 登录失败: {{error}}",
|
|
734
|
+
"originBlocked": "{{label}} OAuth 被 Firebase 拒绝了当前 Dashboard 来源。请从 windsurf.com/show-auth-token 复制 Auth Token 后在账号管理里添加。"
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
|
|
738
|
+
"update": {
|
|
739
|
+
"checking": "正在检查更新...",
|
|
740
|
+
"newVersion": "发现新版本",
|
|
741
|
+
"current": "当前",
|
|
742
|
+
"remote": "远程",
|
|
743
|
+
"latest": "已是最新",
|
|
744
|
+
"applying": "正在拉取 + 重启...",
|
|
745
|
+
"complete": "更新完成",
|
|
746
|
+
"restarting": "服务正在后台重启 约 8 秒后自动刷新页面...",
|
|
747
|
+
"cancelled": "已取消",
|
|
748
|
+
"notGit": "此实例不是 git 部署 一键更新不可用",
|
|
749
|
+
"notGitDesc": "如果你用 git clone 部署的 需要确保 .git 目录和 WindsurfAPI 源代码目录在一起。SFTP / 压缩包上传的部署请手动替换文件后 pm2 重启",
|
|
750
|
+
"upToDate": "已是最新,无需更新"
|
|
751
|
+
},
|
|
752
|
+
|
|
753
|
+
"proxy": {
|
|
754
|
+
"test": {
|
|
755
|
+
"button": "测试代理",
|
|
756
|
+
"result": "结果"
|
|
757
|
+
},
|
|
758
|
+
"none": "无(使用全局)",
|
|
759
|
+
"direct": "直连",
|
|
760
|
+
"global": "全局",
|
|
761
|
+
"current": "当前",
|
|
762
|
+
"notConfigured": "未配置全局代理",
|
|
763
|
+
"placeholderSaved": "已保存(留空保持原值)",
|
|
764
|
+
"placeholderPassword": "代理认证密码",
|
|
765
|
+
"auth": "认证"
|
|
766
|
+
},
|
|
767
|
+
|
|
768
|
+
"localImport": {
|
|
769
|
+
"scanning": "正在扫描本地 Windsurf 客户端…",
|
|
770
|
+
"empty": "没找到已登录的本地 Windsurf 凭证",
|
|
771
|
+
"scannedPaths": "已扫描的位置",
|
|
772
|
+
"found": "条凭证",
|
|
773
|
+
"foundCount": "找到 {{count}} 个本地账号 — 检查无误后点导入",
|
|
774
|
+
"account": "账号",
|
|
775
|
+
"key": "API Key",
|
|
776
|
+
"source": "来源",
|
|
777
|
+
"importBtn": "导入",
|
|
778
|
+
"importSuccess": "已导入 {{email}}",
|
|
779
|
+
"unavailable": "此功能仅在 localhost 部署可用 — 远端服务器上的 \"本地 Windsurf\" 是别人电脑上的,不是你电脑里的。"
|
|
780
|
+
},
|
|
781
|
+
|
|
782
|
+
"account": {
|
|
783
|
+
"addSuccess": "账号已添加",
|
|
784
|
+
"deleteSuccess": "账号已删除",
|
|
785
|
+
"enableSuccess": "账号已启用",
|
|
786
|
+
"disableSuccess": "账号已停用",
|
|
787
|
+
"resetErrors": "错误已重置",
|
|
788
|
+
"tierSet": "层级已设为 {{tier}}",
|
|
789
|
+
"editModels": "编辑可用模型",
|
|
790
|
+
"probe": {
|
|
791
|
+
"doing": "探测中,约需 10-30 秒...",
|
|
792
|
+
"complete": "探测完成:{{result}}",
|
|
793
|
+
"allDoing": "全部探测中,依账号数量约需 1-3 分钟...",
|
|
794
|
+
"allComplete": "探测完成:{{summary}}",
|
|
795
|
+
"probeAllComplete": "探测完成:{{summary}}",
|
|
796
|
+
"probeComplete": "探测完成:{{tier}}"
|
|
797
|
+
},
|
|
798
|
+
"credits": {
|
|
799
|
+
"refreshTitle": "刷新余额",
|
|
800
|
+
"refreshed": "余额已刷新",
|
|
801
|
+
"refreshFailed": "刷新失败",
|
|
802
|
+
"allRefreshed": "余额刷新完成:{{ok}} 成功 / {{fail}} 失败",
|
|
803
|
+
"refreshing": "正在刷新所有账号余额...",
|
|
804
|
+
"refreshingAll": "正在刷新所有账号余额..."
|
|
805
|
+
},
|
|
806
|
+
"ls": {
|
|
807
|
+
"restarting": "Language Server 重启中..."
|
|
808
|
+
},
|
|
809
|
+
"detail": {
|
|
810
|
+
"toggle": "展开/收起详情",
|
|
811
|
+
"ago": "前",
|
|
812
|
+
"resetAt": "重置于",
|
|
813
|
+
"creditPerCall": "每次调用扣费",
|
|
814
|
+
"creditUnit": " 点",
|
|
815
|
+
"plan": {
|
|
816
|
+
"title": "订阅信息",
|
|
817
|
+
"name": "套餐",
|
|
818
|
+
"tier": "层级",
|
|
819
|
+
"start": "开始",
|
|
820
|
+
"end": "到期",
|
|
821
|
+
"overage": "透支余额"
|
|
822
|
+
},
|
|
823
|
+
"quota": {
|
|
824
|
+
"title": "配额使用",
|
|
825
|
+
"daily": "每日",
|
|
826
|
+
"weekly": "每周",
|
|
827
|
+
"promptCredits": "提示词额度",
|
|
828
|
+
"flexCredits": "Flex 额度",
|
|
829
|
+
"used": "已用",
|
|
830
|
+
"fetchedAt": "数据时间",
|
|
831
|
+
"notApplicable": "本套餐不适用"
|
|
832
|
+
},
|
|
833
|
+
"models": {
|
|
834
|
+
"title": "可用模型",
|
|
835
|
+
"available": "可用",
|
|
836
|
+
"blocked": "已屏蔽"
|
|
837
|
+
},
|
|
838
|
+
"runtime": {
|
|
839
|
+
"title": "运行状态",
|
|
840
|
+
"status": "状态",
|
|
841
|
+
"errors": "错误数",
|
|
842
|
+
"rpm": "RPM 用量",
|
|
843
|
+
"lastUsed": "最后使用",
|
|
844
|
+
"lastProbed": "最后探测",
|
|
845
|
+
"creditsFetched": "额度刷新",
|
|
846
|
+
"accountId": "账号 ID",
|
|
847
|
+
"apiKey": "API Key",
|
|
848
|
+
"lastError": "上次错误"
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
},
|
|
852
|
+
|
|
853
|
+
"batch": {
|
|
854
|
+
"pasteFirst": "请先粘贴批量账号",
|
|
855
|
+
"importing": "导入中...",
|
|
856
|
+
"importingDesc": "{{count}} 行,请稍候",
|
|
857
|
+
"importingFile": "正在导入文件 {{name}}",
|
|
858
|
+
"complete": "批量导入完成",
|
|
859
|
+
"importFailed": "批量导入失败",
|
|
860
|
+
"importComplete": "批量导入完成:成功 {{success}} / 跳过 {{skipped}} / 失败 {{fail}}",
|
|
861
|
+
"success": "成功",
|
|
862
|
+
"skipped": "跳过",
|
|
863
|
+
"fail": "失败",
|
|
864
|
+
"formatError": "第 {{line}} 行格式错误",
|
|
865
|
+
"fileNone": "未选择 JSON 文件",
|
|
866
|
+
"fileLoaded": "已选择文件:{{name}}",
|
|
867
|
+
"fileReadFailed": "读取文件失败:{{error}}"
|
|
868
|
+
},
|
|
869
|
+
|
|
870
|
+
"quietWindow": {
|
|
871
|
+
"status": {
|
|
872
|
+
"disabled": "已关闭",
|
|
873
|
+
"coldStart": "冷启动 grace 中",
|
|
874
|
+
"cooldown": "冷却中",
|
|
875
|
+
"busy": "繁忙(请求多)",
|
|
876
|
+
"eligible": "空档·可触发"
|
|
877
|
+
},
|
|
878
|
+
"never": "从未",
|
|
879
|
+
"lastUpdate": "上次更新",
|
|
880
|
+
"loadFailed": "加载失败",
|
|
881
|
+
"triggered": "已触发",
|
|
882
|
+
"triggerFailed": "触发失败"
|
|
883
|
+
},
|
|
884
|
+
|
|
885
|
+
"toast": {
|
|
886
|
+
"copied": "已复制",
|
|
887
|
+
"saved": "已保存",
|
|
888
|
+
"cleared": "已清空",
|
|
889
|
+
"refresh": "已刷新",
|
|
890
|
+
"error": "错误",
|
|
891
|
+
"loading": "加载中...",
|
|
892
|
+
"exportOk": "已下载 {{filename}}",
|
|
893
|
+
"exportFailed": "导出失败",
|
|
894
|
+
"enterHostPort": "请先填主机和端口",
|
|
895
|
+
"experimentalEnabled": "已启用实验性功能",
|
|
896
|
+
"experimentalDisabled": "已关闭实验性功能",
|
|
897
|
+
"toggleFailed": "切换失败:{{error}}",
|
|
898
|
+
"modeUpdated": "模式已更新",
|
|
899
|
+
"defaultModelUpdated": "默认模型已更新",
|
|
900
|
+
"noTierModels": "该账号层级无可用模型",
|
|
901
|
+
"loginSuccess": "{{label}} 登录成功",
|
|
902
|
+
"loginFailed": "{{label}} 登录失败:{{error}}",
|
|
903
|
+
"loginSuccessAdded": "登录成功,账号已加入账号池",
|
|
904
|
+
"clipboardRead": "已读取剪贴板",
|
|
905
|
+
"clipboardEmpty": "剪贴板为空",
|
|
906
|
+
"clipboardUnsupported": "当前环境不支持自动读取剪贴板,请手动粘贴",
|
|
907
|
+
"clipboardError": "读取剪贴板失败:{{error}}",
|
|
908
|
+
"apiKeyCopied": "API Key 已复制",
|
|
909
|
+
"copyFailed": "复制失败,请手动选择",
|
|
910
|
+
"copyFailedError": "复制失败:{{error}}",
|
|
911
|
+
"enterEmailPassword": "请输入邮箱和密码",
|
|
912
|
+
"restarting": "Language Server 重启中...",
|
|
913
|
+
"lsBinaryUpdating": "LS 更新中…",
|
|
914
|
+
"lsBinaryUpdated": "LS 二进制已更新({{before}} → {{after}}),重启 {{count}} 个实例",
|
|
915
|
+
"lsBinaryUpdatedColdPool": "LS 二进制已更新({{before}} → {{after}}),暂无运行中实例,下次请求时自动加载",
|
|
916
|
+
"lsBinaryUpdatedWithErrors": "LS 二进制已更新({{before}} → {{after}}),重启 {{count}} 个实例({{errors}} 个失败)",
|
|
917
|
+
"lsBinaryAlreadyCurrent": "LS 二进制已是最新(sha:{{sha}}),无需更新",
|
|
918
|
+
"lsBinaryUpdateFailed": "LS 更新失败:{{error}}",
|
|
919
|
+
"lsBinaryUpdateRequestFailed": "LS 更新请求失败:{{error}}",
|
|
920
|
+
"lsBinaryUnreadable": "LS binary 不可读:{{error}}",
|
|
921
|
+
"lsBinaryReadFailed": "LS 信息读取失败:{{error}}",
|
|
922
|
+
"lsBinaryStat": "{{path}} · {{sizeMb}} MB · sha256:{{sha}} · {{age}} 天前安装",
|
|
923
|
+
"proxyConfigured": "账号代理已配置",
|
|
924
|
+
"proxyCleared": "账号代理已清除",
|
|
925
|
+
"globalProxySaved": "全局代理已保存",
|
|
926
|
+
"globalProxyCleared": "全局代理已清除",
|
|
927
|
+
"enterProxyHost": "请输入代理主机",
|
|
928
|
+
"statsReset": "统计已重置",
|
|
929
|
+
"enterKeyOrToken": "请输入 Key 或 Token",
|
|
930
|
+
"addFailed": "添加失败",
|
|
931
|
+
"probe": {
|
|
932
|
+
"doing": "探测中,约需 10-30 秒...",
|
|
933
|
+
"probeComplete": "探测完成:{{tier}}",
|
|
934
|
+
"allDoing": "探测所有账号中,约需 1-3 分钟(视数量而定)...",
|
|
935
|
+
"probeAllComplete": "探测完成:{{summary}}"
|
|
936
|
+
},
|
|
937
|
+
"probeComplete": "探测完成:{{tier}}",
|
|
938
|
+
"probeAllComplete": "探测完成:{{summary}}",
|
|
939
|
+
"credits": {
|
|
940
|
+
"refreshed": "余额已刷新",
|
|
941
|
+
"refreshFailed": "刷新余额失败",
|
|
942
|
+
"refreshing": "正在刷新余额...",
|
|
943
|
+
"allRefreshed": "余额刷新完成:{{ok}} 成功 / {{fail}} 失败"
|
|
944
|
+
}
|
|
945
|
+
},
|
|
946
|
+
|
|
947
|
+
"log": {
|
|
948
|
+
"level": {
|
|
949
|
+
"all": "所有级别",
|
|
950
|
+
"debug": "Debug",
|
|
951
|
+
"info": "Info",
|
|
952
|
+
"warn": "Warn",
|
|
953
|
+
"error": "Error"
|
|
954
|
+
},
|
|
955
|
+
"searchPlaceholder": "搜索日志内容...",
|
|
956
|
+
"clearView": "清空视图",
|
|
957
|
+
"viaSSE": "通过 SSE 实时流式接收",
|
|
958
|
+
"export": {
|
|
959
|
+
"all": "全部日志",
|
|
960
|
+
"api": "API 请求日志",
|
|
961
|
+
"system": "系统运行日志",
|
|
962
|
+
"txt": "纯文本",
|
|
963
|
+
"btn": "下载日志"
|
|
964
|
+
}
|
|
965
|
+
},
|
|
966
|
+
|
|
967
|
+
"model": {
|
|
968
|
+
"mode": {
|
|
969
|
+
"all": "全部允许",
|
|
970
|
+
"allowlist": "白名单",
|
|
971
|
+
"blocklist": "黑名单"
|
|
972
|
+
},
|
|
973
|
+
"provider": {
|
|
974
|
+
"all": "全部供应商",
|
|
975
|
+
"anthropic": "Anthropic",
|
|
976
|
+
"openai": "OpenAI",
|
|
977
|
+
"google": "Google",
|
|
978
|
+
"deepseek": "DeepSeek",
|
|
979
|
+
"xai": "xAI",
|
|
980
|
+
"alibaba": "Alibaba",
|
|
981
|
+
"moonshot": "Moonshot",
|
|
982
|
+
"windsurf": "Windsurf"
|
|
983
|
+
},
|
|
984
|
+
"list": {
|
|
985
|
+
"current": "当前清单 ({{count}})",
|
|
986
|
+
"empty": "清单为空"
|
|
987
|
+
}
|
|
988
|
+
},
|
|
989
|
+
|
|
990
|
+
"error": {
|
|
991
|
+
"generic": "发生错误",
|
|
992
|
+
"unknown": "未知错误",
|
|
993
|
+
"updateFailed": "更新失败",
|
|
994
|
+
"apiError": "API 错误",
|
|
995
|
+
"loadFailed": "加载失败",
|
|
996
|
+
"probeFailed": "探测失败",
|
|
997
|
+
"accountNotFound": "账号未找到",
|
|
998
|
+
"openFailed": "打开失败",
|
|
999
|
+
"saveFailed": "保存失败",
|
|
1000
|
+
"deleteFailed": "删除失败",
|
|
1001
|
+
"networkError": "网络错误",
|
|
1002
|
+
"authRequired": "请先登录",
|
|
1003
|
+
"clipboardNotSupported": "当前环境不支持自动读取剪贴板,请手动粘贴",
|
|
1004
|
+
"clipboardEmpty": "剪贴板为空",
|
|
1005
|
+
"clipboardReadFailed": "读取剪贴板失败",
|
|
1006
|
+
"firebaseLoadFailed": "Firebase SDK 加载失败 请刷新页面重试",
|
|
1007
|
+
"ERR_EMAIL_PASSWORD_REQUIRED": "email 和 password 为必填",
|
|
1008
|
+
"ERR_HOST_PORT_REQUIRED": "缺少 host 或 port",
|
|
1009
|
+
"ERR_SELF_UPDATE_UNAVAILABLE": "当前部署方式不支持一键更新",
|
|
1010
|
+
"pull-failed": "拉取镜像失败",
|
|
1011
|
+
"deployer-pull-failed": "拉取部署器镜像 docker:24-cli 失败",
|
|
1012
|
+
"deployer-create-failed": "创建部署器容器失败",
|
|
1013
|
+
"deployer-create-no-id": "创建部署器容器后没收到 ID",
|
|
1014
|
+
"deployer-start-failed": "启动部署器容器失败",
|
|
1015
|
+
"ERR_UNCOMMITTED_CHANGES": "工作区有未提交的修改(SFTP 部署或手动改过代码)。确定要覆盖本地修改用远程最新版本吗?",
|
|
1016
|
+
"ERR_ACCOUNTS_REQUIRED": "accounts 为必填数组",
|
|
1017
|
+
"ERR_TEXT_REQUIRED": "缺少 text 字段",
|
|
1018
|
+
"ERR_NO_VALID_LINES": "没有有效行",
|
|
1019
|
+
"ERR_FORMAT_INVALID": "格式错误 需要 [proxy] email password",
|
|
1020
|
+
"ERR_UNSUPPORTED_IMPORT_ITEM": "该项无法识别为邮箱密码、Token 或 API Key",
|
|
1021
|
+
"ERR_JSON_INVALID": "JSON 格式无效",
|
|
1022
|
+
"ERR_JSON_FILE_REQUIRED": "请选择 .json 文件",
|
|
1023
|
+
"ERR_IDTOKEN_REQUIRED": "缺少 idToken",
|
|
1024
|
+
"ERR_PROXY_PRIVATE_IP": "代理地址不能指向内网/本机",
|
|
1025
|
+
"ERR_PROXY_FORMAT_INVALID": "代理格式错误,应为:protocol://[user:pass@]host:port",
|
|
1026
|
+
"ERR_PROXY_HTTP_ERROR": "代理返回 HTTP 错误",
|
|
1027
|
+
"ERR_PROXY_PRIVATE_HOST": "内网/本地主机不允许",
|
|
1028
|
+
"ERR_CONNECTION_FAILED": "连接失败",
|
|
1029
|
+
"ERR_TIMEOUT": "超时(10s)",
|
|
1030
|
+
"ERR_TLS_TUNNEL_ERROR": "TLS 隧道建立但返回内容异常",
|
|
1031
|
+
"ERR_TLS_FAILED": "TLS 失败",
|
|
1032
|
+
"ERR_LOGIN_FAILED": "登录失败",
|
|
1033
|
+
"ERR_EMAIL_NOT_FOUND": "该邮箱未注册邮箱密码登录方式。若通过 Google/GitHub OAuth 注册,请使用 OAuth 按钮或访问 windsurf.com/show-auth-token 复制 Auth Token",
|
|
1034
|
+
"ERR_INVALID_PASSWORD": "密码错误",
|
|
1035
|
+
"ERR_INVALID_CREDENTIALS": "邮箱或密码错误",
|
|
1036
|
+
"ERR_NO_PASSWORD_SET": "该账号未设置密码登录方式。使用 Google/GitHub OAuth 或访问 windsurf.com/show-auth-token 复制 Auth Token",
|
|
1037
|
+
"ERR_USER_DISABLED": "账号已被停用",
|
|
1038
|
+
"ERR_TOO_MANY_ATTEMPTS": "尝试太多次 请稍后再试",
|
|
1039
|
+
"ERR_INVALID_EMAIL": "邮箱格式错误",
|
|
1040
|
+
"ERR_CODEIUM_REGISTER_FAILED": "Codeium 注册失败",
|
|
1041
|
+
"ERR_AUTH1_TOKEN_MISSING": "Auth1 回应缺少 token",
|
|
1042
|
+
"ERR_POSTAUTH_FAILED": "Windsurf PostAuth 失败",
|
|
1043
|
+
"ERR_TOKEN_FETCH_FAILED": "获取一次性 Auth Token 失败",
|
|
1044
|
+
"ERR_FIREBASE_TOKEN_MISSING": "Firebase 回应缺少 idToken",
|
|
1045
|
+
"ERR_LOCAL_IMPORT_LOOPBACK_ONLY": "本地导入仅限 127.0.0.1 访问 — 请在部署服务器本机的浏览器里打开 dashboard,不要用公网域名",
|
|
1046
|
+
"ERR_LOCAL_IMPORT_FAILED": "扫描本地 Windsurf 凭证失败"
|
|
1047
|
+
},
|
|
1048
|
+
|
|
1049
|
+
"footer": {
|
|
1050
|
+
"version": "版本",
|
|
1051
|
+
"langToggle": "切换语言",
|
|
1052
|
+
"langToggleToEn": "Switch to English",
|
|
1053
|
+
"langToggleToZh": "切换到中文"
|
|
1054
|
+
},
|
|
1055
|
+
|
|
1056
|
+
"placeholder": {
|
|
1057
|
+
"noProxy": "无代理"
|
|
1058
|
+
},
|
|
1059
|
+
|
|
1060
|
+
"loginResult": {
|
|
1061
|
+
"success": "✓ 登录成功",
|
|
1062
|
+
"apiKeyGenerated": "API Key 已生成{{autoAdd}}",
|
|
1063
|
+
"fail": "✗ 登录失败",
|
|
1064
|
+
"batchComplete": "批量导入完成",
|
|
1065
|
+
"batchDesc": "共 {{total}} 个账号,成功 {{success}} 个,失败 {{fail}} 个{{autoAdd}}",
|
|
1066
|
+
"tryOther": "换个方式试试",
|
|
1067
|
+
"oauthHint": "若你用 Google/GitHub 注册的 Windsurf 账号 此处密码登录不适用 请用页面顶部的 Google / GitHub 登录按钮 或访问 {{link}} 复制 Auth Token 后在「账号管理」页手动添加",
|
|
1068
|
+
"fields": {
|
|
1069
|
+
"email": "邮箱",
|
|
1070
|
+
"name": "姓名",
|
|
1071
|
+
"apiKey": "API Key",
|
|
1072
|
+
"accountId": "账号 ID"
|
|
1073
|
+
},
|
|
1074
|
+
"successTitle": "登录成功",
|
|
1075
|
+
"addedToPool": "并加入账号池"
|
|
1076
|
+
},
|
|
1077
|
+
|
|
1078
|
+
"timeRange": {
|
|
1079
|
+
"minutesAgo": "{{count}}分钟前",
|
|
1080
|
+
"hoursAgo": "{{count}}小时前",
|
|
1081
|
+
"daysAgo": "{{count}}天前"
|
|
1082
|
+
},
|
|
1083
|
+
|
|
1084
|
+
"time": {
|
|
1085
|
+
"day": "天",
|
|
1086
|
+
"hour": "时",
|
|
1087
|
+
"minute": "分",
|
|
1088
|
+
"second": "秒"
|
|
1089
|
+
},
|
|
1090
|
+
|
|
1091
|
+
"prompt": {
|
|
1092
|
+
"editor": {
|
|
1093
|
+
"reset": "重置",
|
|
1094
|
+
"search": "搜索提供商...",
|
|
1095
|
+
"templateHint": "{{model}} 占位符会被替换成请求的模型名。"
|
|
1096
|
+
}
|
|
1097
|
+
},
|
|
1098
|
+
|
|
1099
|
+
"ls": {
|
|
1100
|
+
"defaultInstance": "默认实例",
|
|
1101
|
+
"noProxy": "无代理",
|
|
1102
|
+
"port": "端口",
|
|
1103
|
+
"pid": "PID",
|
|
1104
|
+
"restartCount": "重启次数"
|
|
1105
|
+
}
|
|
1106
|
+
}
|