Repository navigation
Expand file tree
/
Copy pathzh-CN.json
More file actions
4302 lines (4302 loc) · 293 KB
/
Copy pathzh-CN.json
File metadata and controls
4302 lines (4302 loc) · 293 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
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"accessibility": {
"title": "颜色对比度审查",
"pageTitle": "无障碍",
"pageSubtitle": "Classroom 50 网页应用如何在 A 级和 AA 级符合 WCAG 2.0、2.1 和 2.2,并在每次构建时检查颜色对比度。",
"nav": {
"contrast": "颜色对比度",
"vpat": "符合性",
"statement": "声明",
"downloads": "报告"
},
"statement": {
"heading": "无障碍声明",
"intro": "我们希望每个人都能使用 Classroom 50,包括使用键盘、屏幕阅读器或其他辅助技术的人。",
"targetHeading": "我们的达标情况",
"target": "我们的目标是达到 WCAG 2.2 AA 级,其中也涵盖了 WCAG 2.0 和 2.1 的 A 级和 AA 级标准。颜色对比度在每次构建时都会检查;其余部分则使用键盘和屏幕阅读器手动检查。合规报告列出了每一项 A 级和 AA 级标准,包括那些不适用于本应用的项目及其原因。",
"limitationsHeading": "已知限制",
"limitations": "符合性报告中有少数几项标记为“部分支持”,每项都附有说明尚待完成的工作。我们会随着工作的推进逐一修复。",
"feedbackHeading": "向我们反馈",
"feedback": "遇到难以使用的地方?请",
"feedbackLink": "提交一个无障碍问题",
"updated": "上次审查于 {{date}}。"
},
"downloads": {
"heading": "报告",
"markdownAction": "Markdown",
"pdfAction": "PDF",
"vpatWcagTitle": "VPAT——WCAG 版",
"vpatWcagDesc": "针对 WCAG 2.0、2.1 和 2.2 的 A 级和 AA 级的无障碍合规报告(VPAT 2.5Rev)。",
"contrastTitle": "颜色对比度审查",
"contrastDesc": "每一组已审查颜色在两种主题下的逐对对比度。",
"fullTitle": "完整报告",
"fullDesc": "将 VPAT 与颜色对比度审查合并为一份文档。"
},
"print": {
"reportTitle": "{{vendor}} 无障碍合规报告",
"reportMeta": "标准:{{standard}},目标级别 {{target}}。适用标准:WCAG {{versions}},A 级和 AA 级。报告日期:{{date}}。",
"vpatSummary": "摘要(共 {{total}} 项标准):{{supports}} 项支持,{{partially}} 项部分支持,{{doesNotSupport}} 项不支持,{{notApplicable}} 项不适用,{{notEvaluated}} 项未评估。",
"contrastTitle": "颜色对比度审查",
"contrastMeta": "每一组已审查颜色在两种主题下的逐对 WCAG 对比度。生成于 {{date}}。",
"colColors": "颜色(前景 / 背景)",
"belowMargin": "(低于推荐的 {{margin}}:1)",
"productWithVersion": "{{product}},版本 {{version}}",
"reportProduct": "WCAG 版(基于 VPAT 2.5Rev)。产品名称/版本:{{product}}。"
},
"loadError": "无法加载对比度审查报告。",
"summaryPass": "全部 {{total}} 组已审查颜色配对均达到其 WCAG 对比度下限。",
"summaryPassMargin_one": "全部 {{total}} 组已审查颜色配对均达到其 WCAG 对比度下限。其中 {{count}} 组通过,但低于我们推荐的安全余量。",
"summaryPassMargin_other": "全部 {{total}} 组已审查颜色配对均达到其 WCAG 对比度下限。其中 {{count}} 组通过,但低于我们推荐的安全余量。",
"summaryFail": "有 {{failures}} 组颜色配对低于 WCAG 对比度下限。",
"criteria": {
"aboutHeading": "关于本次审查",
"standardText": "WCAG 2.2 —— 文本适用 1.4.3 对比度(最低要求,AA),UI 组件适用 1.4.11 非文本对比度。调色板遵循 GitHub 的 Primer 基础元素,其目标为 AA 级。",
"thresholdsHeading": "所需最低值(WCAG 下限):",
"bodyText": "正文文本 ≥ {{body}}:1",
"largeText": "大号文本 ≥ {{large}}:1",
"nonText": "非文本(UI 组件)≥ {{nonText}}:1",
"marginHeading": "推荐的安全余量",
"marginWhy": "我们让每一组配对都略高于 WCAG 最低要求——预留出的余量可吸收抗锯齿、亚像素渲染以及未来的调色板调整。这只是建议,并非符合性所必需。",
"enhancedHeading": "增强级 (AAA)",
"enhancedWhy": "每对配色还会依据更严格的 1.4.6 增强级下限进行评分(正文 ≥ {{body}}:1,大字体 ≥ {{large}}:1)。此项仅出于透明性而报告,并非必需——合规目标为 AA 级。",
"generated": "生成于 {{generated}}"
},
"col": {
"pair": "配对",
"description": "前景 / 表面",
"preview": "预览",
"ratio": "对比度",
"floor": "最低要求",
"status": "状态"
},
"preview": {
"open": "查看颜色详情",
"openFor": "查看 {{pair}} 的颜色详情"
},
"detail": {
"foreground": "前景(文本)",
"background": "背景(表面)",
"sampleHeading": "示例文本",
"sampleBody": "The quick brown fox jumps over the lazy dog.",
"ratio": "对比度",
"minimum": "WCAG 最低要求({{floor}}:1)"
},
"status": {
"pass": "通过",
"fail": "未通过",
"exempt": "豁免"
},
"marginInfo": "{{ratio}}:1 达到了 WCAG 最低要求 {{floor}}:1,但低于我们推荐的目标 {{margin}}:1——仍算通过,只是余量较小。",
"legend": {
"heading": "图例",
"pass": "达到 WCAG 最低要求",
"passMargin": "通过,但低于推荐余量(信息图标显示具体数值)",
"fail": "低于 WCAG 最低要求",
"exempt": "不在 WCAG 范围内(装饰性 / 已禁用)"
},
"vpat": {
"heading": "符合性报告(VPAT)",
"loadError": "无法加载符合性报告。",
"generated": "报告日期 {{generated}}",
"principleTabsAria": "WCAG 原则",
"searchPlaceholder": "搜索标准…",
"searchAria": "搜索符合性标准",
"filterAll": "全部状态",
"filterAria": "按符合性状态筛选",
"empty": "没有标准符合此筛选条件。",
"sortBy": "排序方式",
"sort": {
"criterion": "标准",
"status": "符合性"
},
"col": {
"criterion": "标准",
"level": "级别",
"conformance": "符合性",
"assessed": "评估情况",
"remarks": "备注"
},
"status": {
"supports": "支持",
"partially": "部分支持",
"doesNotSupport": "不支持",
"notApplicable": "不适用",
"notEvaluated": "未评估"
},
"principle": {
"Operable": "可操作",
"Perceivable": "可感知",
"Robust": "健壮",
"Understandable": "可理解"
},
"since": {
"wcag21": "WCAG 2.1 和 2.2",
"wcag22": "仅 WCAG 2.2"
},
"tabAll": "全部"
}
},
"actionsBanner": {
"totalActions_one": "{{count}} 个操作",
"totalActions_other": "{{count}} 个操作",
"failedActions_one": "{{count}} 个操作失败",
"failedActions_other": "{{count}} 个操作失败",
"viewRun": "查看运行",
"retry": "重试",
"retryFailed": "无法重新运行该操作:{{detail}}",
"pollError": "无法检查状态,正在重试…",
"dismiss": "关闭",
"state": {
"pending": "{{label}}:正在启动…",
"running": "{{label}}…",
"success": "{{label}}:完成",
"failed": "{{label}}:失败",
"superseded": "{{label}}:已并入更新的一次发布"
},
"workflow": {
"publishPages": "正在发布到学生站点",
"publishClassroom": "正在发布“{{name}}”的设置",
"collectScores": "正在收集成绩",
"regrade": "正在重新评分",
"generic": "GitHub Actions 工作流",
"collectScoresAssignment": "正在收集“{{classroom}}”中“{{assignment}}”的成绩",
"collectScoresClassroom": "正在收集“{{classroom}}”中每个作业的成绩",
"probeToken": "正在测试服务令牌"
},
"publishFailure": {
"deployLockCleared": "此前阻塞本次发布的那次发布已完成。你的更改已保存。请重试以立即发布。",
"deployLocked": "GitHub Pages 仍在完成此前的一次发布,因此本次发布无法开始。你的更改已保存。此前的发布通常会在 10 分钟内完成:届时重试,或现在取消它。",
"outage": "GitHub Pages 返回了服务器错误。你的更改已保存。请查看 githubstatus.com,然后重试。",
"pagesDisabled": "classroom50 仓库的 GitHub Pages 已关闭,因此任何内容都无法到达学生站点。你的更改已保存。请在组织设置中重新运行安装以重新开启 Pages,然后重试。",
"permission": "发布工作流无权写入 GitHub Pages。你的更改已保存。请更新组织的工作流文件(有更新可用时会显示横幅),然后重试。",
"timeout": "GitHub Pages 未能在 10 分钟内完成部署。你的更改已保存。这通常是 GitHub 变慢所致:请重试,如果反复出现,请查看 githubstatus.com。",
"unstick": "取消卡住的发布并重试",
"unstickFailed": "无法取消此前的发布:{{detail}}。它会在大约 10 分钟内自行清除。届时重试。",
"unsticking": "正在取消…"
}
},
"common": {
"checkingOrgAccess": "正在检查你对该组织的访问权限……",
"resolvingRole": "正在检查你的角色……",
"goToDashboard": "前往仪表板",
"close": "关闭",
"cancel": "取消",
"save": "保存",
"edit": "编辑",
"clear": "清除",
"clearFilter": "清除筛选",
"loading": "加载中……",
"loadingApp": "正在加载 Classroom 50",
"working": "处理中……",
"done": "完成",
"yes": "是",
"no": "否",
"skipToMainContent": "跳到主要内容",
"openOrgOnGitHub": "在 GitHub 上打开 {{org}}",
"dismissNotification": "关闭通知",
"linkToSection": "链接到{{section}}",
"pagination": {
"show": "显示",
"entries": "条",
"showAria": "每页行数",
"range": "第 {{from}} 至 {{to}} 条,共 {{total}} 条",
"navAria": "分页",
"previous": "上一页",
"next": "下一页"
},
"actionWithCount": "{{label}}({{count}})",
"actions": "操作",
"clearSelection": "清除选择"
},
"notFound": {
"title": "找不到页面",
"message": "该页面不存在,或者你没有访问权限。"
},
"error": {
"title": "出现问题",
"unexpected": "发生了意外错误。",
"reload": "重新加载",
"roleResolveFailed": "无法验证你对此课堂的访问权限。"
},
"permissionDenied": {
"title": "你没有权限",
"message": "此操作需要比你在此课堂中更高的角色。如果你的角色最近有变动,请尝试返回。",
"back": "返回课堂"
},
"missingParams": {
"message": "此链接不完整。请返回后重试。"
},
"nav": {
"appName": "Classroom 50",
"openMenu": "打开菜单",
"closeMenu": "关闭菜单",
"primary": "主要",
"expandSidebar": "展开侧边栏",
"collapseSidebar": "收起侧边栏",
"allClasses": "所有课堂",
"allClassesLink": "所有课堂",
"allAssignments": "所有作业",
"allAssignmentsLink": "所有作业",
"accountMenu": "账户菜单",
"assignments": "作业",
"roster": "名册",
"settings": "设置",
"submissions": "提交",
"mySubmission": "我的提交",
"manageGroup": "管理小组",
"acceptAssignment": "接受作业",
"myClasses": "我的课堂",
"published": "已发布",
"members": "成员",
"activity": "活动",
"organizations": "组织",
"userFallback": "用户",
"avatarAlt": "{{name}} 的头像",
"roleTeacher": "教师",
"roleStudent": "学生",
"roleTa": "助教",
"roleHeadTa": "首席助教",
"viewAs": "以此身份查看",
"viewAsMyself": "我自己({{role}})",
"viewAsMyselfFallback": "教职员工",
"viewAsTA": "助教",
"viewAsHeadTa": "首席助教",
"viewAsStudent": "学生",
"preview": "预览",
"rolePreviewTooltip": "你正在预览某个角色的视图,你的实际权限保持不变。",
"envDev": "开发",
"envPreview": "预览",
"envIndicator": "正在 {{env}} 环境中运行 — 并非生产站点。",
"darkMode": "深色模式",
"lightMode": "浅色模式",
"language": "语言",
"languageDialogTitle": "语言",
"languageDialogDescription": "切换语言或安装翻译好的语言包。",
"signOut": "退出登录",
"about": "关于",
"docs": "文档",
"accessibility": "无障碍",
"backToApp": "返回应用",
"signIn": "登录",
"aboutDialogTitle": "Classroom 50",
"aboutDialogDescription": "此应用的构建与版本信息。",
"aboutVersion": "版本",
"aboutCommit": "提交",
"aboutSupportTitle": "反馈与支持",
"aboutReportIssue": "报告问题",
"aboutReportIssueHint": "发现了漏洞或有功能建议?",
"aboutAskQuestion": "提问",
"aboutAskQuestionHint": "向社区寻求帮助。",
"aboutViewAccessibility": "查看无障碍信息",
"aboutDiagnosticsTitle": "诊断信息",
"aboutDiagnosticsHint": "复制技术细节以附加到错误报告或支持帖子中。不会向任何地方发送数据;仅填入你的剪贴板。",
"aboutDiagnosticsShow": "显示诊断信息",
"aboutDiagnosticsCopy": "复制诊断信息",
"aboutDiagnosticsCopied": "已复制",
"manageGroups": "管理小组",
"mySubmissionTeam": "小组提交",
"aboutViewPrivacy": "查看隐私信息"
},
"auth": {
"signInTitle": "登录",
"signInSubtitle": "使用你的 GitHub 账户登录以继续。",
"exchangingCode": "正在完成登录……",
"signInWithGitHub": "使用 GitHub 登录",
"otherSignInMethods": "其他登录方式",
"otherSignInMethodsHint": "在没有浏览器的机器上使用设备码,或使用个人访问令牌直接登录,无需经过我们的登录服务。",
"useDeviceCode": "改用设备码登录",
"usePersonalAccessTokenClassic": "改用个人访问令牌(经典)",
"usePersonalAccessTokenFineGrained": "改用个人访问令牌(细粒度)",
"footerTagline": "通过 GitHub 管理作业和提交。",
"visitDocs": "访问 Classroom 50 文档",
"accessibility": "无障碍",
"signedInConfirmed": "已登录。你的会话处于活动状态。",
"verifyingSession": "正在验证你的会话……",
"profileUnavailable": "无法获取个人资料",
"signOutClearToken": "退出登录并清除令牌",
"deviceStep1Title": "复制一次性代码",
"deviceCopied": "已复制",
"deviceCopyCode": "复制代码",
"deviceStep2Title": "打开 GitHub 验证页面",
"deviceOpenUri": "打开 {{uri}}",
"deviceStep2Hint": "在那里粘贴代码,授权该应用,然后返回此页面。",
"deviceStep3Title": "请稍候,我们正在自动检查",
"deviceStep3Hint": "你在 github.com 上完成授权后,此页面应会在几秒内检测到。",
"deviceStatus": "第 {{attempts}} 次尝试 · {{seconds}} 秒后重试 · {{expires}} 后过期",
"missingScopesTitle": "缺少部分 GitHub 权限",
"missingScopesBody_one": "此应用需要 <scopes>{{scopes}}</scopes> 权限。在授予之前,某些操作可能会失败。",
"missingScopesBody_other": "此应用需要 <scopes>{{scopes}}</scopes> 权限。在授予之前,某些操作可能会失败。",
"reauthorize": "重新授权",
"reauthorizeHint": "如果重新授权仍无法解决此问题,可能需要组织所有者在组织的 OAuth 策略设置中批准该应用。",
"elevated": {
"title": "请求删除仓库的权限",
"body": "拆除组织会删除仓库。请重新登录以授予该权限。它会一直为 Classroom 50 保持授权,直到你在 GitHub 上撤销为止。",
"revokeTitle": "停止使用删除仓库的权限",
"revokeBody": "重新登录以获取不含该权限的令牌。在你于 GitHub 上撤销此应用的访问权限之前,你之前的令牌在 GitHub 上仍然有效。",
"revokeLink": "在 GitHub 上查看此应用的访问权限",
"browserButton": "在浏览器中继续",
"deviceButton": "使用设备码",
"deviceHint": "当浏览器登录无法返回此页面时(例如在 localhost 上),请使用设备码。"
},
"patTitleClassic": "使用经典个人访问令牌登录",
"patTitleFineGrained": "使用细粒度个人访问令牌登录",
"patClassicIntro": "经典令牌可用于你拥有的每一个组织。",
"patCreateTokenLink": "创建经典令牌",
"patScopesHelp": "该按钮会打开 GitHub 的令牌页面,并已选中 Classroom 50 所需的作用域(scopes)。你可以在生成前在那里查看它们。",
"patFineGrainedIntro": "请输入此令牌应管理的组织。它将成为该令牌的资源所有者。",
"patFineGrainedOrgLabel": "组织名称",
"patFineGrainedOrgPlaceholder": "your-organization",
"patFineGrainedWarning": "细粒度令牌仅适用于一个组织。跨组织的模板作业将失败,且部分访问权限无法事先验证,因此请在令牌页面将“Repository access”设为“All repositories”。",
"patPermissionsHelp": "该按钮会打开 GitHub 的令牌页面,并已选中 Classroom 50 所需的权限。请将资源所有者设为你的组织,并将“Repository access”设为“All repositories”。",
"patFineGrainedLink": "创建细粒度令牌",
"patFineGrainedNeedsOrg": "请在上方输入你的组织,以便为其创建令牌。",
"patTokenLabel": "个人访问令牌",
"patRequired": "请输入个人访问令牌以登录。",
"patPasteInstruction": "复制 GitHub 显示给你的令牌(仅显示一次),然后粘贴到下方。",
"patStorageNote": "该令牌与其他登录方式一样,存储在此浏览器的本地存储中。",
"patSubmit": "使用令牌登录",
"patCancel": "取消",
"errorNetwork": "无法连接到 {{target}}。它可能已停止服务。请检查你的网络连接后重试。",
"errorNetworkProxyTarget": "登录服务",
"errorOffline": "你似乎已离线。登录需要网络连接。请检查你的网络连接后重试。",
"offlineHold": "你已离线。正在等待网络连接以恢复你的会话……",
"sessionExpired": "你的会话已过期。请重新登录以继续。",
"validationStuck": "仍在尝试连接 GitHub 以验证你的会话。这通常是 GitHub、网络或浏览器扩展的临时问题。请重试,或重新登录以重新开始。",
"validationStuckSignIn": "重新登录",
"errorStateMismatch": "登录握手不匹配(可能存在 CSRF)。请重新登录。",
"errorMissingPkce": "本次登录尝试丢失了其安全数据。请重新登录以重新开始。",
"errorClientIdMissing": "此部署尚未配置登录功能(缺少 VITE_GITHUB_CLIENT_ID)。",
"errorDeviceExpired": "该代码已过期。请重新开始登录以获取新代码。",
"errorDeviceDeclined": "你拒绝了授权请求。",
"errorDeviceNoToken": "GitHub 未能完成登录。请重试。",
"errorPatMissingScopes": "该令牌缺少所需的权限({{scopes}})。请在 GitHub 上添加后重试。",
"errorPatRejected401": "该令牌被 GitHub 拒绝(401)。请确认它有效且未过期。",
"privacy": "隐私"
},
"documentTitle": {
"assignments": "作业",
"assignmentSettings": "作业设置",
"roster": "名册",
"organizations": "组织",
"getStarted": "开始使用",
"publishedResources": "已发布资源",
"setup": "设置",
"classroomSettings": "课堂设置",
"organizationSettings": "组织设置",
"settings": "设置",
"newAssignment": "新建作业",
"acceptAssignment": "接受作业",
"members": "成员",
"newClassroom": "新建课堂",
"classes": "课堂",
"mySubmission": "我的提交",
"submissions": "提交",
"activity": "活动",
"manageGroups": "管理小组",
"mySubmissionTeam": "小组提交"
},
"students": {
"addTitle": "添加成员",
"addMoreOptions": "更多添加选项",
"addHint": "输入 GitHub 用户名以添加学生并填写其详细信息,或输入邮箱以发送组织邀请。在学生接受之前,邮件邀请会将你输入的姓名和分组保留在一条待处理的名册行上。",
"addRoleLabel": "角色",
"addStaffHint": "教师、首席助教和助教通过 GitHub 用户名添加。教师和首席助教获得 classroom50 仓库的写入权限;助教获得只读权限。教师会被授予组织所有者身份。",
"usernamePlaceholder": "github-username",
"emailPlaceholder": "student@university.edu",
"sectionPlaceholder": "例如 第 3 节",
"keepStudent": "保留学生",
"unenrollStudent": "取消该学生的报名",
"added": "已添加 {{label}}。",
"invited": "已向 {{label}} 发送组织邀请。",
"emailInviteHint": "仅通过邮件邀请?该地址会立即进入名册,并在学生加入时与其 GitHub 账户匹配——请注意,这是你邀请的地址,不一定是其 GitHub 账户上的邮箱。",
"inviteMetadataFailed": "无法为 {{email}} 准备邀请({{message}}),因此未发送任何内容。请重试;如果持续失败,请删除消息中指出的遗留团队,然后重试。",
"alreadyEnrolled": "{{label}} 已注册到此班级。",
"addFailed": "无法添加 {{label}}:{{message}}",
"membersEnrolledCount_one": "已注册 {{count}} 名成员",
"membersEnrolledCount_other": "已注册 {{count}} 名成员",
"roleStudentCount_one": "{{count}} 名学生",
"roleStudentCount_other": "{{count}} 名学生",
"teacherCount_one": "{{count}} 名教师",
"teacherCount_other": "{{count}} 名教师",
"taCount_one": "{{count}} 名助教",
"taCount_other": "{{count}} 名助教",
"headTaCount_one": "{{count}} 名首席助教",
"headTaCount_other": "{{count}} 名首席助教",
"enrolledCountLoading": "正在加载花名册……",
"somethingWentWrong": "出了点问题。请刷新后重试。",
"unenrollBody": "这将把学生 <label>{{label}}</label> 从 <org>{{org}}</org> 的 {{classroom}} 课堂中移除。学生的作业仓库不会被删除。",
"nativeInviteHint": "学生直接在 github.com 上接受 GitHub 组织邀请,而不是通过 Classroom 50。当某位学生无法使用引导链接时,可分享此链接。",
"studentInviteLinkAria": "学生邀请链接",
"copyInviteLinkAria": "复制邀请链接",
"copied": "已复制",
"copy": "复制",
"onboardingLinkHint": "学生一步即可接受邀请并登录 Classroom 50。这是大多数教学班分享的链接。",
"onboardingLinkAria": "学生引导链接",
"copyOnboardingLinkAria": "复制引导链接",
"resendMissingId": "无法向 {{username}} 重新发送邀请:其名册行没有 GitHub id。请移除该行,然后再次添加他们。",
"resendMalformedId": "无法向 {{username}} 重新发送邀请:“{{githubId}}”不是有效的 GitHub id。请修正 roster.csv 中的 github_id 单元格,然后再试。",
"resendFailed": "无法向 {{username}} 重新发送邀请:{{error}}",
"resend": "重新发送",
"dismiss": "关闭",
"rosterLoadError": "无法从 GitHub 加载花名册。已注册列表可能不完整 —— 这是加载错误,而非空班级。",
"rosterRetry": "重试",
"rosterParseError": "roster.csv 格式错误,无法完整读取。请修复以下行以保持名册准确:",
"rosterParseErrorLine": "第 {{line}} 行:{{message}}",
"rosterEditOnGitHub": "在 GitHub 上编辑 roster.csv",
"rosterRecheck": "重新检查 roster.csv",
"rosterRechecking": "正在重新检查…",
"statusPending": "邀请待接受",
"statusEnrolled": "已注册",
"statusNeedsAttentionInOrg": "未入班",
"statusNeedsAttentionNotInOrg": "不在组织中",
"statusUnlinked": "未关联",
"viewCsvOnGitHub": "查看 roster.csv",
"csvRoster": {
"notice": "来自 roster.csv 的 CSV 名册(由教师维护)。权威的、基于团队的名册和邀请管理功能仅面向教师提供。",
"caption": "来自 roster.csv 的 CSV 花名册",
"colName": "姓名",
"colSection": "分组",
"colRole": "角色",
"invitePending": "已通过邮件邀请——尚未加入",
"empty": "roster.csv 中尚未列出任何人。"
},
"classroomTeamLabel": "班级团队",
"teamNotYet": "尚未加入团队",
"statusLabel": "状态",
"sectionGithub": "GitHub 与注册",
"sectionProfile": "档案",
"notSet": "未设置",
"confirmResendBody": "向 {{label}} 重新发送组织邀请?当前邀请将被取消,并针对 {{org}} 发送一份新邀请。",
"cancelInvite": "取消邀请",
"keepInvite": "保留邀请",
"confirmCancelInviteBody": "取消对 {{label}} 的待处理组织邀请吗?他们将从 {{org}} 的待处理邀请中移除,除非重新邀请,否则不会加入。",
"cancelInviteMissingId": "无法取消 {{label}} 的邀请:档案中没有邀请 id。",
"cancelInviteFailed": "无法取消 {{label}} 的邀请:{{error}}",
"remove": "移除",
"inviteToOrg": "邀请加入组织",
"pendingBanner_one": "有 {{count}} 个待处理邀请尚未被接受。",
"pendingBanner_other": "有 {{count}} 个待处理邀请尚未被接受。",
"unlinkedBanner_one": "有 {{count}} 个名册行尚未关联到 GitHub 账户。",
"unlinkedBanner_other": "有 {{count}} 个名册行尚未关联到 GitHub 账户。",
"reinvite": "重新邀请",
"pendingReview": "查看",
"shareLinksTitle": "分享教学班链接",
"inviteLinksHint": "这些链接不会邀请任何人。请先从名单中邀请学生,然后分享链接,以便每位学生都能接受邀请并登录。",
"onboardingLinkLabel": "班级入门链接",
"nativeInviteLabel": "GitHub 组织邀请链接",
"detailTitle": "成员详情",
"noRosterRowNoEdit": "在此人拥有名册条目后,即可编辑其个人资料详情。",
"inviteEmailLocked": "此地址用于标识待处理的邀请,因此无法在此处更改。要使用其他地址,请取消此邀请并邀请新地址。",
"needsAttentionInOrgHelp": "{{label}} 是组织成员,但尚未注册到此课堂。请在此将其添加为学生——教师或 TA 角色在课堂设置中分配。",
"needsAttentionNotInOrgHelp": "{{label}} 在名册中,但不是组织成员。请邀请他们加入组织以完成注册。",
"linkIntro": "此行尚未关联到 GitHub 账户。将其关联到一个组织成员以完成注册,或移除该行。",
"linkMemberLabel": "关联到组织成员",
"linkMemberPlaceholder": "按用户名或姓名搜索成员",
"linkMemberEmpty": "没有匹配的组织成员。已在名册中的成员不会显示。",
"linkMemberEmptyWiden": "没有匹配的课堂成员。选择“包含不在任何课堂中的组织成员”以搜索组织中的所有人。",
"linkIncludeOrgMembers": "包含不在任何课堂中的组织成员",
"linkOrgMembersLoading": "正在加载组织成员……",
"linkNotInClassroom": "不在任何课堂中",
"linkMemberAction": "关联",
"linkFailed": "无法关联 {{label}}:{{error}}",
"linkRowGone": "{{label}} 的行在关联过程中发生了变化。请刷新名册后重试。",
"linkRowAmbiguous": "有多个完全相同的行与 {{label}} 匹配。请先移除一个重复项,然后再关联另一个。",
"linkMemberNotActive": "{{login}} 不再是活跃的组织成员。请改为邀请他们。",
"linkMemberClaimed": "{{login}} 已有一条名册行,关联会使一个账户对应两条行。",
"linkTeamAddFailed": "{{login}} 已关联到该行,但将其添加到班级团队失败。请打开其行并使用“添加到课堂”重试。",
"removeRowAction": "移除行",
"confirmRemoveRowBody": "移除 {{label}} 的名册行吗?这只会从 roster.csv 中删除该行(没有可操作的 GitHub 账户或邀请)。它可以从课堂仓库的历史记录中恢复。",
"removeRowFailed": "无法移除 {{label}} 的行:{{error}}",
"assignRoleAction": "添加到课堂",
"assignRoleFailed": "无法将 {{label}} 添加到课堂:{{error}}",
"assignRoleNotMember": "{{label}} 不再是组织成员 — 请改为邀请他们。",
"assignRoleNoUsername": "{{label}} 没有记录的 GitHub 用户名 — 请先添加一个再分配角色。",
"roleLabel": "角色",
"changeRoleApply": "更改角色",
"changeRoleSelfBlocked": "你无法在此处更改自己的角色 — 请另一位组织所有者来更改。",
"changeRoleOwnerNotice": "教师会被授予组织所有者权限(对组织的完全控制)。请仅为你信任其拥有所有者权限的人确认。",
"changeRoleNoUsername": "{{label}} 没有记录的 GitHub 用户名 — 无法更改其角色。",
"changeRoleFailed": "无法更改 {{label}} 的角色:{{error}}",
"manageOwnerOnly": "只有组织所有者才能管理邀请和成员资格。",
"inviteRosterFailed": "无法邀请 {{label}}:{{error}}",
"inviteRosterMalformedId": "无法邀请 {{username}}:“{{githubId}}”不是有效的 GitHub id。请修正 roster.csv 中的 github_id 单元格。",
"inviteRosterNoUsername": "{{label}} 没有记录的 GitHub 用户名 — 请先添加一个再邀请。",
"inviteRosterDeferred": "GitHub 对发往 {{label}} 的邀请进行了限流。请等待几分钟后再试。",
"inviteRosterNoneSent": "未向 {{label}} 发送邀请。GitHub 报告他们已被邀请或已是成员。请刷新名册以查看当前状态。",
"filterAll": "所有成员",
"filterEnrolled": "已注册",
"filterPending": "邀请待接受",
"filterNeedsAttentionInOrg": "未入班",
"filterNeedsAttentionNotInOrg": "不在组织中",
"filterUnlinked": "未关联",
"searchPlaceholder": "搜索成员",
"searchLabel": "按姓名、用户名或电子邮件搜索成员",
"filterShowLabel": "按状态或角色筛选成员",
"filterBySectionLabel": "按分组筛选成员",
"filterAllSections": "所有分组",
"sortBy": {
"label": "按姓名排序",
"firstName": "名字",
"lastName": "姓氏"
},
"roleTeacher": "教师",
"roleTa": "助教",
"roleHeadTa": "首席助教",
"roleStudent": "学生",
"noMatch": "没有成员与你的搜索匹配。",
"noneWithStatus": "没有{{status}}的成员。",
"noneInSection": "{{section}} 中没有成员。",
"table": {
"caption": "教学班名单",
"colSelect": "选择",
"colMember": "成员",
"colUsername": "用户名",
"colRoles": "角色",
"colSection": "班级",
"colStatus": "状态",
"colActions": "操作"
},
"bulk": {
"selectAll": "全选学生",
"selectRow": "选择 {{label}}",
"selfNotSelectable": "你无法批量取消注册自己。",
"noneSelectable": "批量操作(发送邀请、取消注册)仅适用于学生。请在班级设置中管理教职人员(教师、首席助教和助教)。",
"selectedCount_one": "已选择 {{count}} 项",
"selectedCount_other": "已选择 {{count}} 项",
"unenroll": "取消注册",
"unenrollSelected_one": "取消注册 {{count}} 名学生",
"unenrollSelected_other": "取消注册 {{count}} 名学生",
"starting": "正在开始……",
"keepTabOpen": "在操作完成前,请保持此标签页打开。",
"progressProcessed": "已处理 {{total}} 个中的 {{processed}} 个",
"done": "完成",
"noInviteId": "此行没有 GitHub id,因此无法重新发送邀请。请移除该行,然后重新添加该学生。",
"malformedInviteId": "roster.csv 中的 github_id 无效,因此无法重新发送邀请。请修正该单元格,然后重试。",
"invite": "发送邀请",
"inviteSelected_one": "向 {{count}} 名学生发送邀请",
"inviteSelected_other": "向 {{count}} 名学生发送邀请",
"inviteNoneInvitable": "请选择有待处理或已过期邀请、或尚未加入组织的学生。没有邮箱地址或 GitHub 用户名的行无法被邀请。",
"inviteTitle": "发送邀请",
"invitedHeadline_one": "已发送 {{count}} 份邀请。",
"invitedHeadline_other": "已发送 {{count}} 份邀请。",
"cancelInvite": "取消邀请",
"cancelSelected_one": "取消 {{count}} 个待处理邀请",
"cancelSelected_other": "取消 {{count}} 个待处理邀请",
"cancelNoneCancellable": "请至少选择一个待处理的邀请以取消。",
"cancelTitle": "取消邀请",
"cancelledHeadline_one": "已取消 {{count}} 个邀请。",
"cancelledHeadline_other": "已取消 {{count}} 个邀请。",
"cancelAlreadyGone": "已消失(不再处于待处理状态)",
"removeRows": "移除行",
"removeRowsSelected_one": "移除 {{count}} 个未关联的名册行",
"removeRowsSelected_other": "移除 {{count}} 个未关联的名册行",
"removeRowsTitle": "移除未关联的名册行",
"confirmRemoveRowsTitle_one": "移除 {{count}} 个未关联的行?",
"confirmRemoveRowsTitle_other": "移除 {{count}} 个未关联的行?",
"confirmRemoveRowsBody_one": "移除 {{count}} 个尚未关联到 GitHub 账户的名册行?这只会从 roster.csv 中删除该行。没有可操作的账户或邀请,并且它可以从课堂仓库的历史记录中恢复。",
"confirmRemoveRowsBody_other": "移除 {{count}} 个尚未关联到 GitHub 账户的名册行?这只会从 roster.csv 中删除这些行。没有可操作的账户或邀请,并且它们可以从课堂仓库的历史记录中恢复。",
"removedRowsHeadline_one": "已移除 {{count}} 个未关联的行。",
"removedRowsHeadline_other": "已移除 {{count}} 个未关联的行。",
"removeRowsMissed_one": "有 {{count}} 行在移除过程中发生了变化(可能已被关联),因此被保留。",
"removeRowsMissed_other": "有 {{count}} 行在移除过程中发生了变化(可能已被关联),因此被保留。",
"confirmCancelTitle_one": "取消 {{count}} 个邀请吗?",
"confirmCancelTitle_other": "取消 {{count}} 个邀请吗?",
"confirmCancelBody_one": "此操作会取消 {{count}} 个待处理的组织邀请。除非重新邀请,否则该成员不会加入。",
"confirmCancelBody_other": "此操作会取消 {{count}} 个待处理的组织邀请。除非重新邀请,否则这些成员不会加入。",
"alreadyRemoved": "已移除。",
"unenrollTitle": "取消注册学生",
"unenrolledHeadline_one": "已取消注册 {{count}} 名学生。",
"unenrolledHeadline_other": "已取消注册 {{count}} 名学生。",
"resultSkipped": "已跳过",
"resultFailed": "失败",
"resultWarnings": "警告",
"confirmUnenrollTitle_one": "取消注册 {{count}} 名学生?",
"confirmUnenrollTitle_other": "取消注册 {{count}} 名学生?",
"confirmUnenrollBody_one": "这会将 {{count}} 名学生从班级团队中移除并删除其花名册记录。这不会将其从组织中移除。",
"confirmUnenrollBody_other": "这会将 {{count}} 名学生从班级团队中移除并删除其花名册记录。这不会将其从组织中移除。",
"confirmInviteTitle_one": "发送 {{count}} 份邀请?",
"confirmInviteTitle_other": "发送 {{count}} 份邀请?",
"confirmInviteBodyPlain_one": "向所选学生发送新的组织邀请?待处理邀请将被取消并重新发送,已过期的邀请将被替换。学生接受后即加入组织和班级团队。",
"confirmInviteBodyPlain_other": "向所选的 {{count}} 名学生发送新的组织邀请?待处理邀请将被取消并重新发送,已过期的邀请将被替换。学生接受后即加入组织和班级团队。",
"confirmUnenrollWarning": "重新登记意味着要再次将每名学生加入花名册。他们的作业仓库不会被删除。",
"alreadyInvitedOrMember": "已受邀或已是成员。未发送任何新邀请。",
"cancelInviteConfirm_one": "取消邀请",
"cancelInviteConfirm_other": "取消邀请",
"nextBatch": "正在准备下一批…"
},
"emptyTitle": "还没有成员",
"emptyBody": "先从名册邀请学生以将其加入(或在设置中添加教师和助教)——引导链接本身不会添加任何人,它只是让已受邀的学生能够接受。当有人接受邀请并登录后,他们就会显示在这里。",
"pendingOwnerOnly": "待处理的邀请仅对组织所有者可见,因此不会显示在这里。已注册的成员(下方)始终显示。",
"syncRosterTitle": "检查 GitHub 上的名单变更",
"syncNow": "刷新名单",
"syncActive": "正在刷新名单……",
"syncActiveHelp": "正在检查 GitHub 上的名单变更。此过程在后台运行,因此你可以继续操作名单。",
"syncHelp": "检查你的教学班 GitHub 团队和邀请中是否有新变化,然后更新名单以保持一致。它会捕捉加入或离开的成员、已接受的邀请以及角色变更。打开此页面时也会自动运行。",
"rosterUpdatedAgo": "更新于 {{when}}",
"syncResultNoChanges": "上次刷新无变更",
"syncResultChanges_one": "上次刷新有 {{count}} 项变更",
"syncResultChanges_other": "上次刷新有 {{count}} 项变更",
"syncUpToDate": "花名册已是最新。",
"syncAdded_one": "已将 {{count}} 名团队成员添加到花名册。",
"syncAdded_other": "已将 {{count}} 名团队成员添加到花名册。",
"syncMatchedEmails_one": "已将 {{count}} 个受邀邮箱匹配到 GitHub 账户。",
"syncMatchedEmails_other": "已将 {{count}} 个受邀邮箱匹配到 GitHub 账户。",
"syncRosterDone": "名册已更新。",
"syncFailed": "无法刷新名册:{{error}}",
"resendAllRateLimitedShort": "已发送 {{resent}} 封邀请,随后触发了 GitHub 的速率限制。其余的未发送。请等待几分钟后再试。",
"share": "分享",
"groupBy": {
"label": "分组方式",
"none": "不分组",
"role": "按角色分组",
"section": "按班级分组"
},
"editRoster": {
"button": "编辑",
"title": "编辑名册",
"hint": "编辑姓名和分组,并关联没有 GitHub 账户的行。在你保存之前不会写入任何内容,所有暂存的更改会合并到一次提交中。",
"stagedCount_one": "{{count}} 项暂存更改",
"stagedCount_other": "{{count}} 项暂存更改",
"save": "保存更改",
"saving": "正在保存……",
"cancel": "取消",
"discardTitle": "放弃暂存的更改?",
"discardBody_one": "{{count}} 项未保存的更改将会丢失。",
"discardBody_other": "{{count}} 项未保存的更改将会丢失。",
"discardConfirm": "放弃更改",
"firstName": "名字",
"lastName": "姓氏",
"section": "分组",
"linkLabel": "关联到组织成员",
"linkPlaceholder": "关联到一个成员",
"linkEmpty": "没有匹配的成员。已在名册中,或已在另一行暂存的账户不会显示。",
"linkEmptyWiden": "没有匹配的课堂成员。选择上方的“包含不在任何课堂中的组织成员”以搜索组织中的所有人。",
"includeOrgMembers": "包含不在任何课堂中的组织成员",
"orgMembersLoading": "正在加载组织成员……",
"notInClassroom": "不在任何课堂中",
"savedToast_one": "已保存 {{count}} 项名册更改。",
"savedToast_other": "已保存 {{count}} 项名册更改。",
"missedToast_one": "有 {{count}} 项更改无法应用:{{details}}。请刷新后重试。",
"missedToast_other": "有 {{count}} 项更改无法应用:{{details}}。请刷新后重试。",
"teamAddFailed_one": "{{logins}} 已关联,但无法添加到班级团队。请打开该行重试。",
"teamAddFailed_other": "{{logins}} 已关联,但无法添加到班级团队。请打开它们的行重试。",
"saveFailed": "无法保存名册编辑:{{error}}",
"reasonRowGone": "{{label}}(该行在编辑过程中发生了变化)",
"reasonAmbiguous": "{{label}}(有多个完全相同的行与之匹配)",
"reasonIdentityClaimed": "{{label}}(已有一条名册行)",
"reasonMemberNotActive": "{{label}}(不是活跃的组织成员)"
},
"noSection": "无班次",
"addButton": "添加成员",
"submitting": "正在提交……",
"firstNamePlaceholder": "名",
"lastNamePlaceholder": "姓",
"editEmailPlaceholder": "student@university.edu",
"emailLabel": "邮箱",
"editSectionPlaceholder": "分组(例如第 3 节课)",
"sectionLabel": "班次",
"githubIdentity": "GitHub:<username>@{{username}}</username>(id {{id}})",
"githubIdentityNoId": "GitHub:<username>@{{username}}</username>",
"saving": "正在保存……",
"saveChanges": "保存更改",
"startingImport": "正在开始导入……",
"importFailed": "导入失败。请重新运行以重试。",
"uploadTitle": "上传名册",
"downloadTemplate": "下载模板",
"uploadDropPrompt": "将文件拖放到此处,或点击选择",
"uploadHintAll": "带有 github_id、username 或 email 列的名册 CSV——或者一份纯粹的 GitHub 用户名或电子邮件地址列表,每行一个。仅含邮箱的行将通过邮件邀请。",
"detectedFormat": "将文件读取为",
"uploadKindRosterCsv": "名册 CSV",
"uploadKindUsernameList": "GitHub 用户名(每行一个)",
"uploadKindEmailList": "电子邮件地址(每行一个)",
"chooseFile": "选择文件",
"supportedFormats": "支持格式:.csv、.txt",
"fileLabel": "文件:{{fileName}}",
"githubUsernameColumn": "GitHub 用户名",
"nameColumn": "姓名",
"firstNameColumn": "名字",
"lastNameColumn": "姓氏",
"emailColumn": "电子邮件",
"sectionColumn": "分组",
"noUsableRows": "在此文件中未找到可用的行。每行都需要一个 github_id、一个 GitHub 用户名或一个电子邮件地址。",
"missingIdentityHeader": "此文件没有可标识学生的列。",
"expectedHeaders": "添加一个至少包含以下某一列的表头行:{{headers}}。你也可以包含 first_name、last_name、name、section 和 role。或者上传一个文本文件,每行一个 GitHub 用户名或电子邮件地址。",
"malformedCsv": "此文件无法解析为 CSV。",
"importBlocked_one": "有 {{count}} 行无法导入,因此尚未做出任何更改。",
"importBlocked_other": "有 {{count}} 行无法导入,因此尚未做出任何更改。",
"importBlockedHint": "修正这些行并重新上传文件。再次导入是安全的——已在课堂中的学生不会受到影响。",
"importRetryLookup": "重新检查",
"importSkipped_one": "已跳过 {{count}} 行:它没有 GitHub 用户名、github_id 或电子邮件地址,因此目前无法联系到该学生。下方的其他所有人仍会被导入。",
"importSkipped_other": "已跳过 {{count}} 行:它们没有 GitHub 用户名、github_id 或电子邮件地址,因此目前无法联系到这些学生。下方的其他所有人仍会被导入。",
"dropBadEmail": "第 {{line}} 行:<v>{{value}}</v> 不是有效的电子邮件地址。",
"dropBadUsername": "第 {{line}} 行:<v>{{value}}</v> 不是有效的 GitHub 用户名。",
"dropBadValue": "第 {{line}} 行:<v>{{value}}</v> 既不是 GitHub 用户名也不是电子邮件地址。",
"dropIncomplete": "第 {{line}} 行:没有 GitHub 用户名、github_id、电子邮件地址或姓名。",
"dropUnresolvedId": "第 {{line}} 行:github_id <v>{{value}}</v> 与任何 GitHub 账户都不匹配。我们不会回退到 username 列,因为那可能会邀请到错误的人。",
"dropIdLookupFailed": "第 {{line}} 行:无法连接到 GitHub 以查找 github_id <v>{{value}}</v>。请稍后重试——我们不会回退到 username 列,因为那可能会邀请到错误的人。",
"dropIdLookupCapped": "第 {{line}} 行:此文件中的 github_id 值过多,无法一次性检查,因此未查找 <v>{{value}}</v>。请删除 github_id 列,让 username 列标识每一行,或拆分文件。",
"previewInviteByEmail": "通过邮件邀请",
"previewEmailOnRoster": "通过邮件邀请——已在名册中",
"previewPreviousUsernameHint": "文件中为 {{username}}",
"preflightIdentityConfirmTitle": "导入前请核对这些账户",
"preflightIdentityHint": "这些行中的 github_id 属于与其旁边的用户名不同的账户——通常是因为学生重命名了其 GitHub 账户。我们将使用该 id 所属的账户,并在名册上更正用户名。",
"preflightIdentityDetail": "文件中为 {{declared}},id {{id}}",
"preflightConfirmIdentity_one": "我确认使用其 github_id 所属的账户导入 {{count}} 行。",
"preflightConfirmIdentity_other": "我确认使用其 github_id 所属的账户导入 {{count}} 行。",
"preflightTeacherEmailNotice_one": "还将有 {{count}} 人被邀请为组织所有者(OWNER)。",
"preflightTeacherEmailNotice_other": "还将有 {{count}} 人被邀请为组织所有者(OWNER)。",
"invitingEmails": "正在发送邮件邀请……",
"emailInviteRosterNotice": "每个受邀地址会立即被添加到 roster.csv 中,附带文件中的任何姓名和分组,并在学生接受时与其 GitHub 账户匹配。在此之前,被邀请者显示为待处理。",
"emailLinksNotice_one": "有 {{count}} 个地址与在此前班级中已拥有 GitHub 账户的学生匹配。他们将被关联到该账户并直接入班,而不是收到邀请。",
"emailLinksNotice_other": "有 {{count}} 个地址与在此前班级中已拥有 GitHub 账户的学生匹配。他们将被关联到这些账户并直接入班,而不是收到邀请。",
"emailLinksConfirm": "将这些地址关联到匹配的 GitHub 账户",
"emailLinkBinding": "{{email}} → @{{login}}({{classroom}})",
"emailLinksDegraded": "有些课堂无法读取,因此可关联的地址可能比显示的更多。",
"unlinkedRosterNotice_one": "有 {{count}} 行有姓名但没有 GitHub 用户名、github_id 或电子邮件。它将作为未关联的行保留在名册中,你稍后可将其关联到一个组织成员。",
"unlinkedRosterNotice_other": "有 {{count}} 行有姓名但没有 GitHub 用户名、github_id 或电子邮件。它们将作为未关联的行保留在名册中,你稍后可将其关联到组织成员。",
"unlinkedKeptNotice_one": "有 {{count}} 行被保留在名册中且没有 GitHub 账户(仅有姓名的行,或无法邀请的地址)。请从名册的“未关联”筛选中将其关联到一个组织成员。",
"unlinkedKeptNotice_other": "有 {{count}} 行被保留在名册中且没有 GitHub 账户(仅有姓名的行,或无法邀请的地址)。请从名册的“未关联”筛选中将它们关联到组织成员。",
"emailInviteSkippedDetail": "已经是成员或已被邀请 — 未发送新邀请。",
"importAndInviteMembers_one": "导入并邀请 {{count}} 名成员",
"importAndInviteMembers_other": "导入并邀请 {{count}} 名成员",
"importMembers_one": "导入 {{count}} 名成员",
"importMembers_other": "导入 {{count}} 名成员",
"confirmChanges": "确认更改",
"noChangesToApply": "没有可应用的更改",
"updateMetadata_one": "更新 {{count}} 名学生",
"updateMetadata_other": "更新 {{count}} 名学生",
"uploadInviteNotice_one": "此操作将向 {{count}} 名尚不是成员的学生发送 GitHub 组织邀请。",
"uploadInviteNotice_other": "此操作将向 {{count}} 名尚不是成员的学生发送 GitHub 组织邀请。",
"uploadTeacherOwnerNotice": "标记为教师的行将以组织所有者身份被邀请,授予对组织的完全控制权。请仅将教师角色分配给你信任其拥有所有者权限的人。",
"uploadEncodingFallbackNotice": "此文件不是 UTF-8 编码,因此按 Windows-1252 读取。请检查下方的姓名和重音符号是否正确——为获得最佳效果,请从 Excel 中导出为“CSV UTF-8”。",
"roleWritebackMalformed": "邀请已发送,但由于 roster.csv 格式错误,无法写入分配的角色。请修正名册中标记的行,然后重新检查 — 角色将在下次同步时保持一致。",
"roleWritebackFailed": "邀请已发送,但将分配的角色写入 roster.csv 失败。角色将在下次同步时保持一致,或重新运行导入以重试。",
"metadataWritebackMalformed": "导入已完成,但由于 roster.csv 格式错误,无法更新学生信息。请修正名册上标记的行,然后重新检查。",
"metadataWritebackFailed": "导入已完成,但将更新后的学生信息写入 roster.csv 失败了。请重新运行导入以重试。",
"roleColumn": "角色",
"assignRoleLabel": "角色",
"rolePreviousHint": "原为 {{role}}",
"invitingUploaded": "正在发送组织邀请…",
"progressProcessed": "已处理 {{processed}} / {{total}}",
"progressPercent": "{{percent}}%",
"keepTabOpen": "导入进行时请保持此标签页打开。正在验证学生并将其添加到课堂。",
"addedCount_one": "已添加 {{count}} 名学生",
"addedCount_other": "已添加 {{count}} 名学生",
"resultAdded": "已添加",
"resultSkipped": "已跳过",
"resultTeamFailures": "团队添加失败",
"resultInvited": "已发送邀请",
"resultInvitesDeferred": "邀请已延迟(受速率限制)",
"inviteDeferredDetail": "GitHub 对这些邀请进行了速率限制 — 请稍后重新运行导入以邀请其余成员。",
"resultInvitesFailed": "邀请失败",
"invitePassFailed": "名册已保存,但发送邀请失败:{{message}}。请重新运行导入以重试邀请。",
"importedAndInvitedCount": "已添加 {{added}} 名学生并发送了 {{invited}} 封邮件邀请。",
"resultEmailInvited": "已通过邮件邀请",
"resultEmailLinked": "已从先前的课堂关联",
"resultEmailSkipped": "已跳过的电子邮件地址",
"resultEmailInvitesDeferred": "邮件邀请已延迟(受速率限制)",
"resultEmailInvitesFailed": "邮件邀请失败",
"emailInvitePassFailed": "名册已保存,但发送邮件邀请失败:{{message}}。请重新运行导入以重试这些邀请。",
"couldNotAddToTeam": "无法将他们添加到班级团队。请打开其行并重试。",
"preflightFailed": "无法检查当前成员资格:{{message}}。请重试。",
"summary_add_one": "待添加",
"summary_add_other": "待添加",
"summary_update_one": "待更新",
"summary_update_other": "待更新",
"summary_skip_one": "已是最新",
"summary_skip_other": "已是最新",
"summaryNoChanges": "此文件与你的名册一致——无需添加或更新。",
"summaryViewDetails": "查看详情",
"summaryHideDetails": "隐藏详情",
"preflightMetadataConfirmTitle": "确认学生信息更新",
"preflightMetadataReviewHint_one": "将更新 {{count}} 名学生的信息。请在确认前查看下方高亮的单元格(悬停可查看详情)。",
"preflightMetadataReviewHint_other": "将更新 {{count}} 名学生的信息。请在确认前查看下方高亮的单元格(悬停可查看详情)。",
"preflightMetadataEmpty": "(空)",
"preflightConfirmMetadata_one": "我确认按上方所列更新 {{count}} 名学生的信息。",
"preflightConfirmMetadata_other": "我确认按上方所列更新 {{count}} 名学生的信息。",
"preflightRoleChangeDetail": "{{from}} → {{to}}",
"preflightRoleChangeMetadataNotice": "其中一些成员还有更新后的信息(显示在上方),这些信息将与团队变更一起保存。",
"preflightConfirmTitle": "处理前确认",
"preflightEnrollOwnerDetail": "以教师身份注册(组织所有者)",
"preflightConfirmRoleChanges_one": "我确认将 {{count}} 名成员如上所列移动到不同的团队。",
"preflightConfirmRoleChanges_other": "我确认将 {{count}} 名成员如上所列移动到不同的团队。",
"preflightRoleChangeOwnerNotice": "一个或多个角色变更会将成员提升为教师,使其成为拥有完全控制权的组织所有者。请仅为你信任其拥有所有者权限的人确认。",
"processRoleChanges": "正在应用角色更改…",
"resultRoleChanged": "已应用角色更改",
"resultRoleChangeFailures": "角色更改失败",
"done": "完成",
"chooseAnotherFile": "选择其他文件",
"usernameLabel": "GitHub 用户名",
"firstNameLabel": "名",
"lastNameLabel": "姓",
"rosterFromCsvNotice": "此列表来自名册文件上次同步时的状态,因为你的角色无法查看班级的 GitHub 团队。此后新增的成员会在老师打开名册后出现。组织所有者可看到实时成员情况。",
"completedRow": "已将 {{label}} 关联到 {{row}} 的现有名册行。",
"emailInviteAlreadyPendingDetail": "已有一封待接受的邀请,因此未发送新邀请。若要再次发送,请在其名册行使用“重新发送”。",
"emailLinksDeclinedNotice_one": "有 {{count}} 个地址与已拥有 GitHub 账户的学生匹配,但不会被关联。它会改为收到一封邮件邀请,并且其名册行在你从名册中关联之前会一直保持未关联状态。",
"emailLinksDeclinedNotice_other": "有 {{count}} 个地址与已拥有 GitHub 账户的学生匹配,但不会被关联。它们会改为收到邮件邀请,并且其名册行在你从名册中关联之前会一直保持未关联状态。",
"emailLinksUnlinkBody_one": "此人已是拥有已知 GitHub 账户的组织成员。GitHub 会跳过向现有成员发送的邮件邀请,因此其名册行会一直保持未关联状态,直到你从名册中手动关联它。",
"emailLinksUnlinkBody_other": "这些人已是拥有已知 GitHub 账户的组织成员。GitHub 会跳过向现有成员发送的邮件邀请,因此其名册行会一直保持未关联状态,直到你从名册中手动关联它们。",
"emailLinksUnlinkConfirm": "不关联",
"emailLinksUnlinkTitle": "发送邮件邀请而不是关联?",
"filterInviteExpired": "邀请已过期",
"identityConflict": "某个名册行已将用户名 {{label}} 用于另一个 GitHub 账户,或另一行已使用该用户名。请在名册中编辑或移除冲突的行,然后再次添加 {{label}}。",
"inviteDailyLimit": "本组织当天的 GitHub 邀请配额已用尽。成立不满一个月或使用免费计划的组织每天可发送 50 封邀请,其他组织为 500 封。请明天再试。",
"linkAccountAction": "关联账户",
"needsAttentionExpiredHelp": "发往 {{label}} 的邀请在他们接受之前就已过期。GitHub 邀请有效期为 7 天。请再次邀请他们以完成入班。",
"needsAttentionFailedHelp": "GitHub 无法将邀请投递给 {{label}}({{reason}})。请再次邀请他们以完成入班。",
"previewAlreadyPending": "邀请已在待接受状态",
"previewResendExpired": "重新发送邀请(已过期)",
"previewResendFailed": "重新发送邀请(未投递)",
"reinviteRowAlreadyInvited": "未发送任何内容。GitHub 已对 {{email}} 存在有效邀请或已有对应成员,可能来自本组织的另一个班级。请查看 GitHub 上组织的 People 页面,或在他们接受后将此行关联到该成员。",
"reinviteRowFailed": "无法重新邀请 {{email}}:{{error}}",
"reinviteRowRateLimited": "GitHub 对发往 {{email}} 的邀请进行了限流。请等待几分钟后再试。",
"resendNotSent": "未向 {{label}} 发送新邀请。GitHub 报告该地址已被邀请或已是成员。请刷新名册以查看当前状态。",
"resendRateLimited": "GitHub 对发往 {{label}} 的重新发送进行了限流。请等待几分钟后再试。",
"statusInviteExpired": "邀请已过期",
"statusInviteFailed": "邀请失败",
"unlinkedEmailIntro": "此行未关联到 GitHub 账户,且 {{email}} 没有待接受的邀请。邀请可能已过期或被取消。请重新邀请他们、将此行关联到某个组织成员,或移除此行。",
"unlinkedExpiredIntro": "发往 {{email}} 的邀请在被接受之前就已过期。GitHub 邀请有效期为 7 天。请重新邀请他们、将此行关联到某个组织成员,或移除此行。",
"unlinkedFailedIntro": "GitHub 无法将邀请投递给 {{email}}({{reason}})。请核对地址,然后重新邀请他们、将此行关联到某个组织成员,或移除此行。",
"uploadBlockedChecking": "正在检查当前成员情况…",
"uploadBlockedDetails": "请确认上方的详情更新以继续。",
"uploadBlockedRoles": "请确认上方的角色变更以继续。",
"uploadBlockedUsernames": "请确认上方的用户名变更以继续。",
"rosterProblemDuplicateColumn": "列“{{name}}”出现了多次。请保留一个并删除其余的。",
"rosterProblemFormulaColumn": "列名“{{name}}”以 =、+、- 或 @ 开头,电子表格会将其当作公式。请重命名。",
"rosterProblemReservedColumn": "列“{{name}}”是内置名册列,之后又再次出现。请删除多余的副本。"
},
"language": {
"baseName": "英语(基础)",
"activeLabel": "当前语言",
"activeHint": "选择一种已安装的语言,或选择标有 ⬇ 的语言以下载并安装它。",
"optionDownload": "⬇ {{language}}",
"switcherLabel": "更改语言",
"switcherInstalled": "现已可用",
"switcherMore": "更多语言",
"shareTitle": "分享语言链接",
"shareHint": "复制一个以特定语言打开站点的链接——便于分享给使用该语言的学生(例如西班牙语)。",
"shareLanguageLabel": "要分享的语言",
"shareUrlLabel": "可分享的链接",
"shareCopy": "复制",
"shareCopied": "已复制",
"installedTitle": "已安装的语言包",
"sourceRegistry": "注册表",
"sourceUser": "由你加载",
"browseLoading": "正在加载可用语言……",
"installTitle": "从文件或 URL 安装",
"installHint": "安装语言包:翻译基础英文文件 en.json,然后在此加载。语言代码会从文件名中自动识别;仅当识别失败时才需在下方手动输入。",
"codePlaceholder": "语言代码(例如 de)",
"codeOptionalLabel": "语言代码(可选)",
"uploadFile": "上传 JSON 文件",
"urlPlaceholder": "……或粘贴一个 URL",
"urlLabel": "从 URL 导入语言包",
"fetch": "获取",
"removePack": "移除 {{code}} 语言包",
"previewTitle": "预览:{{code}}",
"previewCoverage": "已翻译 {{percent}}%({{keys}} 条字符串)",
"previewSampleLabel": "示例",
"previewConfirm": "应用 {{code}}",
"previewCancel": "取消",
"errorCodeUndetectable": "无法从文件中识别语言代码——请在下方输入后重试。",
"errorUrlRequired": "请输入用于获取语言包的 URL。",
"errorRegistry": "无法加载可用语言。请重试。",
"errorGeneric": "无法安装该语言包。请检查文件是否为有效的 JSON,然后重试。",
"updatedToast_one": "已将 {{list}} 语言包更新至最新译文。",
"updatedToast_other": "已将 {{count}} 个语言包({{list}})更新至最新译文。",
"refresh": "刷新",
"refreshDone": "已是最新",
"refreshList": "刷新语言列表"
},
"validation": {
"githubOrEmailRequired": "请输入 GitHub 用户名或电子邮箱。",
"validEmail": "请输入有效的电子邮箱地址。",
"classroomNameRequired": "班级名称为必填项。",
"classroomSlugRequired": "班级标识(slug)为必填项。",
"classroomSlugTaken": "该班级标识(slug)已被使用。",
"classroomSlugInvalid": "班级标识(slug)必须{{description}}。",
"classroomSlugTooLong": "班级标识(slug)为 {{length}} 个字符;新班级上限为 {{max}} 个字符。它会作为每个学生仓库名称的前缀,而 GitHub 将仓库名称限制为 {{limit}} 个字符。",
"assignmentSlugTaken": "此班级中已存在名为“{{slug}}”的作业。",
"groupSizeRange": "小组人数必须是介于 {{min}} 和 {{max}} 之间的整数。",
"customDomainInvalid": "请输入类似 pages.example.edu 的域名或完整的 https:// URL(不含查询参数、片段或末尾斜杠)。",
"classroomSlugReservedEnding": "班级 slug 不能以 -{{suffix}} 结尾。Classroom 50 将该结尾保留用于教学团队名称(classroom50-<slug>-{{suffix}})。请选择不以 -teacher、-hta 或 -ta 结尾的 slug。",
"classroomSlugSiblingExists": "该班级 slug 会与现有班级 {{other}} 共用同一个教学团队名称。请选择不同的 slug。"
},
"toasts": {
"classroomSettingsSaved": "课堂设置已保存。正在发布到学生站点——上方横幅会显示进度。",
"classroomSaveConflict": "无法保存——另一处更改先一步生效。请重试。",
"assignmentCreated": "作业已创建。正在发布到学生站点,稍后即会出现——上方横幅会显示进度。",
"publishingAssignment": "正在将“{{name}}”发布到学生站点",
"classroomCreated": "课堂已创建。正在发布到学生站点,稍后即会出现——上方横幅会显示进度。",
"invited": "已邀请 {{who}} 加入 {{org}} 组织。",
"staffAdded": "已将 @{{username}} 添加为{{role}}。",
"classroomCreateFailed": "无法创建课堂:{{message}}",
"classroomSaveFailed": "无法保存课堂设置:{{message}}",
"assignmentCreatedLocked": "作业已创建并锁定。在你通过其设置或操作菜单解锁之前,学生无法看到或接受该作业。"
},
"orgs": {
"headingCl50": "Classroom 50 组织",
"loadingTitle": "正在加载你的组织……",
"loadError": "无法从 GitHub 加载你的组织。它们仍然存在。请稍后重试。",
"retry": "重试",
"emptyTitle": "还没有 Classroom 50 组织",
"emptyBody": "你所属的使用 Classroom 50 的组织会显示在这里。如果你预期会看到某个组织,请让你的老师确认已将你添加进去,然后刷新。",
"toolbar": {
"searchPlaceholder": "搜索组织",
"searchLabel": "搜索组织",
"view": {
"label": "视图",
"gridLabel": "网格视图",
"listLabel": "列表视图"
},
"sort": {
"label": "排序",
"nameAsc": "名称(A–Z)",
"lastModified": "最后修改",
"status": "状态"
}
},
"noResults": {
"title": "没有组织与你的搜索匹配",
"body": "没有组织与“{{query}}”匹配。",
"clear": "清除搜索"
},
"setUpFirst": {
"title": "设置你的第一个 Classroom 50 组织",
"body": "你拥有尚未设置的组织。配置 Classroom 50 即可开始创建课堂和作业。",
"cta": "设置组织"
},
"newOrg": {
"button": "设置新组织",
"title": "设置新的 Classroom 50 组织",
"description": "选择你的一个 GitHub 组织来配置 Classroom 50。没看到想要的组织?请先在 GitHub 上创建它。",
"pickPrompt_one": "可供设置的组织({{count}})",
"pickPrompt_other": "可供设置的组织({{count}})",
"createOnGitHub": "在 GitHub 上创建组织",
"allSetUp": "我们能看到的所有组织都已设置完毕。",
"refresh": "刷新",
"refreshing": "正在刷新…",
"setUp": "设置",
"notSupportedBadge": "不支持",
"newBadge": "新",
"details": "详情",
"freePlanInfo": {
"title": "此组织使用的是免费套餐",
"body": "Classroom 50 仅适用于使用 GitHub Team 或 Enterprise 套餐的组织。",
"educationTitle": "免费获取 GitHub Team",
"educationBody": "作为已认证的教师,你可以通过 GitHub Education 免费将你拥有的任何组织升级到 GitHub Team。",
"educationCta": "在 GitHub Education 了解更多",
"dismiss": "知道了"
}
},
"missingNotice": {
"title": "没有看到你的组织?",
"body": "GitHub 只会列出你已授予 Classroom 50 访问权限的组织——仅有 GitHub Education 账户是不够的。",
"steps": {
"grant": "在你的 GitHub OAuth 设置中,在该组织旁选择 Grant(授予)。",
"grantHelp": "如果该组织限制第三方应用,你会看到 Request access(请求访问),需要由组织所有者批准。若使用 SAML 单点登录,请在同一页面上使用 Configure SSO(配置 SSO)。",
"refresh": "回到此处并刷新列表。"
},
"reauthorizeHelp": "完全没有列出任何组织?请重新授权——在你加入之前签发的令牌无法看到它们。你尚未接受的邀请会显示在待处理邀请中。",
"manageOauth": "管理 GitHub OAuth 访问权限"