-
Notifications
You must be signed in to change notification settings - Fork 455
Expand file tree
/
Copy pathen.ts
More file actions
1137 lines (1069 loc) · 59.3 KB
/
en.ts
File metadata and controls
1137 lines (1069 loc) · 59.3 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
/**
* English translations — source of truth.
* Every key defined here becomes part of the `TranslationKey` type.
* Other locale files must implement `Record<TranslationKey, string>`.
*/
const en = {
// ── Navigation ──────────────────────────────────────────────
'nav.chats': 'Chats',
'nav.extensions': 'Extensions',
'nav.settings': 'Settings',
'nav.autoApproveOn': 'Auto-approve is ON',
'nav.lightMode': 'Light mode',
'nav.darkMode': 'Dark mode',
'nav.toggleTheme': 'Toggle theme',
'nav.bridge': 'Bridge',
'nav.cliTools': 'CLI Tools',
// ── Chat list panel ─────────────────────────────────────────
'chatList.justNow': 'just now',
'chatList.minutesAgo': '{n}m',
'chatList.hoursAgo': '{n}h',
'chatList.daysAgo': '{n}d',
'chatList.newConversation': 'New Conversation',
'chatList.delete': 'Delete',
'chatList.searchSessions': 'Search sessions...',
'chatList.noSessions': 'No sessions yet',
'chatList.importFromCli': 'Import from Claude Code',
'chatList.addProjectFolder': 'Add project folder',
'chatList.threads': 'Threads',
// ── Message list ────────────────────────────────────────────
'messageList.claudeChat': 'CodePilot Chat',
'messageList.emptyDescription': 'Start a conversation with CodePilot. Ask questions, get help with code, or explore ideas.',
'messageList.loadEarlier': 'Load earlier messages',
'messageList.loading': 'Loading...',
// ── Message input ───────────────────────────────────────────
'messageInput.attachFiles': 'Attach files',
'messageInput.helpDesc': 'Show available commands and tips',
'messageInput.clearDesc': 'Clear conversation history',
'messageInput.costDesc': 'Show token usage statistics',
'messageInput.compactDesc': 'Compress conversation context',
'messageInput.doctorDesc': 'Diagnose project health',
'messageInput.initDesc': 'Initialize CLAUDE.md for project',
'messageInput.reviewDesc': 'Review code quality',
'messageInput.terminalSetupDesc': 'Configure terminal settings',
'messageInput.memoryDesc': 'Edit project memory file',
'messageInput.modeCode': 'Code',
'messageInput.modePlan': 'Plan',
'messageInput.modeLabel': 'Mode',
'messageInput.aiSuggested': 'AI Suggested',
// ── Streaming message ───────────────────────────────────────
'streaming.thinking': 'Thinking...',
'streaming.thinkingDeep': 'Thinking deeply...',
'streaming.preparing': 'Preparing response...',
'streaming.generating': 'Generating',
'streaming.allowForSession': 'Allow for Session',
'streaming.allowed': 'Allowed',
'streaming.denied': 'Denied',
// ── Chat view / session page ────────────────────────────────
'chat.newConversation': 'New Conversation',
// ── Settings: General ───────────────────────────────────────
'settings.title': 'Settings',
'settings.description': 'Manage CodePilot and Claude CLI settings',
'settings.general': 'General',
'settings.providers': 'Providers',
'settings.claudeCli': 'Claude CLI',
'settings.codepilot': 'CodePilot',
'settings.version': 'Version {version}',
'settings.checkForUpdates': 'Check for Updates',
'settings.checking': 'Checking...',
'settings.updateAvailable': 'Update available: v{version}',
'settings.viewRelease': 'View Release',
'settings.latestVersion': "You're on the latest version.",
'settings.autoApproveTitle': 'Auto-approve All Actions',
'settings.autoApproveDesc': 'Skip all permission checks and auto-approve every tool action. This is dangerous and should only be used for trusted tasks.',
'settings.autoApproveWarning': 'All tool actions will be auto-approved without confirmation. Use with caution.',
'settings.autoApproveDialogTitle': 'Enable Auto-approve All Actions?',
'settings.autoApproveDialogDesc': 'This will bypass all permission checks. Claude will be able to execute any tool action without asking for your confirmation, including:',
'settings.autoApproveShellCommands': 'Running arbitrary shell commands',
'settings.autoApproveFileOps': 'Reading, writing, and deleting files',
'settings.autoApproveNetwork': 'Making network requests',
'settings.autoApproveTrustWarning': 'Only enable this if you fully trust the task at hand. This setting applies to all new chat sessions.',
'settings.cancel': 'Cancel',
'settings.enableAutoApprove': 'Enable Auto-approve',
'settings.generativeUITitle': 'Generative UI',
'settings.generativeUIDesc': 'Enable interactive visualizations (charts, diagrams, mockups) in chat responses. Disabling saves tokens but removes visual generation capability.',
'settings.language': 'Language',
'settings.languageDesc': 'Choose the display language for the interface',
'settings.usage': 'Usage',
// ── Settings: Appearance ──────────────────────────────────────
'settings.appearance': 'Appearance',
'settings.appearanceDesc': 'Customize the look and feel of CodePilot',
'settings.themeMode': 'Theme Mode',
'settings.themeModeDesc': 'Choose between light, dark, or system preference',
'settings.themeFamily': 'Color Theme',
'settings.themeFamilyDesc': 'Select a color palette for the interface',
'settings.modeLight': 'Light',
'settings.modeDark': 'Dark',
'settings.modeSystem': 'System',
// ── Settings: Usage Stats ───────────────────────────────────
'usage.totalTokens': 'Total Tokens',
'usage.totalCost': 'Total Cost',
'usage.sessions': 'Sessions',
'usage.cacheHitRate': 'Cache Hit Rate',
'usage.input': 'In',
'usage.output': 'Out',
'usage.cached': 'cached',
'usage.dailyChart': 'Daily Token Usage',
'usage.loading': 'Loading...',
'usage.loadError': 'Failed to load usage stats',
'usage.noData': 'No usage data yet',
'usage.noDataHint': 'Start a conversation to see statistics here.',
// ── Settings: CLI ───────────────────────────────────────────
'cli.permissions': 'Permissions',
'cli.permissionsDesc': 'Configure permission settings for Claude CLI',
'cli.envVars': 'Environment Variables',
'cli.envVarsDesc': 'Environment variables passed to Claude',
'cli.form': 'Form',
'cli.json': 'JSON',
'cli.save': 'Save',
'cli.format': 'Format',
'cli.reset': 'Reset',
'cli.settingsSaved': 'Settings saved successfully',
'cli.confirmSaveTitle': 'Confirm Save',
'cli.confirmSaveDesc': 'This will overwrite your current ~/.claude/settings.json file. Are you sure you want to continue?',
// ── Settings: Providers ─────────────────────────────────────
'provider.addProvider': 'Add Provider',
'provider.editProvider': 'Edit Provider',
'provider.deleteProvider': 'Delete Provider',
'provider.deleteConfirm': 'Are you sure you want to delete "{name}"? This action cannot be undone.',
'provider.deleting': 'Deleting...',
'provider.delete': 'Delete',
'provider.noProviders': 'No providers configured',
'provider.addToStart': 'Add a provider to get started',
'provider.quickPresets': 'Quick Presets',
'provider.customProviders': 'Custom Providers',
'provider.active': 'Active',
'provider.configured': 'Configured',
'provider.name': 'Name',
'provider.providerType': 'Provider Type',
'provider.apiKey': 'API Key',
'provider.authToken': 'Auth Token',
'provider.authStyle': 'Auth Style',
'provider.baseUrl': 'Base URL',
'provider.modelName': 'Model Name',
'provider.advancedOptions': 'Advanced Options',
'provider.extraEnvVars': 'Extra Environment Variables',
'provider.notes': 'Notes',
'provider.context1m': '1M Context Window',
'provider.context1mDesc': 'Enable 1M token context for Opus 4.6 and Sonnet 4.6 (beta, higher pricing above 200K)',
'provider.notesPlaceholder': 'Optional notes about this provider...',
'provider.saving': 'Saving...',
'provider.update': 'Update',
'provider.envDetected': 'Detected from environment',
'provider.default': 'Default',
'provider.setDefault': 'Set as Default',
'provider.environment': 'Environment',
'provider.connectedProviders': 'Connected Providers',
'provider.noConnected': 'No providers connected yet',
'provider.connect': 'Connect',
'provider.disconnect': 'Disconnect',
'provider.disconnecting': 'Disconnecting...',
'provider.disconnectProvider': 'Disconnect Provider',
'provider.disconnectConfirm': 'Are you sure you want to disconnect "{name}"? This action cannot be undone.',
'provider.ccSwitchHint': 'Claude Code configurations added via tools like cc switch may not be readable by CodePilot. We recommend re-adding your provider here.',
'provider.addProviderSection': 'Add Provider',
'provider.addProviderDesc': 'Select a provider to connect. Most presets only require an API key.',
// ── Right panel / Files ─────────────────────────────────────
'panel.files': 'Files',
'panel.tasks': 'Tasks',
'panel.openPanel': 'Open panel',
'panel.closePanel': 'Close panel',
// ── File tree ───────────────────────────────────────────────
'fileTree.filterFiles': 'Filter files...',
'fileTree.refresh': 'Refresh',
'fileTree.noFiles': 'No files found',
'fileTree.selectFolder': 'Select a project folder to view files',
// ── File preview ────────────────────────────────────────────
'filePreview.backToTree': 'Back to file tree',
'filePreview.lines': '{count} lines',
'filePreview.copyPath': 'Copy path',
'filePreview.failedToLoad': 'Failed to load file',
// ── Doc preview ─────────────────────────────────────────────
'docPreview.htmlPreview': 'HTML Preview',
// ── Extensions page ─────────────────────────────────────────
'extensions.title': 'Extensions',
'extensions.skills': 'Skills',
'extensions.mcpServers': 'MCP Servers',
// ── Skills ──────────────────────────────────────────────────
'skills.noSelected': 'No skill selected',
'skills.selectOrCreate': 'Select a skill from the list or create a new one',
'skills.newSkill': 'New Skill',
'skills.loadingSkills': 'Loading skills...',
'skills.noSkillsFound': 'No skills found',
'skills.searchSkills': 'Search skills...',
'skills.createSkill': 'Create Skill',
'skills.nameRequired': 'Name is required',
'skills.nameInvalid': 'Name can only contain letters, numbers, hyphens, and underscores',
'skills.skillName': 'Skill Name',
'skills.scope': 'Scope',
'skills.global': 'Global',
'skills.project': 'Project',
'skills.template': 'Template',
'skills.blank': 'Blank',
'skills.commitHelper': 'Commit Helper',
'skills.codeReviewer': 'Code Reviewer',
'skills.saved': 'Saved',
'skills.save': 'Save',
'skills.edit': 'Edit',
'skills.preview': 'Preview',
'skills.splitView': 'Split view',
'skills.deleteConfirm': 'Click again to confirm',
'skills.placeholder': 'Write your skill prompt in Markdown...',
'skills.mySkills': 'My Skills',
'skills.marketplace': 'Marketplace',
'skills.marketplaceSearch': 'Search Skills.sh...',
'skills.install': 'Install',
'skills.installed': 'Installed',
'skills.installing': 'Installing...',
'skills.uninstall': 'Uninstall',
'skills.installs': 'installs',
'skills.source': 'Source',
'skills.installedAt': 'Installed At',
'skills.installSuccess': 'Installation Complete',
'skills.installFailed': 'Installation Failed',
'skills.searchNoResults': 'No skills found',
'skills.marketplaceError': 'Failed to load marketplace',
'skills.marketplaceHint': 'Browse the Skills Marketplace',
'skills.marketplaceHintDesc': 'Search and install community skills from Skills.sh',
'skills.noReadme': 'No description available for this skill',
// ── MCP ─────────────────────────────────────────────────────
'mcp.addServer': 'Add Server',
'mcp.loadingServers': 'Loading MCP servers...',
'mcp.serverConfig': 'MCP Server Configuration',
'mcp.noServers': 'No MCP servers configured',
'mcp.noServersDesc': "Add an MCP server to extend Claude's capabilities",
'mcp.arguments': 'Arguments:',
'mcp.environment': 'Environment:',
'mcp.listTab': 'List',
'mcp.jsonTab': 'JSON Config',
'mcp.editServer': 'Edit Server',
'mcp.serverName': 'Server Name',
'mcp.serverType': 'Server Type',
'mcp.command': 'Command',
'mcp.argsLabel': 'Arguments (one per line)',
'mcp.url': 'URL',
'mcp.headers': 'Headers (JSON)',
'mcp.envVars': 'Environment Variables (JSON)',
'mcp.formTab': 'Form',
'mcp.jsonEditTab': 'JSON',
'mcp.saveChanges': 'Save Changes',
// ── Folder picker ───────────────────────────────────────────
'folderPicker.title': 'Select a project folder',
'folderPicker.loading': 'Loading...',
'folderPicker.noSubdirs': 'No subdirectories',
'folderPicker.cancel': 'Cancel',
'folderPicker.select': 'Select This Folder',
// ── Import session dialog ───────────────────────────────────
'import.title': 'Import Session from Claude CLI',
'import.searchSessions': 'Search sessions...',
'import.noSessions': 'No sessions found',
'import.import': 'Import',
'import.importing': 'Importing...',
'import.justNow': 'just now',
'import.minutesAgo': '{n}m ago',
'import.hoursAgo': '{n}h ago',
'import.daysAgo': '{n}d ago',
'import.messages': '{n} msg',
'import.messagesPlural': '{n} msgs',
// ── Connection status ───────────────────────────────────────
'connection.notInstalled': 'Claude Code is not installed',
'connection.installed': 'Claude Code is installed',
'connection.version': 'Version: {version}',
'connection.installPrompt': 'To use Claude Code features, you need to install the Claude Code CLI.',
'connection.runCommand': 'Run the following command in your terminal:',
'connection.installAuto': 'Install Claude Code Automatically',
'connection.refresh': 'Refresh',
'connection.installClaude': 'Install Claude Code',
'connection.connected': 'Connected',
'connection.disconnected': 'Disconnected',
'connection.checking': 'Checking',
'connection.missingGit': 'Missing Git',
'connection.missingGitTitle': 'Git for Windows required',
'connection.missingGitDesc': 'Claude Code requires Git for Windows to run. Please install it and refresh.',
'connection.conflict': 'Conflict',
'connection.conflictWarning': 'Multiple Claude Code installations detected',
'connection.conflictRemove': 'To remove',
// ── Install wizard ──────────────────────────────────────────
'install.title': 'Install Claude Code',
'install.checkingPrereqs': 'Checking environment...',
'install.alreadyInstalled': 'Claude Code is already installed',
'install.readyToInstall': 'Ready to install',
'install.installing': 'Installing Claude Code...',
'install.complete': 'Installation complete',
'install.failed': 'Installation failed',
'install.copyLogs': 'Copy Logs',
'install.copied': 'Copied',
'install.install': 'Install',
'install.cancel': 'Cancel',
'install.retry': 'Retry',
'install.done': 'Done',
'install.recheck': 'Recheck',
'install.copy': 'Copy',
'install.notDetected': 'not detected',
'install.nativeDescription': 'Claude Code CLI was not detected. Install it using the official native installer?',
'install.autoDescription': 'Automatically install Claude Code CLI',
'install.nativeExplain': 'Click Install to download and run the official native installer. No Node.js required — the native binary auto-updates in the background.',
'install.nativeCompleteDesc': 'Claude Code has been installed via the native installer. It will auto-update in the background.',
'install.conflictTitle': 'Multiple installations detected',
'install.conflictUsing': 'Currently using',
'install.conflictAlso': 'Also found',
'install.conflictRemove': 'To remove',
'install.gitRequired': 'Git for Windows is required',
'install.gitDescription': 'Claude Code requires Git for Windows to run commands on Windows. Please install it first.',
'install.gitSteps': 'Follow these steps:',
'install.gitStep1': 'Download Git for Windows from https://git-scm.com/downloads/win',
'install.gitStep2': 'Run the installer with default settings',
'install.gitStep3': 'Come back here and click "Recheck"',
// ── Task list ───────────────────────────────────────────────
'tasks.all': 'All',
'tasks.active': 'Active',
'tasks.done': 'Done',
'tasks.addPlaceholder': 'Add a task...',
'tasks.addTask': 'Add task',
'tasks.loading': 'Loading tasks...',
'tasks.noTasks': 'No tasks yet',
'tasks.noMatching': 'No matching tasks',
// ── Tool call block ─────────────────────────────────────────
'tool.running': 'running',
'tool.success': 'success',
'tool.error': 'error',
// ── Common ──────────────────────────────────────────────────
'common.cancel': 'Cancel',
'common.save': 'Save',
'common.delete': 'Delete',
'common.loading': 'Loading...',
'common.close': 'Close',
'common.enabled': 'Enabled',
'common.disabled': 'Disabled',
// ── Error boundary ────────────────────────────────────────
'error.title': 'Something went wrong',
'error.description': 'An unexpected error occurred. You can try again or reload the app.',
'error.showDetails': 'Show details',
'error.hideDetails': 'Hide details',
'error.tryAgain': 'Try Again',
'error.reloadApp': 'Reload App',
// ── Update ─────────────────────────────────────────────────
'update.newVersionAvailable': 'New Version Available',
'update.downloading': 'Downloading',
'update.restartToUpdate': 'Restart to Update',
'update.restartNow': 'Restart Now',
'update.readyToInstall': 'CodePilot v{version} is ready — restart to update',
'update.installUpdate': 'Download & Install',
'update.later': 'Later',
// ── Image Generation ──────────────────────────────────────
'imageGen.toggle': 'Image Generation',
'imageGen.toggleLabel': 'Image Agent',
'imageGen.toggleTooltip': 'Toggle Image Agent — AI analyzes intent and generates single or batch images',
'imageGen.generating': 'Generating image...',
'imageGen.params': 'Generation Parameters',
'imageGen.aspectRatio': 'Aspect Ratio',
'imageGen.resolution': 'Resolution',
'imageGen.generate': 'Generate',
'imageGen.regenerate': 'Regenerate',
'imageGen.download': 'Download',
'imageGen.prompt': 'Prompt',
'imageGen.model': 'Model',
'imageGen.noApiKey': 'Please configure Gemini API Key in Settings > Providers',
'imageGen.error': 'Image generation failed',
'imageGen.success': 'Image generated successfully',
'imageGen.referenceImages': 'Reference Images',
'imageGen.uploadReference': 'Upload reference image',
'imageGen.resetChat': 'Reset conversation',
'imageGen.multiTurnHint': 'You can describe changes to modify the generated image',
'imageGen.settings': 'Generation Settings',
'imageGen.generated': 'Generated image',
'imageGen.confirmTitle': 'Image Generation',
'imageGen.editPrompt': 'Edit prompt',
'imageGen.generateButton': 'Generate',
'imageGen.retryButton': 'Retry',
'imageGen.generatingStatus': 'Generating...',
'imageGen.stopButton': 'Stop',
// ── Batch Image Generation ─────────────────────────────────
'batchImageGen.toggle': 'Batch Generate',
'batchImageGen.toggleTooltip': 'Toggle batch image generation mode',
'batchImageGen.entryTitle': 'Batch Image Generation',
'batchImageGen.stylePrompt': 'Style Prompt',
'batchImageGen.stylePromptPlaceholder': 'Describe the visual style for all images...',
'batchImageGen.uploadDocs': 'Upload Documents',
'batchImageGen.uploadDocsHint': 'Upload text/markdown files as source content',
'batchImageGen.count': 'Image Count',
'batchImageGen.countAuto': 'Auto',
'batchImageGen.aspectRatioStrategy': 'Aspect Ratio',
'batchImageGen.resolution': 'Resolution',
'batchImageGen.generatePlan': 'Generate Plan',
'batchImageGen.planning': 'Planning...',
'batchImageGen.planPreviewTitle': 'Generation Plan',
'batchImageGen.planSummary': 'Plan Summary',
'batchImageGen.editPrompt': 'Edit prompt',
'batchImageGen.addItem': 'Add Item',
'batchImageGen.removeItem': 'Remove',
'batchImageGen.regeneratePlan': 'Regenerate Plan',
'batchImageGen.confirmAndExecute': 'Confirm & Execute',
'batchImageGen.executing': 'Executing...',
'batchImageGen.totalProgress': 'Progress',
'batchImageGen.itemPending': 'Pending',
'batchImageGen.itemProcessing': 'Generating...',
'batchImageGen.itemCompleted': 'Done',
'batchImageGen.itemFailed': 'Failed',
'batchImageGen.retryFailed': 'Retry Failed',
'batchImageGen.retryItem': 'Retry',
'batchImageGen.pause': 'Pause',
'batchImageGen.resume': 'Resume',
'batchImageGen.cancel': 'Cancel',
'batchImageGen.syncToChat': 'Sync to Conversation',
'batchImageGen.syncComplete': 'Synced to conversation',
'batchImageGen.syncMode': 'Sync Mode',
'batchImageGen.syncManual': 'Manual',
'batchImageGen.syncAutoBatch': 'Auto Batch',
'batchImageGen.completed': 'Batch generation complete',
'batchImageGen.completedStats': '{completed}/{total} images generated',
'batchImageGen.noProvider': 'Please configure a text generation provider in Settings',
'batchImageGen.tags': 'Tags',
'batchImageGen.sourceRefs': 'Sources',
'batchImageGen.prompt': 'Prompt',
'batchImageGen.aspectRatio': 'Ratio',
'batchImageGen.imageSize': 'Size',
// ── Gallery ─────────────────────────────────────────────────
'gallery.title': 'Gallery',
'gallery.empty': 'No images generated yet',
'gallery.emptyHint': 'Generate images in chat to see them here.',
'gallery.filterByTag': 'Filter by tag',
'gallery.dateFrom': 'From',
'gallery.dateTo': 'To',
'gallery.sortNewest': 'Newest first',
'gallery.sortOldest': 'Oldest first',
'gallery.newestFirst': 'Newest first',
'gallery.oldestFirst': 'Oldest first',
'gallery.filters': 'Filters',
'gallery.clearFilters': 'Clear filters',
'gallery.loadMore': 'Load more',
'gallery.openChat': 'Open Chat',
'gallery.delete': 'Delete',
'gallery.confirmDelete': 'Confirm delete?',
'gallery.deleteConfirm': 'Delete this image? This cannot be undone.',
'gallery.tags': 'Tags',
'gallery.addTag': 'Add tag',
'gallery.newTag': 'New tag name',
'gallery.newTagPlaceholder': 'New tag name...',
'gallery.cancel': 'Cancel',
'gallery.removeTag': 'Remove tag',
'gallery.noTags': 'No tags',
'gallery.generatedAt': 'Generated at',
'gallery.viewDetails': 'View details',
'gallery.imageDetail': 'Image Detail',
'gallery.prompt': 'Prompt',
'gallery.download': 'Download',
'gallery.favorites': 'Favorites',
'gallery.favoritesOnly': 'Favorites',
'gallery.addToFavorites': 'Add to favorites',
'gallery.removeFromFavorites': 'Remove from favorites',
// ── Provider: Gemini Image ──────────────────────────────────
'provider.chatProviders': 'Chat Providers',
'provider.mediaProviders': 'Media Providers',
'provider.geminiImageDesc': 'Nano Banana Pro — AI image generation by Google Gemini',
'provider.diagnose': 'Diagnose',
'provider.doctor.title': 'Provider Doctor',
'provider.doctor.running': 'Running diagnostics...',
'provider.doctor.rerun': 'Re-run',
'provider.doctor.exportLogs': 'Export Logs',
'provider.doctor.overall': 'Overall',
'provider.doctor.pass': 'PASS',
'provider.doctor.warn': 'WARN',
'provider.doctor.error': 'ERROR',
'provider.doctor.probe.cli': 'CLI Health',
'provider.doctor.probe.auth': 'Auth Source',
'provider.doctor.probe.provider': 'Provider/Model',
'provider.doctor.probe.features': 'Feature Compatibility',
'provider.doctor.probe.network': 'Network/Endpoint',
'provider.doctor.fix': 'Fix',
// ── CLI dynamic field labels ──────────────────────────────
'cli.loadingSettings': 'Loading settings...',
'cli.field.skipDangerousModePermissionPrompt': 'Skip Dangerous Mode Permission Prompt',
'cli.field.verbose': 'Verbose',
'cli.field.theme': 'Theme',
'cli.formatError': 'Cannot format: invalid JSON',
// ── Split screen ─────────────────────────────────────────────
'split.splitScreen': 'Split Screen',
'split.closeSplit': 'Close Split',
'split.splitGroup': 'Split',
'chatList.splitScreen': 'Split Screen',
// ── Telegram (Bridge) ──────────────────────────────────────
'telegram.credentials': 'Bot Credentials',
'telegram.credentialsDesc': 'Enter your Telegram Bot token and chat ID',
'telegram.botToken': 'Bot Token',
'telegram.chatId': 'Chat ID',
'telegram.chatIdHint': 'Send /start to your bot first, then click "Auto Detect" to fill in your Chat ID',
'telegram.detectChatId': 'Auto Detect',
'telegram.chatIdDetected': 'Chat ID detected: {id} ({name})',
'telegram.chatIdDetectFailed': 'Could not detect Chat ID. Send /start to the bot first, then try again.',
'telegram.verify': 'Test Connection',
'telegram.verified': 'Connection verified',
'telegram.verifiedAs': 'Connected as @{name}',
'telegram.verifyFailed': 'Connection failed',
'telegram.enterTokenFirst': 'Enter a bot token first',
'telegram.setupGuide': 'Setup Guide',
'telegram.step1': 'Open Telegram and search for @BotFather',
'telegram.step2': 'Send /newbot and follow the prompts to create a bot',
'telegram.step3': 'Copy the bot token and paste it above',
'telegram.step4': 'Click "Test Connection" to verify the token is valid',
'telegram.step5': 'Send /start to your bot, then click "Auto Detect" next to the Chat ID field',
'telegram.step6': 'Click "Save" to store your credentials',
// ── Feishu (Bridge) ──────────────────────────────────────
'feishu.credentials': 'App Credentials',
'feishu.credentialsDesc': 'Enter your Feishu App ID and App Secret',
'feishu.appId': 'App ID',
'feishu.appSecret': 'App Secret',
'feishu.domain': 'Platform',
'feishu.domainFeishu': 'Feishu (feishu.cn)',
'feishu.domainLark': 'Lark (larksuite.com)',
'feishu.domainHint': 'Choose Feishu for China mainland or Lark for international',
'feishu.verify': 'Test Connection',
'feishu.verified': 'Connection verified',
'feishu.verifiedAs': 'Connected as {name}',
'feishu.verifyFailed': 'Connection failed',
'feishu.enterCredentialsFirst': 'Enter App ID and App Secret first',
'feishu.allowFrom': 'Allow From',
'feishu.allowFromDesc': 'Control which users can send DMs to the bot',
'feishu.allowFromHint': 'Comma-separated open_id values. Use * to allow all users.',
'feishu.dmPolicy': 'DM Policy',
'feishu.dmPolicyOpen': 'Open — accept DMs from all users',
'feishu.dmPolicyPairing': 'Pairing — require pairing handshake',
'feishu.dmPolicyAllowlist': 'Allowlist — only listed users',
'feishu.dmPolicyDisabled': 'Disabled — ignore all DMs',
'feishu.accessBehavior': 'Access & Behavior',
'feishu.accessBehaviorDesc': 'Configure who can use the bot and how it behaves',
'feishu.saved': 'Saved',
'feishu.groupSettings': 'Group Chat Settings',
'feishu.groupSettingsDesc': 'Control how the bot responds in group chats',
'feishu.groupPolicy': 'Group Policy',
'feishu.groupPolicyOpen': 'Open — respond in all groups',
'feishu.groupPolicyAllowlist': 'Allowlist — only specified groups',
'feishu.groupPolicyDisabled': 'Disabled — ignore all group messages',
'feishu.groupAllowFrom': 'Allowed Groups',
'feishu.groupAllowFromHint': 'Comma-separated chat_id values of allowed groups',
'feishu.requireMention': 'Require @mention',
'feishu.requireMentionDesc': 'Only respond in groups when the bot is @mentioned',
'feishu.setupGuide': 'Setup Guide',
'feishu.step1': 'Go to Feishu Open Platform (open.feishu.cn) and create a custom app',
'feishu.step2': 'Enable the Bot capability in the app features',
'feishu.step3': 'Copy the App ID and App Secret from the Credentials page',
'feishu.step4': 'Add event subscription: im.message.receive_v1',
'feishu.step5': 'Publish the app version and approve it in the admin console',
'feishu.step6': 'Paste the credentials above and click "Test Connection" to verify',
'feishu.threadSession': 'Thread Sessions',
'feishu.threadSessionDesc': 'Enable per-thread independent context (parallel conversations in different threads)',
'feishu.connectionState': 'Connection State',
'feishu.connectionStateConnected': 'Connected',
'feishu.connectionStateDisconnected': 'Disconnected',
'feishu.connectionStateConnecting': 'Connecting...',
'feishu.connectionStateReconnecting': 'Reconnecting...',
'feishu.metrics': 'Metrics',
'feishu.metricsMessagesIn': 'Messages In',
'feishu.metricsMessagesOut': 'Messages Out',
'feishu.metricsErrors': 'Errors',
'feishu.probe': 'Probe',
'feishu.probeSuccess': 'Probe successful',
'feishu.probeFailed': 'Probe failed',
'feishu.capabilities': 'Platform Capabilities',
'feishu.capabilities.doc': 'Documents',
'feishu.capabilities.sheet': 'Spreadsheets',
'feishu.capabilities.calendar': 'Calendar',
'feishu.capabilities.task': 'Tasks',
'feishu.capabilities.bitable': 'Bitable (Tables)',
'feishu.diagnose': 'Diagnostics',
'feishu.diagnose.title': 'Feishu Connection Diagnostics',
'feishu.diagnose.config': 'Configuration',
'feishu.diagnose.connection': 'Connection',
'feishu.diagnose.permissions': 'Permissions',
'feishu.diagnose.running': 'Running diagnostics...',
// ── Channels (generic) ────────────────────────────────────
'channels.configSaved': 'Configuration saved',
'channels.configError': 'Configuration error',
// ── Remote ────────────────────────────────────────────────
'remote.title': 'Remote Control',
'remote.host': 'Host',
'remote.controllers': 'Controllers',
'remote.sessions': 'Remote Sessions',
'remote.lease': 'Session Lease',
'remote.leaseAcquired': 'Lease acquired',
'remote.leaseReleased': 'Lease released',
'remote.leaseExpired': 'Lease expired',
// ── Settings: Remote Bridge ────────────────────────────────
'settings.bridge': 'Remote Bridge',
'bridge.title': 'Remote Bridge',
'bridge.description': 'Control Claude from external channels like Telegram or Feishu',
'bridge.enabled': 'Enable Remote Bridge',
'bridge.enabledDesc': 'Allow external messaging channels to interact with Claude',
'bridge.activeHint': 'Bridge is active. External channels can send tasks to Claude.',
'bridge.status': 'Bridge Status',
'bridge.statusConnected': 'Connected',
'bridge.statusDisconnected': 'Disconnected',
'bridge.statusStarting': 'Starting...',
'bridge.statusStopping': 'Stopping...',
'bridge.activeBindings': '{count} active binding(s)',
'bridge.noBindings': 'No active bindings',
'bridge.channels': 'Channels',
'bridge.channelsDesc': 'Enable or disable individual messaging channels',
'bridge.telegramChannel': 'Telegram',
'bridge.telegramChannelDesc': 'Receive and respond to messages via Telegram Bot',
'bridge.bindings': 'Active Sessions',
'bridge.bindingsDesc': 'Current session bindings from external channels',
'bridge.bindingChat': 'Chat',
'bridge.bindingChannel': 'Channel',
'bridge.bindingCreated': 'Created',
'bridge.bindingStatus': 'Status',
'bridge.noActiveBindings': 'No active session bindings',
'bridge.defaults': 'Defaults',
'bridge.defaultsDesc': 'Default settings for bridge-initiated sessions',
'bridge.defaultWorkDir': 'Working Directory',
'bridge.defaultWorkDirHint': 'Default project folder for bridge sessions',
'bridge.defaultModel': 'Model',
'bridge.defaultModelHint': 'Default model for bridge sessions',
'bridge.browse': 'Browse',
'bridge.start': 'Start Bridge',
'bridge.stop': 'Stop Bridge',
'bridge.starting': 'Starting...',
'bridge.stopping': 'Stopping...',
'bridge.autoStart': 'Auto-start Bridge',
'bridge.autoStartDesc': 'Automatically start the bridge when the application launches',
'bridge.adapterRunning': 'Running',
'bridge.adapterStopped': 'Stopped',
'bridge.adapterLastMessage': 'Last message',
'bridge.adapterLastError': 'Last error',
'bridge.adapters': 'Adapter Status',
'bridge.adaptersDesc': 'Real-time status of each channel adapter',
'bridge.telegramSettings': 'Telegram Settings',
'bridge.telegramSettingsDesc': 'Configure Telegram Bot credentials for bridge',
'bridge.allowedUsers': 'Allowed Users',
'bridge.allowedUsersDesc': 'Comma-separated Telegram user IDs allowed to use bridge',
'bridge.allowedUsersHint': 'Leave empty to allow only the Chat ID configured above',
'bridge.feishuChannel': 'Feishu',
'bridge.feishuChannelDesc': 'Receive and respond to messages via Feishu Bot',
'bridge.feishuSettings': 'Feishu Settings',
'bridge.feishuSettingsDesc': 'Configure Feishu App credentials for bridge',
'bridge.discordChannel': 'Discord',
'bridge.discordChannelDesc': 'Receive and respond to messages via Discord Bot',
'bridge.discordSettings': 'Discord Settings',
'bridge.discordSettingsDesc': 'Configure Discord Bot credentials for bridge',
'bridge.qqChannel': 'QQ',
'bridge.qqChannelDesc': 'Receive and respond to messages via QQ Bot (private chat)',
'bridge.qqSettings': 'QQ Settings',
'bridge.qqSettingsDesc': 'Configure QQ Bot credentials for bridge',
// ── Settings: Discord Bridge ─────────────────────────────────
'discord.credentials': 'Bot Credentials',
'discord.credentialsDesc': 'Enter your Discord Bot token',
'discord.botToken': 'Bot Token',
'discord.verify': 'Test Connection',
'discord.verified': 'Connection verified',
'discord.verifiedAs': 'Connected as {name}',
'discord.verifyFailed': 'Connection failed',
'discord.enterTokenFirst': 'Enter a bot token first',
'discord.allowedUsers': 'Authorization',
'discord.allowedUsersDesc': 'Control which users and channels can interact with the bot',
'discord.allowedUserIds': 'Allowed User IDs',
'discord.allowedUsersHint': 'Discord user IDs, comma-separated for multiple. Denies all when both users and channels are empty.',
'discord.allowedChannelIds': 'Allowed Channel IDs',
'discord.allowedChannelsHint': 'Discord channel IDs, comma-separated for multiple.',
'discord.guildSettings': 'Server & Group Settings',
'discord.guildSettingsDesc': 'Control how the bot responds in Discord servers',
'discord.allowedGuilds': 'Allowed Server (Guild) IDs',
'discord.allowedGuildsHint': 'Guild IDs, comma-separated for multiple. Leave empty to allow all servers.',
'discord.groupPolicy': 'Server Message Policy',
'discord.groupPolicyOpen': 'Open — respond in all server channels',
'discord.groupPolicyDisabled': 'Disabled — ignore all server messages (DM only)',
'discord.requireMention': 'Require @mention',
'discord.requireMentionDesc': 'Only respond in servers when the bot is @mentioned',
'discord.streamPreview': 'Stream Preview',
'discord.streamPreviewDesc': 'Show real-time response preview by editing messages',
'discord.setupGuide': 'Configuration Guide',
'discord.setupBotTitle': 'Create a Discord Bot',
'discord.step1': 'Go to Discord Developer Portal (discord.com/developers), click "New Application" to create an app',
'discord.step2': 'Navigate to "Bot" in the sidebar, click "Add Bot" to create the bot',
'discord.step3': 'Scroll down to "Privileged Gateway Intents", enable the "MESSAGE CONTENT INTENT" toggle',
'discord.step4': 'Click "Reset Token" to copy the Bot Token, paste it in the "Bot Credentials" section above and save',
'discord.step5': 'Go to "OAuth2 → URL Generator", check "bot" under Scopes, then check "Send Messages" and "Read Message History" under Bot Permissions',
'discord.step6': 'Copy the generated invite URL, open it in your browser to invite the Bot to your server',
'discord.step7': 'Click "Test Connection" above — if the bot name appears, setup is complete',
'discord.setupIdTitle': 'Getting IDs (Developer Mode required)',
'discord.stepDevMode': 'Open Discord → User Settings → Advanced → enable "Developer Mode"',
'discord.stepUserId': 'User ID: right-click your avatar or username → "Copy User ID"',
'discord.stepChannelId': 'Channel ID: right-click a channel name in the sidebar → "Copy Channel ID"',
'discord.stepGuildId': 'Server ID: right-click the server name at the top-left → "Copy Server ID"',
// ── Settings: QQ Bridge ────────────────────────────────────
'qq.credentials': 'Bot Credentials',
'qq.credentialsDesc': 'Enter your QQ Bot App ID and App Secret',
'qq.appId': 'App ID',
'qq.appSecret': 'App Secret',
'qq.verify': 'Test Connection',
'qq.verified': 'Connection verified',
'qq.verifyFailed': 'Connection failed',
'qq.enterCredentialsFirst': 'Enter App ID and App Secret first',
'qq.allowedUsers': 'Allowed Users',
'qq.allowedUsersDesc': 'Comma-separated user_openid values allowed to use bridge',
'qq.allowedUsersHint': 'Leave empty to allow all users',
'qq.imageSettings': 'Image Settings',
'qq.imageSettingsDesc': 'Control how the bot handles images from QQ',
'qq.imageEnabled': 'Enable Image Input',
'qq.imageEnabledDesc': 'Allow receiving and processing images from QQ',
'qq.maxImageSize': 'Max Image Size (MB)',
'qq.maxImageSizeHint': 'Maximum image file size in MB (default: 20)',
'qq.setupGuide': 'Setup Guide',
'qq.step1': 'Go to QQ Bot Quick Setup page (q.qq.com/qqbot/openclaw) to create a bot and generate App ID & App Secret',
'qq.step2': 'Paste the App ID and App Secret above and click "Save"',
'qq.step3': 'Click "Test Connection" to verify the credentials are valid',
'qq.step4': 'Go back to the Bridge page, enable the QQ channel toggle, and start the bridge',
'qq.step5': 'Add your QQ bot as a friend and send it a message to start chatting',
// ── Assistant Workspace ──────────────────────────────
'settings.assistant': 'Assistant',
'assistant.workspaceTitle': 'Assistant Workspace',
'assistant.workspaceDesc': 'Configure a directory for persistent AI personality and memory',
'assistant.workspacePath': 'Workspace Path',
'assistant.workspacePathHint': 'Select a directory (e.g. your Obsidian vault) to store assistant files',
'assistant.selectFolder': 'Select Folder',
'assistant.initialize': 'Initialize',
'assistant.initializing': 'Initializing...',
'assistant.initialized': 'Workspace initialized',
'assistant.pathNotSet': 'No workspace path configured',
'assistant.fileStatus': 'File Status',
'assistant.fileExists': 'exists',
'assistant.fileMissing': 'missing',
'assistant.fileChars': '{count} chars',
'assistant.onboardingTitle': 'Onboarding',
'assistant.onboardingDesc': 'Answer questions to personalize your assistant',
'assistant.onboardingComplete': 'Onboarding complete',
'assistant.onboardingNotStarted': 'Not started',
'assistant.startOnboarding': 'Start Onboarding',
'assistant.redoOnboarding': 'Redo Onboarding',
'assistant.onboardingQ1': 'How should I address you?',
'assistant.onboardingQ2': 'What name should I use for myself?',
'assistant.onboardingQ3': 'Do you prefer "concise and direct" or "detailed explanations"?',
'assistant.onboardingQ4': 'Do you prefer "minimal interruptions" or "proactive suggestions"?',
'assistant.onboardingQ5': 'What are your three hard boundaries?',
'assistant.onboardingQ6': 'What are your three most important current goals?',
'assistant.onboardingQ7': 'Do you prefer output as "lists", "reports", or "conversation summaries"?',
'assistant.onboardingQ8': 'What information may be written to long-term memory?',
'assistant.onboardingQ9': 'What information must never be written to long-term memory?',
'assistant.onboardingQ10': 'What three things should I do first when entering a project?',
'assistant.onboardingQ11': 'How do you organize your materials? (by project / time / topic / mixed)',
'assistant.onboardingQ12': 'Where should new information go by default?',
'assistant.onboardingQ13': 'How should completed tasks be archived?',
'assistant.checkInTitle': 'Daily Check-in',
'assistant.checkInDesc': 'Quick daily update to keep your assistant current',
'assistant.lastCheckIn': 'Last check-in',
'assistant.checkInToday': 'Completed today',
'assistant.checkInNeeded': 'Check-in available',
'assistant.startCheckIn': 'Start Check-in',
'assistant.checkInQ1': 'What did you work on or accomplish today?',
'assistant.checkInQ2': 'Any changes to your current priorities or goals?',
'assistant.checkInQ3': 'Anything you would like me to remember going forward?',
'assistant.refreshDocs': 'Refresh Directory Docs',
'assistant.refreshingDocs': 'Refreshing...',
'assistant.docsRefreshed': 'Directory docs refreshed',
// ── Taxonomy ──────────────────────────────────────────
'assistant.taxonomyTitle': 'Taxonomy',
'assistant.taxonomyDesc': 'Categories learned from your workspace structure',
'assistant.taxonomyEmpty': 'No categories detected',
'assistant.taxonomyRole': 'Role',
'assistant.taxonomyConfidence': 'Confidence',
'assistant.taxonomySource': 'Source',
'assistant.taxonomyPaths': 'Paths',
// ── Index ─────────────────────────────────────────────
'assistant.indexTitle': 'File Index',
'assistant.indexDesc': 'Indexed files for search and retrieval',
'assistant.indexFiles': '{count} files indexed',
'assistant.indexChunks': '{count} chunks',
'assistant.indexStale': '{count} stale',
'assistant.indexLastIndexed': 'Last indexed',
'assistant.indexReindex': 'Reindex',
'assistant.indexReindexing': 'Reindexing...',
// ── Hotset ────────────────────────────────────────────
'assistant.hotsetTitle': 'Hotset',
'assistant.hotsetDesc': 'Frequently accessed files loaded into context',
'assistant.hotsetEmpty': 'No frequent files yet',
'assistant.hotsetPinned': 'Pinned',
'assistant.hotsetFrequent': 'Frequent',
// ── Organize ──────────────────────────────────────────
'assistant.organizeTitle': 'Organization',
'assistant.organizeDesc': 'Archive and organize workspace content',
'assistant.organizeArchive': 'Archive Old Memories',
'assistant.organizeArchiving': 'Archiving...',
'assistant.organizeArchived': '{count} memories archived',
'assistant.organizeSuggest': 'Suggest Evolution',
'assistant.organizeSuggesting': 'Analyzing...',
// ── Assistant Workspace Switch Banner ─────────────────
'assistant.switchedBanner': 'Assistant directory has been switched to {path}. This session is no longer bound to assistant features.',
'assistant.openNewAssistant': 'Open New Assistant Project',
'assistant.sessionUnbound': 'Session unbound from assistant',
// ── Workspace Inspect & Confirmation ──────────────────
'assistant.inspecting': 'Checking...',
'assistant.inspectFailed': 'Failed to inspect path',
'assistant.pathNotExist': 'Path does not exist',
'assistant.pathNotDirectory': 'Path is not a directory',
'assistant.pathNotReadable': 'Directory is not readable',
'assistant.pathNotWritable': 'Directory is not writable',
'assistant.pathInvalid': 'Invalid path',
'assistant.confirmEmptyTitle': 'Initialize New Workspace',
'assistant.confirmEmptyDesc': 'This is an empty directory. Initialize it as a new assistant workspace?',
'assistant.confirmNormalTitle': 'Initialize Workspace Here',
'assistant.confirmNormalDesc': 'This directory already contains files. Initialize assistant workspace here?',
'assistant.confirmNormalHint': 'An .assistant folder, soul.md, memory.md and other assistant files will be created.',
'assistant.confirmInitialize': 'Initialize',
'assistant.confirmExistingTitle': 'Existing Workspace Detected',
'assistant.confirmExistingDesc': 'This directory already contains an assistant workspace. How would you like to proceed?',
'assistant.summaryOnboarding': 'Onboarding',
'assistant.summaryLastCheckIn': 'Last Check-in',
'assistant.summaryFileCount': 'Files',
'assistant.summaryNever': 'Never',
'assistant.takeoverContinue': 'Continue with existing config',
'assistant.takeoverReonboard': 'Re-onboard (keep files, reset onboarding)',
'assistant.confirmPartialTitle': 'Partial Workspace Detected',
'assistant.confirmPartialDesc': 'Partial assistant data was found in this directory. Repair and continue using it?',
'assistant.confirmRepair': 'Repair & Continue',
'assistant.confirmNotFoundTitle': 'Create New Directory',
'assistant.confirmNotFoundDesc': 'This path does not exist yet. Create the directory and initialize it as a new assistant workspace?',
'assistant.confirmCreate': 'Create & Initialize',
'assistant.workspaceInvalid': 'Configured workspace path is invalid',
// ── Composer ──────────────────────────────────────────────
'composer.slashCommand': 'Commands',
'composer.slashCommandTooltip': 'Insert slash command',
'composer.manageSkills': 'Manage skills',
'composer.searchModels': 'Search models...',
'composer.manageProviders': 'Manage providers',
'composer.designAgent': 'Design Agent',
'composer.designAgentTooltip': 'Enable AI design & image generation',
// ── Permission ────────────────────────────────────────────
'permission.default': 'Default',
'permission.fullAccess': 'Full Access',
'permission.fullAccessWarning': 'Full Access mode will automatically approve all permission requests without confirmation. This includes file writes, shell commands, and network requests. Only enable this if you fully trust the current task.',
'permission.sessionPermission': 'Chat Permission',
// ── Context Usage ─────────────────────────────────────────
'context.usage': 'Context Usage',
'context.model': 'Model',
'context.used': 'Used',
'context.total': 'Total',
'context.percentage': 'Usage',
'context.cacheRead': 'Cache Read',
'context.cacheCreation': 'Cache Creation',
'context.outputTokens': 'Output Tokens',
'context.estimate': 'Estimated from the most recent response',
'context.noData': 'No context usage data yet',
'context.unknown': 'Unknown',
// ── SDK Capabilities: Effort ──────────────────────────────
'messageInput.effort.label': 'Effort Level',
'messageInput.effort.low': 'Low',
'messageInput.effort.medium': 'Medium',
'messageInput.effort.high': 'High',
'messageInput.effort.max': 'Max',
// ── SDK Capabilities: Rewind ──────────────────────────────
'messageList.rewindToHere': 'Rewind to here',
'messageList.rewindConfirm': 'Confirm rewind',
'messageList.rewindCancel': 'Cancel',
'messageList.rewindDone': 'Files rewound successfully',
// ── SDK Capabilities: MCP Runtime ─────────────────────────
'mcp.runtimeStatus': 'Runtime Status',
'mcp.refresh': 'Refresh',
'mcp.noActiveSession': 'Start a conversation to see live status',
'mcp.noRuntimeStatus': 'No runtime status available',
'mcp.reconnect': 'Reconnect',
'mcp.enable': 'Enable',
// ── SDK Capabilities: Thinking ────────────────────────────
'settings.thinkingMode': 'Thinking Mode',
'settings.thinkingModeDesc': 'Control Claude\'s extended thinking behavior',
'settings.thinkingAdaptive': 'Adaptive',
'settings.thinkingEnabled': 'Enabled',
'settings.thinkingDisabled': 'Disabled',
// ── SDK Capabilities: Account ─────────────────────────────
'settings.accountInfo': 'Account Information',
'settings.email': 'Email',
'settings.organization': 'Organization',
'settings.subscription': 'Subscription',
// ── CLI Tools ─────────────────────────────────────────────
'cliTools.title': 'CLI Tools',
'cliTools.description': 'Manage CLI tools for AI-assisted workflows',
'cliTools.installed': 'Installed',
'cliTools.recommended': 'Recommended',
'cliTools.allInstalled': 'All recommended tools are installed!',
'cliTools.install': 'Install',
'cliTools.installing': 'Installing',
'cliTools.installSuccess': 'Installation Complete',
'cliTools.installFailed': 'Installation Failed',
'cliTools.detail': 'Details',
'cliTools.detailIntro': 'Introduction',
'cliTools.useCases': 'Use Cases',
'cliTools.guideSteps': 'Getting Started',
'cliTools.examplePrompts': 'Example Prompts',
'cliTools.copy': 'Copy',
'cliTools.homepage': 'Homepage',
'cliTools.docs': 'Documentation',
'cliTools.noDescription': 'No description yet — use AI Describe to generate',
'cliTools.toolInfo': 'Tool Info',
'cliTools.version': 'Version',
'cliTools.path': 'Path',
'cliTools.brewNotInstalled': 'Homebrew not detected',
'cliTools.brewInstallGuide': 'Most recommended tools require Homebrew. Run this command in your terminal to install it:',
'cliTools.viewDocs': 'View CodePilot documentation',
'cliTools.searchPlaceholder': 'Search CLI tools...',
'cliTools.noToolsDetected': 'No installed CLI tools detected',
'cliTools.goInstall': 'Go install CLI tools',
'cliTools.manageCli': 'Manage CLI tools',
'cliTools.selectTool': 'Select CLI tool',
'cliTools.autoDescribe': 'AI-enhance description',
'cliTools.autoDescribeFailed': 'AI description failed — check your provider settings',
'cliTools.batchDescribe': 'AI Describe',
'cliTools.batchDescribeIntro': 'Use AI to generate descriptions for installed tools. Results will be shown on each tool card.',
'cliTools.batchProvider': 'Provider',
'cliTools.batchModel': 'Model',
'cliTools.batchSkipExisting': 'Skip tools with existing descriptions ({count})',
'cliTools.batchToolCount': 'Will process {count} / {total} tools',
'cliTools.batchNoProvider': 'No compatible providers available. Coding Plan proxies (Kimi, GLM, MiniMax, etc.) are not supported — please configure an Anthropic API or OpenRouter provider.',
'cliTools.batchStart': 'Start',
'cliTools.batchSuccess': '{count} succeeded',
'cliTools.batchFailed': '{count} failed',
'cliTools.batchNothingToProcess': 'Nothing to process',
'cliTools.cancel': 'Cancel',
'cliTools.done': 'Done',
'cliTools.category.media': 'Media',
'cliTools.category.data': 'Data',
'cliTools.category.search': 'Search',
'cliTools.category.download': 'Download',
'cliTools.category.document': 'Document',
'cliTools.category.productivity': 'Productivity',
'cliTools.noInstallMethod': 'No automated install available for your platform',
'cliTools.systemDetected': 'System Detected',
// ── Top Bar ───────────────────────────────────────────────────
'topBar.fileTree': 'File Tree',
'topBar.git': 'Git',
'topBar.commit': 'Commit All',
'topBar.push': 'Push',
'topBar.terminal': 'Terminal',
// ── Git ───────────────────────────────────────────────────────
'git.title': 'Git',
'git.placeholder': 'Git integration coming soon',
'git.status': 'Status',
'git.branches': 'Branches',