-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzh.ts
More file actions
634 lines (614 loc) · 24.6 KB
/
Copy pathzh.ts
File metadata and controls
634 lines (614 loc) · 24.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
const zh = {
// 通用
common: {
create: '创建',
edit: '编辑',
delete: '删除',
save: '保存',
cancel: '取消',
confirm: '确认',
close: '关闭',
refresh: '刷新',
copy: '复制',
copied: '已复制',
loading: '加载中...',
submitting: '提交中...',
saving: '保存中...',
success: '操作成功',
error: '操作失败',
name: '名称',
url: 'URL',
actions: '操作',
createdAt: '创建时间',
search: '搜索',
noData: '暂无数据',
required: '必填项',
optional: '可选',
yes: '是',
no: '否',
enabled: '已启用',
disabled: '已禁用',
back: '返回',
selectAll: '全选',
deselectAll: '取消全选',
detail: '详情',
status: '状态',
type: '类型',
value: '值',
mode: '模式',
prev: '上一页',
next: '下一页',
page: '第 {{page}} 页',
add: '添加',
remove: '删除',
update: '更新',
description: '描述',
showPassword: '显示密码',
hidePassword: '隐藏密码',
},
// 导航菜单
nav: {
brandName: 'Clash Config Store',
dashboard: '仪表盘',
providers: '订阅源',
userAgents: 'UA 库',
customConfigs: '自定义配置',
subscriptions: '订阅管理',
configTemplates: '配置模板',
ruleProviders: '规则集库',
hostedRuleSets: '托管规则集',
settings: '设置',
logout: '退出登录',
profile: '个人资料',
},
layout: {
collapseSidebar: '收起侧边栏',
expandSidebar: '展开侧边栏',
},
// 认证
auth: {
login: '登录',
register: '注册',
loginTitle: '欢迎回来',
loginSubtitle: '登录到 Clash Config Store',
registerTitle: '创建账号',
registerSubtitle: '注册 Clash Config Store',
email: '邮箱',
password: '密码',
confirmPassword: '确认密码',
username: '用户名',
loginButton: '登录',
registerButton: '注册',
noAccount: '没有账号?',
hasAccount: '已有账号?',
goRegister: '注册账号',
goLogin: '去登录',
loginSuccess: '登录成功',
registerSuccess: '注册成功',
logoutSuccess: '已退出登录',
invalidCredentials: '邮箱或密码错误',
emailPlaceholder: '请输入邮箱',
passwordPlaceholder: '请输入密码',
usernamePlaceholder: '请输入用户名',
confirmPasswordPlaceholder: '请再次输入密码',
passwordMismatch: '两次密码不一致',
emailRequired: '请输入邮箱',
passwordRequired: '请输入密码',
passwordMinLength: '密码至少 {{min}} 位',
nameRequired: '请输入用户名',
emailInvalid: '邮箱格式不正确',
},
hostedRuleSets: {
title: '托管规则集',
add: '添加托管规则集',
edit: '编辑托管规则集',
delete: '删除托管规则集',
deleteConfirm: '确认删除该托管规则集?此操作不可恢复。',
url: '访问链接',
content: '内容',
resetAllTokens: '重置全部托管规则集 Token',
resetAllTokensConfirm: '此操作会重置当前账号下全部托管规则集的 Token,所有旧链接会立即失效,已引用这些链接的客户端需要更新。',
nameHint: '名称将直接用于 URL,仅允许字母、数字、下划线和短横线。',
nameInvalid: '仅允许字母、数字、下划线和短横线',
customSection: '托管规则集',
},
contextSaveBar: {
unsaved: '有未保存的更改',
discard: '放弃',
leaveTitle: '离开此页?',
leaveDescription: '当前有未保存的更改,离开后修改将丢失。',
stay: '留在页面',
leave: '离开',
viewDiff: '差异',
diffTitle: '变更预览',
diffDescription: '将已保存与当前草稿渲染为 YAML,并以词级 inline 高亮展示增删(绿色为新增,红色删除线为移除)。打开时自动滚动到首处变更。',
diffNoChanges: '与已保存内容一致,无差异。',
},
onboarding: {
dashboardTitle: '三步生成第一条订阅',
dashboardDescription: '这是一份随时可看的使用流程:先接入上游订阅源,再准备自定义配置,最后创建订阅链接导入客户端。',
done: '完成',
progress: '{{done}} / {{total}} 步完成',
expand: '查看步骤',
collapse: '收起步骤',
stepProviderTitle: '添加订阅源',
stepProviderDescription: '填入已有的上游订阅 URL,系统会缓存并解析其中的节点。',
stepConfigTitle: '准备自定义配置',
stepConfigDescription: '从示例配置开始,逐步补充代理组、规则和规则集引用。',
stepSubscriptionTitle: '创建订阅',
stepSubscriptionDescription: '绑定订阅源与配置后,复制生成的链接导入 Mihomo/Clash 客户端。',
},
// 仪表盘
dashboard: {
title: '仪表盘',
totalProviders: '订阅源',
totalSubscriptions: '订阅配置',
totalCustomConfigs: '自定义配置',
totalConfigTemplates: '配置模板',
totalRuleProviders: '规则集',
recentLogs: '最近访问日志',
recentLogsDescription: '最近 10 次订阅链接访问记录,用于快速判断来源与拦截情况。',
recentActivity: '最近活动',
recentActivitySummary: '允许 {{allowed}} / 拒绝 {{denied}}',
allowedCount: '允许 {{count}}',
deniedCount: '拒绝 {{count}}',
allowedCountTooltip: '最近 10 条访问日志中被允许的请求数',
deniedCountTooltip: '最近 10 条访问日志中被拒绝的请求数',
noRecentLogsTitle: '暂无访问记录',
noRecentLogsDescription: '当订阅链接被客户端访问后,最近活动会显示在这里。',
ip: 'IP 地址',
country: '国家/地区',
allowed: '状态',
denyReason: '拒绝原因',
time: '时间',
subscription: '订阅',
providerStatus: '订阅源状态',
providerStatusDescription: '关注缓存刷新、上游获取错误和需要手动处理的源。',
subscriptionHealth: '订阅健康',
subscriptionHealthDescription: '确认 Token 有效性以及配置、模板绑定情况。',
needAttention: '{{count}} 项关注',
allClear: '全部正常',
refreshAll: '一键刷新所有订阅源',
refreshAllSuccess: '已触发所有订阅源刷新',
cacheStale: '缓存过期',
cacheOk: '缓存正常',
lastFetched: '最后刷新',
neverFetched: '从未获取',
tokenExpired: 'Token 已过期',
tokenNeverExpires: '永不过期',
daysLeft: '剩余 {{days}} 天',
copyLink: '复制订阅链接',
noCustomConfig: '未关联配置',
noConfigTemplate: '未关联模板',
hasCustomConfig: '已关联配置',
hasConfigTemplate: '已关联模板',
fetchError: '获取失败',
unknownLocation: '未知地区',
relativeJustNow: '刚刚',
relativeMinutesAgo: '{{count}} 分钟前',
relativeHoursAgo: '{{count}} 小时前',
},
// 订阅源
providers: {
title: '订阅源管理',
addProvider: '添加订阅源',
editProvider: '编辑订阅源',
deleteProvider: '删除订阅源',
deleteConfirm: '确定要删除该订阅源吗?',
providerName: '订阅源名称',
providerUrl: '订阅 URL',
userAgent: 'User-Agent',
cacheTTL: '缓存 TTL(秒)',
lastFetched: '最后更新',
fetchError: '获取错误',
refreshing: '刷新中...',
refreshSuccess: '刷新成功',
refreshFailed: '刷新失败',
neverFetched: '从未获取',
selectUA: '选择 UA(可选)',
noUA: '不使用 UA',
namePlaceholder: '请输入订阅源名称',
urlPlaceholder: '请输入订阅 URL',
cacheTTLPlaceholder: '缓存有效期(秒),0 表示不缓存',
emptyTitle: '先添加一个上游订阅源',
emptyDescription: '订阅源负责提供真实节点。后续创建订阅时,可以勾选这些来源并统一生成最终配置。',
},
// UA 库
userAgents: {
title: 'User-Agent 库',
addUA: '添加 UA',
editUA: '编辑 UA',
deleteUA: '删除 UA',
deleteConfirm: '确定要删除该 UA 吗?',
uaName: 'UA 名称',
uaValue: 'UA 值',
namePlaceholder: '请输入 UA 名称(如:Clash)',
valuePlaceholder: '请输入 User-Agent 字符串',
presets: '预设值',
},
// 自定义配置
customConfigs: {
title: '自定义配置',
updatedAt: '更新时间',
statsSummary: '节点 {{proxies}} / 组 {{groups}} / 规则 {{rules}} / 规则集 {{ruleSets}}',
relativeJustNow: '刚刚',
relativeMinutesAgo: '{{count}} 分钟前',
relativeHoursAgo: '{{count}} 小时前',
relativeDaysAgo: '{{count}} 天前',
addConfig: '新建配置',
cloneConfig: '克隆配置',
cloneSuccess: '已创建配置副本',
importConfig: '导入配置',
importSuccess: '配置已导入',
importUploadFile: '上传 JSON 文件',
importChooseFile: '选择文件',
importPasteJson: '或粘贴 JSON',
importInvalidJson: 'JSON 解析失败,请检查格式',
importInvalidFormat: '导入内容缺少必要字段或字段类型不正确',
exportConfig: '导出配置',
exportSuccess: '配置已导出',
editConfig: '编辑配置',
deleteConfig: '删除配置',
deleteConfirm: '确定要删除该配置吗?',
configName: '配置名称',
namePlaceholder: '请输入配置名称',
saveSuccess: '配置已保存',
detail: '自定义配置详情',
clickToEditTitle: '点击编辑配置名称',
tabProxies: '代理节点',
tabProxyGroups: '代理组',
tabRules: '规则',
tabRuleSets: '规则集引用',
addProxy: '添加节点',
editProxy: '编辑节点',
deleteProxy: '删除节点',
duplicateProxy: '复制节点',
proxyCopySuffix: '副本',
proxyDuplicated: '已添加节点副本',
proxyName: '节点名称',
proxyType: '协议类型',
proxyServer: '服务器',
proxyPort: '端口',
rawYaml: '原始 YAML',
switchToForm: '切换到表单编辑',
switchToYaml: '切换到 YAML 编辑',
addProxyGroup: '添加代理组',
editProxyGroup: '编辑代理组',
deleteProxyGroup: '删除代理组',
groupName: '组名',
groupType: '类型',
groupProxies: '成员节点/组',
groupProxiesSelected: '已选成员(拖动排序)',
groupProxiesAvailable: '可添加成员',
groupProxiesEmptyHint: '从下方勾选添加成员;顺序将写入生成的配置。',
groupProxiesNothingToAdd: '没有可添加的项(已全部加入或暂无候选)。',
groupUse: '引用订阅源',
groupUseHint: '从订阅源动态加载节点(生成时注入)',
groupUrl: '健康检测 URL',
groupInterval: '检测间隔(秒)',
groupTolerance: '容差(ms)',
groupStrategy: '策略',
addRule: '添加规则',
ruleType: '规则类型',
rulePayload: '匹配内容',
ruleTarget: '目标策略',
ruleNoResolve: 'no-resolve',
ruleNoResolveHint:
'仅适用于 GEOIP、IP-CIDR 等目标 IP 类规则。勾选后写入 ,no-resolve,域名命中该规则时将跳过 DNS 解析以检查目标 IP;若更早的规则已触发解析,仍可能匹配到本规则。',
ruleNoResolveHintRuleSet:
'对 RULE-SET 可附加 no-resolve。勾选后写入 ,no-resolve,由 Mihomo 在匹配该规则集时按引擎语义处理(与仅 IP 类规则的作用对象不同,详见文档)。',
ruleAnalysis: {
emptyRule: '空规则不会被保存',
missingType: '缺少规则类型',
unsupportedType: '不支持的规则类型:{{type}}',
missingPayload: '缺少匹配内容',
matchMissingTarget: 'MATCH 规则必须指定目标策略',
missingTarget: '缺少目标策略',
ruleSetNotFound: '规则集 "{{name}}" 不存在',
ruleSetNotSelected: '规则集 "{{name}}" 尚未在"规则集引用"中勾选',
targetNotFound: '目标策略 "{{name}}" 当前不存在于内置策略、代理组或节点中',
matchShouldBeLast: 'MATCH 建议保持在规则列表最后',
noResolveUnsupported: 'no-resolve 通常仅用于 GEOIP / IP-CIDR 等目标 IP 类规则,当前类型可能不会按预期生效',
duplicateRules: '存在 {{count}} 条完全相同的规则',
fixCheckRuleSets: '检查规则集引用',
fixGoSelectRuleSets: '前往勾选规则集',
fixCheckGroups: '检查代理组',
fixCheckProxies: '检查代理节点',
fixMoveToBottom: '移到底部',
},
ruleTypeHint: {
exactDomain: '精确域名匹配',
suffixDomain: '匹配域名后缀',
keywordDomain: '匹配域名关键字',
regexDomain: '支持逗号,使用正则表达式',
wildcardDomain: '匹配通配符域名',
geoSite: 'GeoSite 分类名称',
geoIp: '国家/地区代码',
srcGeoIp: '源地址国家/地区代码',
ipCidr: 'IPv4 CIDR',
ipCidr6: 'IPv6 CIDR',
ipAsn: 'ASN 号',
ipSuffix: 'IP 后缀匹配',
ruleSet: '引用规则集库中的名称',
processName: '进程名匹配',
processPath: '进程路径匹配',
port: '端口号',
network: '网络类型(tcp / udp)',
dscp: 'DSCP 值',
uid: '用户 ID',
match: '兜底规则,通常应放在最后',
default: '规则匹配条件',
},
ruleTargetHint: '从内置策略、代理组或节点中选择',
rawRulesMode: '原始文本模式',
structuredRulesMode: '结构化编辑',
tableRulesMode: '表格模式',
selectRuleSets: '选择引用的规则集',
ruleSetSelected: '已选 {{count}} 个规则集',
ruleSetHint: '选中后,生成配置时会自动注入对应的 rule-providers',
ruleSetSelectionHint: 'RULE-SET 必须引用已存在的规则集名称',
ruleSetDuplicateName: '已存在同名规则集引用,请先调整名称后再勾选',
ruleSetMissing: '未找到',
ruleSearchPlaceholder: '搜索规则类型、匹配内容或目标策略',
ruleQuickFilter: '快速筛选',
ruleFilterAll: '全部',
ruleFilterDomain: 'DOMAIN 类',
ruleFilterRuleSet: 'RULE-SET',
ruleFilterGeoIp: 'GEOIP',
ruleFilterMatch: 'MATCH',
onlyShowIssues: '仅看异常',
clearFilters: '清空筛选',
visibleRules: '当前显示 {{count}} / {{total}} 条',
quickInsert: '快速插入',
rulesWorkspaceTitle: '规则编辑工作区',
rulesWorkspaceStructuredHint: '结构化模式适合拖拽排序、快速录入和修正引用',
rulesWorkspaceTextHint: '文本模式支持批量粘贴、高级规则和行号定位',
normalizeMatch: '整理 MATCH 到底部',
matchShouldBeLast: 'MATCH 位于非末尾位置,可能提前截断后续规则。',
ruleStatTotal: '规则总数',
ruleStatRuleSets: 'RULE-SET 使用数',
ruleStatWarnings: '警告数',
ruleStatErrors: '错误数',
ruleStatusValid: '正常',
ruleStatusWarning: '警告',
ruleStatusError: '错误',
rulePayloadNotRequired: '无需匹配内容',
matchRuleCompactHint: '无需填写',
matchRuleHint: 'MATCH 不需要 payload,仅设置目标策略',
matchRuleUnique: 'MATCH 规则只能保留一条',
ruleDiagnostics: '文本诊断',
ruleDiagnosticsHint: '按当前文本逐行分析,可快速定位错误和引用问题',
noMatchingRules: '当前没有匹配的规则',
noMatchingRulesHint: '试试清空搜索条件、切换筛选,或者直接添加新规则',
ruleContextTitle: '规则上下文',
ruleContextHint: '这里显示当前规则实际引用到的规则集和目标策略',
ruleContextRuleSets: '已引用规则集',
ruleContextRuleSetsHint: '未勾选或不存在的规则集会高亮提示',
ruleContextTargets: '已引用目标策略',
ruleContextTargetsHint: '帮助检查目标策略是否仍然有效',
ruleChecklistTitle: '保存前检查',
ruleChecklistRuleSets: '确认 RULE-SET 已在“规则集引用”Tab 中勾选。',
ruleChecklistTargets: '确认目标策略仍指向有效的内置策略、代理组或节点。',
ruleChecklistMatch: '确认 MATCH 规则位于底部,避免提前截断后续规则。',
currentRuleCard: '当前规则状态',
noActiveRule: '选择一条规则后,这里会显示更具体的诊断和快捷修复。',
targetBuiltin: '内置策略',
targetProxyGroups: '代理组',
targetProxies: '代理节点',
ruleTargetMissing: '未找到',
previewYaml: 'YAML 预览',
previewLoading: '生成预览中...',
refreshPreview: '刷新预览',
copyPreview: '复制 YAML',
previewRulesCount: '规则 {{count}}',
previewGroupsCount: '代理组 {{count}}',
previewRuleSetsCount: '规则集 {{count}}',
unsavedChanges: '有未保存改动',
validationErrorsBadge: '{{count}} 个错误待处理',
validationWarningsBadge: '{{count}} 个警告待确认',
validationReady: '规则检查通过',
lastCheckError: '上次校验存在错误',
lastCheckWarning: '上次校验存在警告',
lastCheckValid: '上次校验通过',
ruleTextFixErrorsFirst: '请先修复文本模式中的错误,再切回结构化模式',
saveBlockedByErrors: '仍有规则错误,已阻止保存',
renameConflict: '该名称已被其他代理节点或代理组使用',
renameRefsSynced: '已同步更新 {{count}} 处引用',
emptyTitle: '从一个自定义配置开始',
emptyDescription: '自定义配置负责组织代理组和规则。新手可以先导入示例配置,再按自己的订阅源逐步调整。',
importSample: '导入示例配置',
sampleName: '新手示例配置',
detailGuideTitle: '配置由三块内容组成',
detailGuideDescription: '代理节点是可选的手写节点,代理组负责把节点或订阅源组合成策略,规则决定流量走哪个策略。新手通常先维护代理组和规则即可。',
},
// 配置模板
configTemplates: {
title: '配置模板',
addTemplate: '新建模板',
editTemplate: '编辑模板',
deleteTemplate: '删除模板',
deleteConfirm: '确定要删除该模板吗?',
templateName: '模板名称',
templateDescription: '描述',
templateContent: '模板内容(YAML)',
namePlaceholder: '请输入模板名称',
descriptionPlaceholder: '可选,描述此模板的用途',
contentPlaceholder: '# 在此输入顶层 mihomo 配置\n# 如 mixed-port、dns、tun 等\nmixed-port: 7890\nmode: rule\n',
saveSuccess: '模板已保存',
detail: '配置模板详情',
contentHint: '此处配置将作为订阅的顶层基础配置,proxies/proxy-groups/rules 由自定义配置提供,无需在此定义',
},
// 规则集库
ruleProviders: {
title: '规则集库',
addProvider: '添加规则集',
editProvider: '编辑规则集',
deleteProvider: '删除规则集',
deleteConfirm: '确定要删除该规则集吗?',
providerName: '规则集名称',
providerType: '类型',
providerSource: '来源',
providerUrl: 'URL',
providerBehavior: 'Behavior',
providerFormat: '格式',
providerInterval: '刷新间隔(秒)',
isPreset: '内置预设',
presetTag: '预设标签',
namePlaceholder: '如 my-rules(用于 RULE-SET 引用)',
urlPlaceholder: '规则文件 URL',
behaviorDomain: 'Domain',
behaviorIpcidr: 'IP-CIDR',
behaviorClassical: 'Classical',
formatYaml: 'YAML',
formatText: 'Text',
formatMrs: 'MRS',
typeHttp: 'HTTP',
typeFile: 'File',
presetBadge: '内置',
cannotDelete: '内置预设不可删除',
cannotEdit: '内置预设不可修改',
loyalsoldierSection: 'Loyalsoldier 内置预设',
customSection: '外部规则集',
addSuccess: '规则集已添加',
updateSuccess: '规则集已更新',
deleteSuccess: '规则集已删除',
},
// 订阅配置
subscriptions: {
title: '订阅管理',
addSubscription: '创建订阅',
editSubscription: '编辑订阅',
deleteSubscription: '删除订阅',
deleteConfirm: '确定要删除该订阅吗?',
subscriptionName: '订阅名称',
token: 'Token',
tokenExpiredAt: 'Token 过期时间',
regenerateToken: '重新生成 Token',
regenerateConfirm: '重新生成 Token 后,旧 Token 将失效。确定继续吗?',
subscriptionUrl: '订阅链接',
providers: '代理源',
enabledProviders: '已启用的订阅源',
noProviders: '暂无订阅源,请先添加',
customConfig: '自定义配置',
selectCustomConfig: '选择自定义配置(可选)',
noCustomConfig: '不使用自定义配置',
configTemplate: '配置模板',
selectConfigTemplate: '选择配置模板(可选)',
noConfigTemplate: '不使用配置模板',
ruleInsertMode: '规则插入位置',
prepend: '前置插入(自定义规则在前)',
append: '后置插入(自定义规则在后)',
replace: '完全替换(仅使用自定义规则)',
proxyPrefixEnabled: '启用节点前缀',
proxyPrefixDesc: '为节点名称添加订阅源名称前缀,避免冲突',
accessRestrictions: '访问限制',
addRestriction: '添加限制',
restrictionType: '限制类型',
restrictionValue: '限制值',
restrictionMode: '限制模式',
allow: '允许',
deny: '拒绝',
typeIP: 'IP 地址',
typeCIDR: 'CIDR 网段',
typeCountry: '国家/地区',
accessLogs: '访问日志',
viewLogs: '查看日志',
accessLogCount: '访问次数',
copySubscriptionUrl: '复制订阅链接',
shareSubscriptionUrl: '二维码分享',
shareDialogTitle: '分享订阅:{{name}}',
shareDialogDescription: '使用二维码快速分享订阅链接,扫码后可直接导入。',
urlConfirmation: '链接确认',
tabProviders: '订阅源',
tabConfig: '自定义配置',
tabTemplate: '配置模板',
tabRestrictions: '访问限制',
tokenNeverExpires: '永不过期',
tokenExpired: '已过期',
tokenExpiresSoon: '有效中',
namePlaceholder: '请输入订阅名称',
createHint: '创建后可在详情页配置代理源、规则集等。',
copySuccess: '订阅链接已复制',
saveSuccess: '订阅配置已保存',
regenerateSuccess: 'Token 已重新生成',
detail: '订阅详情',
noExpiry: '无限制',
noExpiryDescription: '未设置到期时间',
setExpiry: '设置过期时间',
subscriptionInfo: '订阅信息',
configSummary: '配置摘要',
accessOverview: '访问概览',
activeProviderCount: '已启用 {{count}} 个订阅源',
hasCustomConfig: '已绑定自定义配置',
hasConfigTemplate: '已绑定配置模板',
proxyPrefixStatus: '节点前缀',
proxyPrefixOn: '已启用',
proxyPrefixOff: '未启用',
emptyTitle: '创建一个可分发的订阅',
emptyDescription: '订阅会把订阅源、自定义配置和模板组合成最终 YAML,并生成可复制或扫码导入的链接。',
noProvidersTitle: '还没有可启用的订阅源',
noProvidersDescription: '先添加上游订阅源,再回到这里勾选需要参与生成的节点来源。',
noCustomConfigsTitle: '还没有自定义配置',
noCustomConfigsDescription: '自定义配置用于管理代理组和规则。可以从示例配置开始,再回到这里绑定。',
},
// 访问日志
accessLogs: {
title: '访问日志',
ip: 'IP 地址',
country: '国家',
city: '城市',
allowed: '访问状态',
denyReason: '拒绝原因',
time: '访问时间',
allowedBadge: '允许',
deniedBadge: '拒绝',
noLogs: '暂无访问日志',
},
// 个人设置
settings: {
title: '个人设置',
basicInfo: '基本信息',
changePassword: '修改密码',
username: '用户名',
email: '邮箱',
oldPassword: '旧密码',
newPassword: '新密码',
confirmNewPassword: '确认新密码',
saveProfile: '保存信息',
changePasswordBtn: '修改密码',
profileUpdated: '个人信息已更新',
passwordChanged: '密码已修改',
passwordMismatch: '两次密码不一致',
oldPasswordRequired: '请输入旧密码',
newPasswordRequired: '请输入新密码',
},
// 主题
theme: {
light: '浅色',
dark: '深色',
system: '跟随系统',
toggle: '切换主题',
},
// 语言
language: {
zh: '中文',
en: 'English',
toggle: '切换语言',
},
// 页脚 / 开源
footer: {
github: 'GitHub',
repoLinkA11y: '在 GitHub 打开本仓库',
buildLabelTitle: '构建版本',
},
// 通用错误(用于 axios 拦截器等非 React 上下文)
errors: {
invalidCredentials: '邮箱或密码错误',
operationFailed: '操作失败',
unauthorized: '未授权,请重新登录',
networkError: '网络错误,请稍后重试',
encryptFailed: '密码加密失败,请刷新页面重试',
publicKeyFailed: '获取安全公钥失败,请刷新页面重试',
},
}
export default zh