wangzhibo
10 天以前 220e4fab27b7f419b3e89e2f2d28ae789aac09d7
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
// English language pack
export default {
  // TabBar
  'tabBar.home': 'Home',
  'tabBar.deviceConfig': 'Network Config',
  'tabBar.settings': 'System',
  // Settings page title
  'settings.title': 'Settings',
  // Login page
  'login.pageTitle': 'Login',
  'login.navigationTitle': 'Login',
  'login.fetchConfigError': 'Failed to fetch configuration:',
  'login.selectLanguage': 'Select Language',
  'login.selectLanguageTip': 'En',
  'login.welcomeBack': 'Welcome Back',
  'login.pleaseLogin': 'Please log in to your account',
  'login.enterUsername': 'Please enter username',
  'login.enterPassword': 'Please enter password',
  'login.enterCaptcha': 'Please enter verification code',
  'login.loginButton': 'Login',
  'login.loggingIn': 'Logging in...',
  'login.noAccount': 'Sign Up',
  'login.enterPhone': 'Please enter phone number',
  'login.selectCountry': 'Select Country/Region',
  'login.confirm': 'Confirm',
  'login.serverSetting': 'Server Settings',
  'login.requiredUsername': 'Username cannot be empty',
  'login.requiredPassword': 'Password cannot be empty',
  'login.requiredCaptcha': 'Verification code cannot be empty',
  'login.requiredMobile': 'Please enter a valid phone number',
  'login.captchaError': 'Graphic verification code error',
  'login.forgotPassword': 'Forgot Password',
  'login.userAgreement': 'User Agreement',
  'login.privacyPolicy': 'Privacy Policy',
 
  // Register page
  'register.pageTitle': 'Register',
  'register.createAccount': 'Create Account',
  'register.enterUsername': 'Please enter username',
  'register.enterPassword': 'Please enter password',
  'register.confirmPassword': 'Please confirm password',
  'register.enterPhone': 'Please enter phone number',
  'register.enterCode': 'Please enter verification code',
  'register.getCode': 'Get Code',
  'register.agreeTerms': 'I have read and agree to the',
  'register.terms': 'User Agreement',
  'register.privacy': 'Privacy Policy',
  'register.registerButton': 'Register',
  'register.registering': 'Registering...',
  'register.haveAccount': 'Already have an account?',
  'register.loginNow': 'Login Now',
  'register.selectCountry': 'Select Country/Region',
  'register.confirm': 'Confirm',
  'register.captchaSendSuccess': 'Verification code sent successfully',
 
  // Home page
  'home.pageTitle': 'Home',
  'home.createAgent': 'Create Agent',
  'home.agentName': 'Agent',
  'home.modelInfo': 'Model Info',
  'home.lastActive': 'Last Active',
  'home.greeting': 'Hi Jarvis',
  'home.subtitle': 'Let\'s have',
  'home.wonderfulDay': 'a wonderful day!',
  'home.emptyState': 'No agents available',
  'home.deviceManagement': 'Device Management',
  'home.lastConversation': 'Last Conversation:',
  'home.delete': 'Delete',
  'home.createFirstAgent': 'Click the + button in the lower right corner to create your first agent',
  'home.dialogTitle': 'Create Agent',
  'home.inputPlaceholder': 'e.g. Customer Service Assistant, Voice Assistant, Knowledge Q&A',
  'home.createError': 'The name length must be between 1 and 64 characters',
  'home.createNow': 'Create Now',
  'home.deleteConfirmTitle': 'Delete Agent',
  'home.confirmDeleteAgent': 'Deletion cannot be undone. Type the agent name "{agentName}" to confirm.',
  'home.deleteAgentNamePlaceholder': 'Enter agent name',
  'home.deleteAgentNameMismatch': 'The agent name does not match',
  'home.deleteAgentPasteForbidden': 'Please type the agent name manually. Pasting is not allowed.',
  'home.deleteAgentMissingInfo': 'Unable to confirm agent information. Please refresh and try again.',
  'home.deleteAgentSuccess': 'Agent deleted successfully',
  'home.justNow': 'Just now',
  'home.minutesAgo': 'minutes ago',
  'home.hoursAgo': 'hours ago',
  'home.daysAgo': 'days ago',
  'home.languageModel': 'LLM',
  'home.voiceModel': 'TTS',
  'home.noBoundDevice': 'No device bound',
  'home.onlineCount': '{online}/{total} online',
 
  // Agent page
  'agent.pageTitle': 'Agent',
  'agent.roleConfig': 'Role Configuration',
  'agent.deviceManagement': 'Device Management',
  'agent.chatHistory': 'Chat History',
  'agent.voiceprintManagement': 'Voiceprint Management',
  'agent.parentTasks': 'Learning Tasks',
  'agent.editTitle': 'Edit Agent',
  'agent.toolsTitle': 'Edit Features',
  'agent.voiceActivityDetection': 'Voice Activity Detection',
  'agent.speechRecognition': 'Speech Recognition',
  'agent.largeLanguageModel': 'Large Language Model',
  'agent.save': 'Save',
  'agent.cancel': 'Cancel',
  // Agent Edit Page
  'agent.basicInfo': 'Basic Information',
  'agent.agentName': 'Agent Name',
  'agent.inputAgentName': 'Please input agent name',
  'agent.roleMode': 'Role Mode',
  'agent.agentTag': 'Intelligent agent label',
  'agent.addAgentTag': 'Add label',
  'agent.inputAgentTag': 'Please input agent label',
  'agent.contextProvider': 'Context',
  'agent.contextProviderSuccess': 'Successfully added {count} sources.',
  'agent.contextProviderDocLink': 'How to deploy context provider',
  'agent.editContextProvider': 'Edit Source',
  'agent.roleDescription': 'Role Description',
  'agent.inputRoleDescription': 'Please input role description',
  'agent.modelConfig': 'Model Configuration',
  'agent.vad': 'Voice Activity Detection',
  'agent.asr': 'Speech Recognition',
  'agent.llm': 'Main language model',
  'agent.slm': 'Small parameter model',
  'agent.vllm': 'Vision Language Model',
  'agent.intent': 'Intent Recognition',
  'agent.memory': 'Memory',
  'agent.voiceSettings': 'Voice Settings',
  'agent.tts': 'Text-to-Speech',
  'agent.voiceprint': 'Agent Voice',
  'agent.plugins': 'Plugins',
  'agent.editFunctions': 'Edit Functions',
  'agent.historyMemory': 'History Memory',
  'agent.memoryContent': 'Memory content',
  'agent.saving': 'Saving...',
  'agent.saveSuccess': 'Save successful',
  'agent.saveFail': 'Save failed',
  'agent.ttsOptionsLoadFailed': 'Voice options could not be loaded. The previous voice settings were kept.',
  'agent.loadFail': 'Load failed',
  'agent.pleaseInputAgentName': 'Please input agent name',
  'agent.pleaseInputRoleDescription': 'Please input role description',
  'agent.pleaseSelect': 'Please select',
  'agent.reportText': 'Report Text',
  'agent.reportTextVoice': 'Report Text+Voice',
  'agent.reportMode': 'Report Mode',
  'agent.language': 'Conversation Language',
  'agent.languageConfig': 'Speech Rate&Tone',
  'agent.ttsVolume': 'Volume',
  'agent.ttsRate': 'Speech Rate',
  'agent.ttsPitch': 'Tone',
  'agent.volumeHint': '-100=Minimum, 0=Standard, 100=Maximum',
  'agent.speedHint': '-100=Slower, 0=Standard, 100=Faster',
  'agent.pitchHint': '-100=Lowest, 0=Standard, 100=Highest',
 
  // Agent snapshots
  'agentSnapshot.title': 'Version History',
  'agentSnapshot.empty': 'No versions yet',
  'agentSnapshot.emptyTip': 'Saved configs will appear here',
  'agentSnapshot.version': 'Version',
  'agentSnapshot.createdAt': 'Saved At',
  'agentSnapshot.source': 'Source',
  'agentSnapshot.changedFields': 'Changes',
  'agentSnapshot.view': 'View',
  'agentSnapshot.restore': 'Restore',
  'agentSnapshot.delete': 'Delete',
  'agentSnapshot.loadMore': 'Load More',
  'agentSnapshot.detailTitle': 'Change Details',
  'agentSnapshot.restorePreviewTitle': 'Restore Preview',
  'agentSnapshot.confirmRestore': 'Confirm Restore',
  'agentSnapshot.currentVersion': 'Latest Snapshot',
  'agentSnapshot.beforeChange': 'Before',
  'agentSnapshot.afterChange': 'After',
  'agentSnapshot.beforeRestore': 'Before Restore',
  'agentSnapshot.afterRestore': 'After Restore',
  'agentSnapshot.configValue': 'Config Value',
  'agentSnapshot.emptyValue': 'None',
  'agentSnapshot.secretRedacted': 'Secret hidden',
  'agentSnapshot.redactedValueChanged': 'The value is hidden, but it did change',
  'agentSnapshot.noChangedContent': 'No displayable changes',
  'agentSnapshot.recordedChange': 'Changed when recorded',
  'agentSnapshot.noRestoreNeeded': 'The current configuration already matches this version',
  'agentSnapshot.unsavedChangesTitle': 'Unsaved changes',
  'agentSnapshot.unsavedChangesWarning': 'Continuing will discard the unsaved changes on this page.',
  'agentSnapshot.discardAndRestore': 'Discard and restore',
  'agentSnapshot.restoreConfirm': 'Restore to version #{version}? The current configuration will remain available in history.',
  'agentSnapshot.restoreMemoryWarning': 'Restoring to a no-memory version will clear this agent\'s chat history. Please confirm the risk.',
  'agentSnapshot.restoreChatHistoryDestructiveWarning': 'This restore will permanently delete this agent\'s existing chat history. Chat history is not included in configuration snapshots and cannot be recovered from version history.',
  'agentSnapshot.restoreSuccess': 'Version restored',
  'agentSnapshot.restoreFailed': 'Failed to restore version',
  'agentSnapshot.reloadAfterRestorePending': 'Reloading the restored configuration and tags. Saving is disabled until this completes.',
  'agentSnapshot.reloadAfterRestoreFailed': 'The restored configuration or tags could not be reloaded. Saving remains disabled to prevent stale data from overwriting the restore. Please retry.',
  'agentSnapshot.retryReload': 'Reload',
  'agentSnapshot.mutationBusy': 'The configuration is being saved or reloaded. Wait for it to finish before opening version history or restoring.',
  'agentSnapshot.deleteConfirm': 'Delete version #{version}? This cannot be undone.',
  'agentSnapshot.deleteSuccess': 'Version deleted',
  'agentSnapshot.deleteFailed': 'Failed to delete version',
  'agentSnapshot.fetchFailed': 'Failed to fetch versions',
  'agentSnapshot.detailFailed': 'Failed to fetch version details',
  'agentSnapshot.correctWordCount': '{count} replacement words',
  'agentSnapshot.source.config': 'Config Save',
  'agentSnapshot.source.current': 'Current Config',
  'agentSnapshot.source.restore': 'Restored',
  'agentSnapshot.source.initial': 'Initial Version',
  'agentSnapshot.field.initial': 'Initial Snapshot',
  'agentSnapshot.field.agentCode': 'Agent Code',
  'agentSnapshot.field.agentName': 'Nickname',
  'agentSnapshot.field.asrModelId': 'Speech Recognition',
  'agentSnapshot.field.vadModelId': 'Voice Activity Detection',
  'agentSnapshot.field.llmModelId': 'Main Language Model',
  'agentSnapshot.field.slmModelId': 'Small Language Model',
  'agentSnapshot.field.vllmModelId': 'Vision Model',
  'agentSnapshot.field.ttsModelId': 'Text-to-Speech',
  'agentSnapshot.field.ttsVoiceId': 'Voice',
  'agentSnapshot.field.ttsLanguage': 'Language',
  'agentSnapshot.field.ttsVolume': 'Volume',
  'agentSnapshot.field.ttsRate': 'Speed',
  'agentSnapshot.field.ttsPitch': 'Pitch',
  'agentSnapshot.field.memModelId': 'Memory Mode',
  'agentSnapshot.field.intentModelId': 'Intent Recognition',
  'agentSnapshot.field.chatHistoryConf': 'Chat History Config',
  'agentSnapshot.field.systemPrompt': 'Role Description',
  'agentSnapshot.field.summaryMemory': 'Memory',
  'agentSnapshot.field.langCode': 'Language Code',
  'agentSnapshot.field.language': 'Interaction Language',
  'agentSnapshot.field.sort': 'Sort',
  'agentSnapshot.field.functions': 'Plugins',
  'agentSnapshot.field.contextProviders': 'Context Sources',
  'agentSnapshot.field.correctWordFileIds': 'Replacement Words',
  'agentSnapshot.field.tagNames': 'Agent Tags',
  'agentSnapshot.chatHistoryConf.none': 'Do not record chat history',
  'agentSnapshot.chatHistoryConf.text': 'Report text',
  'agentSnapshot.chatHistoryConf.textVoice': 'Report text and voice',
  'agentSnapshot.model.Memory_nomem': 'No memory',
  'agentSnapshot.model.Memory_mem_local_short': 'Local short memory',
  'agentSnapshot.model.Memory_mem0ai': 'Mem0AI memory',
  'agentSnapshot.model.Memory_mem_report_only': 'Report only',
  'agentSnapshot.model.Intent_nointent': 'No intent recognition',
  'agentSnapshot.model.Intent_intent_llm': 'External LLM intent recognition',
  'agentSnapshot.model.Intent_function_call': 'LLM function calling',
 
  // Context provider dialog related
  'contextProviderDialog.title': 'Edit Source',
  'contextProviderDialog.noContextApi': 'No Context API',
  'contextProviderDialog.add': 'Add',
  'contextProviderDialog.apiUrl': 'API URL',
  'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
  'contextProviderDialog.requestHeaders': 'Request Headers',
  'contextProviderDialog.headerKeyPlaceholder': 'Key',
  'contextProviderDialog.headerValuePlaceholder': 'Value',
  'contextProviderDialog.noHeaders': 'No Headers',
  'contextProviderDialog.addHeader': 'Add Header',
  'contextProviderDialog.cancel': 'Cancel',
  'contextProviderDialog.confirm': 'Confirm',
 
  // Manual add device dialog related
  'manualAddDeviceDialog.title': 'Manual Add Device',
  'manualAddDeviceDialog.deviceType': 'Device Type',
  'manualAddDeviceDialog.deviceTypePlaceholder': 'Please select device type',
  'manualAddDeviceDialog.firmwareVersion': 'Firmware Version',
  'manualAddDeviceDialog.firmwareVersionPlaceholder': 'Please enter firmware version',
  'manualAddDeviceDialog.macAddress': 'Mac Address',
  'manualAddDeviceDialog.macAddressPlaceholder': 'Please enter Mac address',
  'manualAddDeviceDialog.confirm': 'Confirm',
  'manualAddDeviceDialog.cancel': 'Cancel',
  'manualAddDeviceDialog.requiredMacAddress': 'Please enter Mac address',
  'manualAddDeviceDialog.invalidMacAddress': 'Please enter correct Mac address format, e.g.: 00:1A:2B:3C:4D:5E',
  'manualAddDeviceDialog.requiredDeviceType': 'Please select device type',
  'manualAddDeviceDialog.requiredFirmwareVersion': 'Please enter firmware version',
  'manualAddDeviceDialog.getFirmwareTypeFailed': 'Failed to get firmware type',
  'manualAddDeviceDialog.addSuccess': 'Device added successfully',
  'manualAddDeviceDialog.addFailed': 'Failed to add',
  'manualAddDeviceDialog.bindWithCode': 'Bind with 6-digit code',
 
  // Chat History Page
  'chatHistory.getChatSessions': 'Get chat session list',
  'chatHistory.noSelectedAgent': 'No agent selected',
  'chatHistory.getChatSessionsFailed': 'Failed to get chat session list:',
  'chatHistory.unknownTime': 'Unknown time',
  'chatHistory.justNow': 'Just now',
  'chatHistory.minutesAgo': '{minutes} minutes ago',
  'chatHistory.hoursAgo': '{hours} hours ago',
  'chatHistory.daysAgo': '{days} days ago',
  'chatHistory.conversationRecord': 'Conversation Record',
  'chatHistory.totalChats': '{count} chats in total',
  'chatHistory.loading': 'Loading...',
  'chatHistory.noMoreData': 'No more data',
  'chatHistory.noChatRecords': 'No chat records',
  'chatHistory.chatRecordsDescription': 'Conversation records with agents will be displayed here',
  // Chat History Detail Page
  'chatHistory.pageTitle': 'Chat Detail',
  'chatHistory.assistantName': 'Intelligent Assistant',
  'chatHistory.userName': 'User',
  'chatHistory.aiAssistantName': 'AI Assistant',
  'chatHistory.loadFailed': 'Failed to load chat history',
  'chatHistory.parameterError': 'Page parameter error',
  'chatHistory.invalidAudioId': 'Invalid audio ID',
  'chatHistory.audioPlayFailed': 'Audio playback failed',
  'chatHistory.playAudioFailed': 'Failed to play audio',
 
  // Device management page
  'device.pageTitle': 'Device Management',
  'device.noDevices': 'No devices available',
  'device.macAddress': 'MAC Address',
  'device.firmwareVersion': 'Firmware Version',
  'device.lastConnected': 'Last Conversation',
  'device.otaUpdate': 'OTA Update',
  'device.unbind': 'Unbind',
  'device.confirmUnbind': 'Sure',
  'device.bindDevice': 'Bind New Device',
  'device.deviceType': 'Device Type',
  'device.loading': 'Loading...',
  'device.neverConnected': 'Never connected',
  'device.checkingOnline': 'Checking device status…',
  'device.online': 'Device online',
  'device.offline': 'Device offline',
  'device.onlineHint': 'You can send immediate and scheduled tasks.',
  'device.offlineHint': 'Tasks cannot be sent. Chat history and other views still work.',
  'device.justNow': 'Just now',
  'device.minutesAgo': '{minutes} minutes ago',
  'device.hoursAgo': '{hours} hours ago',
  'device.daysAgo': '{days} days ago',
  'device.otaAutoUpdateEnabled': 'OTA auto update enabled',
  'device.otaAutoUpdateDisabled': 'OTA auto update disabled',
  'device.operationFailed': 'Operation failed, please retry',
  'device.deviceUnbound': 'Device unbound',
  'device.unbindFailed': 'Unbind failed, please retry',
  'device.unbindDevice': 'Unbind Device',
  'device.confirmUnbindDevice': 'Are you sure you want to unbind device "{macAddress}"?',
  'device.cancel': 'Cancel',
  'device.noDevice': 'No Device',
  'device.pleaseSelectAgent': 'Please select an agent first',
  'device.deviceBindSuccess': 'Device bound successfully!',
  'device.bindFailed': 'Bind failed, please check if the verification code is correct',
  'device.enterDeviceCode': 'Please enter device verification code',
  'device.bindNow': 'Bind Now',
  'device.lastConnection': 'Last Connection',
  'device.clickToBindFirstDevice': 'Click the + button in the lower right corner to bind your first device',
 
  // Common
  'common.success': 'Success',
  'common.fail': 'Failed',
  'common.loading': 'Loading...',
  'common.confirm': 'Confirm',
  'common.cancel': 'Cancel',
  'common.delete': 'Delete',
  'common.edit': 'Edit',
  'common.add': 'Add',
  'common.pleaseSelect': 'Please select',
  'common.unknownError': 'Unknown error',
  'common.networkError': 'Network error',
 
  // Retrieve Password page
  'retrievePassword.title': 'Reset Password',
  'retrievePassword.subtitle': 'Recover your account password via mobile number',
  'retrievePassword.mobileRequired': 'Please enter mobile number',
  'retrievePassword.inputCorrectMobile': 'Please enter a valid mobile number',
  'retrievePassword.captchaRequired': 'Please enter graphic verification code',
  'retrievePassword.mobileCaptchaRequired': 'Please enter SMS verification code',
  'retrievePassword.newPasswordRequired': 'Please enter new password',
  'retrievePassword.confirmNewPasswordRequired': 'Please confirm new password',
  'retrievePassword.passwordsNotMatch': 'Passwords do not match',
  'retrievePassword.mobilePlaceholder': 'Please enter mobile number',
  'retrievePassword.captchaPlaceholder': 'Please enter graphic verification code',
  'retrievePassword.mobileCaptchaPlaceholder': 'Please enter SMS verification code',
  'retrievePassword.newPasswordPlaceholder': 'Please enter new password',
  'retrievePassword.confirmNewPasswordPlaceholder': 'Please confirm new password',
  'retrievePassword.getMobileCaptcha': 'Get Code',
  'retrievePassword.captchaSendSuccess': 'Verification code sent successfully',
  'retrievePassword.passwordUpdateSuccess': 'Password reset successfully',
  'retrievePassword.resetButton': 'Reset Password',
  'retrievePassword.goToLogin': 'Back to Login',
 
  // SM2 encryption related error messages
  'sm2.publicKeyNotConfigured': 'SM2 public key not configured, please contact administrator',
  'sm2.encryptionFailed': 'Password encryption failed',
  'sm2.keyGenerationFailed': 'Key pair generation failed',
  'sm2.invalidPublicKey': 'Invalid public key format',
  'sm2.encryptionError': 'Error occurred during encryption',
  'sm2.publicKeyRetry': 'Retrying to get public key...',
  'sm2.publicKeyRetryFailed': 'Public key retrieval retry failed',
 
  // Voiceprint page
  'voiceprint.noSelectedAgent': 'No agent selected',
  'voiceprint.pleaseSelectAgent': 'Please select an agent first',
  'voiceprint.fetchHistoryFailed': 'Failed to fetch chat history',
  'voiceprint.clickToSelectVector': 'Click to select voiceprint vector',
  'voiceprint.pleaseInputName': 'Please input name',
  'voiceprint.pleaseSelectVector': 'Please select voiceprint vector',
  'voiceprint.addSuccess': 'Add success',
  'voiceprint.addFailed': 'Failed to add speaker',
  'voiceprint.editSuccess': 'Edit success',
  'voiceprint.editFailed': 'Failed to edit speaker',
  'voiceprint.deleteConfirmMsg': 'Are you sure to delete this speaker?',
  'voiceprint.deleteConfirmTitle': 'Confirm Delete',
  'voiceprint.deleteSuccess': 'Delete success',
  'voiceprint.loading': 'Loading...',
  'voiceprint.delete': 'Delete',
  'voiceprint.emptyTitle': 'No voiceprint data',
  'voiceprint.emptyDesc': 'Click the + button at the bottom right to add your first speaker',
  'voiceprint.addSpeaker': 'Add Speaker',
  'voiceprint.voiceVector': 'Voiceprint Vector',
  'voiceprint.name': 'Name',
  'voiceprint.description': 'Description',
  'voiceprint.pleaseInputDescription': 'Please input description',
  'voiceprint.cancel': 'Cancel',
  'voiceprint.save': 'Save',
  'voiceprint.editSpeaker': 'Edit Speaker',
  'voiceprint.selectVector': 'Select Voiceprint Vector',
  'voiceprint.voiceprintInterfaceNotConfigured': 'Voiceprint interface not configured',
 
  // Settings page
  'settings.pageTitle': 'Settings',
  'settings.navigationTitle': 'Settings',
  'settings.networkSettings': 'Network Settings',
  'settings.serverApiUrl': 'Server API URL',
  'settings.validServerUrl': 'Please enter a valid server address (starting with http or https and ending with /xiaozhi)',
  'settings.saveSettings': 'Save Settings',
  'settings.resetDefault': 'Reset Default',
  'settings.restartApp': 'Restart App',
  'settings.restartNow': 'Restart Now',
  'settings.restartLater': 'Later',
  // About us
  'settings.aboutApp': 'About XiaoZhi Console',
  'settings.aboutContent': 'XiaoZhi Console\n\nA cross-platform mobile management app built with Vue.js 3 + uni-app, providing device management, agent configuration and other functions for xiaozhi ESP32 smart hardware.\n\n© 2025 xiaozhi-esp32-server {version}',
  'settings.restartSuccess': 'Saved, you can manually restart the app later',
  'settings.serverUrlSavedAndCacheCleared': 'Server URL saved and cache cleared',
  'settings.resetToDefaultAndCacheCleared': 'Reset to default and cache cleared',
  'settings.resetSuccess': 'Reset successful',
  'settings.enterServerUrl': 'Please enter server URL',
  'settings.clearCacheFailed': 'Failed to clear cache',
  'settings.cacheManagement': 'Cache Management',
  'settings.totalCacheSize': 'Total Cache Size',
  'settings.appDataSize': 'Total App Data Size',
  'settings.cacheClear': 'Cache Clear',
  'settings.clearAllCache': 'Clear all cache data',
  'settings.clearCache': 'Clear Cache',
  'settings.modifyWillClearCache': 'Modifications will clear cache',
  'settings.appInfo': 'App Info',
  'settings.aboutUs': 'About Us',
  'settings.appVersion': 'App Version & Team Info',
  'settings.confirmClear': 'Confirm Clear',
  'settings.confirmClearMessage': 'Are you sure you want to clear all cache? This will delete all data including login status and require re-login.',
  'settings.cacheCleared': 'Cache cleared successfully, redirecting to login page',
  'settings.languageSettings': 'Language Settings',
  'settings.language': 'Language',
  'settings.selectLanguage': 'Select Language',
  'settings.languageChanged': 'Language changed successfully',
 
  // Messages
  'message.loginSuccess': 'Login successful!',
  'message.loginFail': 'Login failed',
  'message.registerSuccess': 'Registration successful',
  'message.registerFail': 'Registration failed',
  'message.saveSuccess': 'Save successful',
  'message.saveFail': 'Save failed',
  'message.deleteSuccess': 'Delete successful',
  'message.deleteFail': 'Delete failed',
  'message.bindSuccess': 'Binding successful',
  'message.bindFail': 'Binding failed',
  'message.unbindSuccess': 'Unbinding successful',
  'message.unbindFail': 'Unbinding failed',
  'message.networkError': 'Network error, please check your connection',
  'message.serverError': 'Server error, please try again later',
  'message.invalidAddress': 'The address may be invalid. Please check if the server is started or if the network connection is normal; It is also possible that requests cannot be sent due to HTTPS protocol issues',
  'message.languageChanged': 'Language changed',
  'message.passwordError': 'Account or password error',
  'message.phoneRegistered': 'This phone number has been registered',
 
  // Agent Tools Page
  'agent.tools.pageTitle': 'Agent Tools',
  'agent.tools.unselected': 'Unselected',
  'agent.tools.selected': 'Selected',
  'agent.tools.noMorePlugins': 'No more plugins',
  'agent.tools.pleaseSelectPlugin': 'Please select plugin function',
  'agent.tools.builtInPlugins': 'Built-in Plugins',
  'agent.tools.mcpAccessPoint': 'MCP Access Point',
  'agent.tools.copy': 'Copy',
  'agent.tools.noTools': 'No tools available',
  'agent.tools.parameterConfig': 'Param Config',
  'agent.tools.noParamsNeeded': 'No parameters needed',
  'agent.tools.pleaseInput': 'Please input',
  'agent.tools.inputOneItemPerLine': 'Input one item per line',
  'agent.tools.pleaseInputValidJson': 'Please input valid JSON format',
  'agent.tools.enableFunction': 'Enable Function',
  'agent.tools.toggleFunction': 'Turn on or off this function',
  'agent.tools.jsonFormatError': 'JSON format error',
  'agent.tools.noMcpAddressToCopy': 'No MCP address to copy',
  'agent.tools.mcpAddressCopied': 'MCP address copied to clipboard',
  'agent.tools.copyFailed': 'Copy failed, please try again',
  'agent.tools.defaultValue': 'Default value',
  'agent.tools.notSelected': 'Unselected',
  'agent.tools.clickToConfigure': 'Click to configure',
  'agent.tools.mcpEndpoint': 'MCP Endpoint',
  'agent.tools.eachLineOneItem': 'Input one item per line',
 
  // Device Config page
  'deviceConfig.pageTitle': 'Device Configuration',
  'deviceConfig.wifiConfig': 'WiFi Configuration',
  'deviceConfig.ultrasonicConfig': 'Ultrasonic Configuration',
  'deviceConfig.selectConfigMethod': 'Select Configuration Method',
  'deviceConfig.networkConfig': 'Network Configuration',
  'deviceConfig.selectedNetwork': 'Selected Network',
  'deviceConfig.signal': 'Signal',
  'deviceConfig.openNetwork': 'Open Network',
  'deviceConfig.encryptedNetwork': 'Encrypted Network',
  'deviceConfig.password': 'Password',
  'deviceConfig.pleaseEnterPassword': 'Please enter WiFi password',
  'deviceConfig.startConfig': 'Start Configuration',
  'deviceConfig.connectToXiaozhiHotspot': 'Please connect to xiaozhi hotspot first',
  'deviceConfig.detecting': 'Detecting...',
  'deviceConfig.reDetect': 'Re-detect',
  'deviceConfig.alreadyConnected': 'Connected to xiaozhi hotspot',
  'deviceConfig.refreshStatus': 'Refresh Status',
  'deviceConfig.wifiNetworks': 'WiFi Networks',
  'deviceConfig.selectWifiNetwork': 'Select WiFi Network',
  'deviceConfig.refreshScan': 'Refresh Scan',
  'deviceConfig.noWifiNetworks': 'No WiFi networks available',
  'deviceConfig.clickToRefreshScan': 'Please click Refresh Scan',
  'deviceConfig.signalStrong': 'Strong Signal',
  'deviceConfig.signalGood': 'Good Signal',
  'deviceConfig.signalFair': 'Fair Signal',
  'deviceConfig.signalWeak': 'Weak Signal',
  'deviceConfig.channel': 'Channel',
  'deviceConfig.about': 'about',
  'deviceConfig.seconds': 'seconds',
  'deviceConfig.generating': 'Generating...',
  'deviceConfig.playing': 'Playing...',
  'deviceConfig.generateAndPlaySoundWave': 'Generate and Play Sound Wave',
  'deviceConfig.playSoundWave': 'Play Sound Wave',
  'deviceConfig.stopPlaying': 'Stop Playing',
  'deviceConfig.autoLoopPlaySoundWave': 'Auto Loop Play Sound Wave',
  'deviceConfig.configAudioFile': 'Configuration Audio File',
  'deviceConfig.duration': 'Duration',
  'deviceConfig.ultrasonicConfigInstructions': 'Ultrasonic Configuration Instructions',
  'deviceConfig.ensureWifiNetworkSelectedAndPasswordEntered': 'Ensure WiFi network is selected and password is entered',
  'deviceConfig.clickGenerateAndPlaySoundWave': 'Click Generate and Play Sound Wave, the system will encode configuration information into audio',
  'deviceConfig.bringPhoneCloseToXiaozhiDevice': 'Bring phone close to xiaozhi device (1-2 meters distance)',
  'deviceConfig.duringAudioPlaybackXiaozhiWillReceive': 'During audio playback, xiaozhi will receive and decode configuration information',
  'deviceConfig.afterConfigSuccessDeviceWillConnect': 'After successful configuration, the device will automatically connect to WiFi network',
  'deviceConfig.usesAfskModulation': 'Uses AFSK modulation technology, transmitting data through 1800Hz and 1500Hz frequencies',
  'deviceConfig.ensureModeratePhoneVolume': 'Please ensure phone volume is moderate to avoid environmental noise interference',
  'deviceConfig.generatingUltrasonicConfigAudio': 'Generating ultrasonic configuration audio',
  'deviceConfig.configData': 'Configuration data',
  'deviceConfig.dataBytesLength': 'Data bytes length',
  'deviceConfig.bitStreamLength': 'Bit stream length',
  'deviceConfig.base64Length': 'Base64 length',
  'deviceConfig.audioFileTooLarge': 'Audio file too large, please shorten SSID or password length',
  'deviceConfig.audioGenerationSuccess': 'Audio generation successful',
  'deviceConfig.samplePoints': 'Sample points',
  'deviceConfig.soundWaveGenerationSuccess': 'Sound wave generation successful',
  'deviceConfig.audioGenerationFailed': 'Audio generation failed',
  'deviceConfig.soundWaveGenerationFailed': 'Sound wave generation failed',
  'deviceConfig.pleaseGenerateAudioFirst': 'Please generate audio first',
  'deviceConfig.startPlayingUltrasonicConfigAudio': 'Starting to play ultrasonic configuration audio',
  'deviceConfig.ultrasonicAudioStartedPlaying': 'Ultrasonic audio started playing',
  'deviceConfig.startPlayingConfigSoundWave': 'Started playing configuration sound wave',
  'deviceConfig.ultrasonicAudioPlaybackEnded': 'Ultrasonic audio playback ended',
  'deviceConfig.audioPlaybackFailed': 'Audio playback failed',
  'deviceConfig.audioResourceBusy': 'Audio resource busy, please try again later',
  'deviceConfig.audioFormatNotSupported': 'Audio format not supported, may be a data URI issue',
  'deviceConfig.audioFileError': 'Audio file error',
  'deviceConfig.cleaningUpAudioContext': 'Cleaning up audio context',
  'deviceConfig.cleaningUpAudioContextFailed': 'Failed to clean up audio context',
  'deviceConfig.stoppedPlayingUltrasonicAudio': 'Stopped playing ultrasonic audio',
  'deviceConfig.stoppedPlaying': 'Stopped playing',
  'deviceConfig.configMethod': 'Configuration Method',
  'deviceConfig.enterWifiPassword': 'Please enter WiFi password',
  'deviceConfig.xiaozhi': 'xiaozhi',
  'deviceConfig.connectXiaozhiHotspot': 'Please connect to xiaozhi hotspot',
  'deviceConfig.wifiScanResponse': 'WiFi scan response',
  'deviceConfig.scanSuccess': 'Scan successful',
  'deviceConfig.networks': 'networks',
  'deviceConfig.wifiScanFailed': 'WiFi scan failed',
  'deviceConfig.scanFailedCheckConnection': 'Scan failed, please check connection',
  'deviceConfig.checking': 'Checking',
  'deviceConfig.reCheck': 'Re-check',
  'deviceConfig.connectedXiaozhiHotspot': 'Connected to xiaozhi hotspot',
  'deviceConfig.wifiNetwork': 'WiFi Network',
  'deviceConfig.wifiPassword': 'WiFi Password',
  'deviceConfig.scanning': 'Scanning',
  'deviceConfig.cancel': 'Cancel',
  'deviceConfig.clickRefreshScan': 'Please click Refresh Scan',
  'deviceConfig.esp32ConnectionCheckFailed': 'ESP32 connection check failed',
  'deviceConfig.startWifiConfig': 'Starting WiFi configuration',
  'deviceConfig.configSuccess': 'Configuration successful',
  'deviceConfig.deviceWillConnectTo': 'Device will connect to',
  'deviceConfig.deviceWillRestart': 'Device will restart',
  'deviceConfig.pleaseDisconnectXiaozhiHotspot': 'Please disconnect from xiaozhi hotspot',
  'deviceConfig.configFailed': 'Configuration failed',
  'deviceConfig.wifiConfigFailed': 'WiFi configuration failed',
  'deviceConfig.pleaseCheckNetworkConnection': 'Please check network connection',
  'deviceConfig.startWifiConfigButton': 'Start Configuration',
  'deviceConfig.configuring': 'Configuring...',
  'deviceConfig.wifiConfigInstructions': 'WiFi Configuration Instructions',
  'deviceConfig.phoneConnectXiaozhiHotspot': 'Phone connect to xiaozhi hotspot',
  'deviceConfig.selectTargetWifiNetwork': 'Select target WiFi network',
  'deviceConfig.enterWifiPasswordIfNeeded': 'Enter WiFi password if needed',
  'deviceConfig.clickStartConfigAndWait': 'Click Start Configuration and wait',
  'deviceConfig.afterConfigSuccessDeviceWillRestart': 'After successful configuration, device will automatically restart',
  'deviceConfig.audioPlaybackError': 'Audio playback error',
  'deviceConfig.playbackFailed': 'Playback failed',
 
  // Voiceprint page
  'voiceprint.audioNotExist': 'Audio does not exist',
  'voiceprint.getAudioFailed': 'Failed to get audio',
  'voiceprint.audioPlayFailed': 'Audio playback failed',
 
  'parentTask.pageTitle': 'Learning Tasks',
  'parentTask.createTitle': 'Create Learning Task',
  'parentTask.editTitle': 'Edit Learning Task',
  'parentTask.device': 'Device',
  'parentTask.selectDevice': 'Select a device',
  'parentTask.bindDeviceFirst': 'Bind a device first',
  'parentTask.runningSection': 'Running now',
  'parentTask.scheduledSection': 'Scheduled tasks',
  'parentTask.running': 'Running',
  'parentTask.emptySchedule': 'No schedules yet. Tap + to create extensive listening, shadowing, or chat.',
  'parentTask.startNow': 'Start now',
  'parentTask.saveSchedule': 'Save schedule',
  'parentTask.started': 'Sent to the device',
  'parentTask.saved': 'Schedule synced to the device',
  'parentTask.saveFailed': 'Save failed',
  'parentTask.deviceOffline': 'Device is offline, so nothing was saved. Turn it on and connect it to the network, then try again.',
  'parentTask.online': 'Device online',
  'parentTask.offline': 'Device offline',
  'parentTask.checkingOnline': 'Checking device status…',
  'parentTask.onlineHint': 'You can send immediate and scheduled tasks.',
  'parentTask.offlineHint': 'Cannot send immediate or scheduled tasks. Turn the device on and connect it to the network.',
  'parentTask.startFailed': 'Dispatch failed. Check that the device is online.',
  'parentTask.stop': 'Stop',
  'parentTask.stopTitle': 'Stop current task',
  'parentTask.stopConfirm': 'The device will return to chat immediately.',
  'parentTask.stopped': 'Sent stop to the device',
  'parentTask.stopFailed': 'Stop failed. Check that the device is online.',
  'parentTask.deleteTitle': 'Delete task',
  'parentTask.deleteConfirm': 'This schedule will also be removed from the device.',
  'parentTask.deleted': 'Deleted',
  'parentTask.deleteFailed': 'Delete failed',
  'parentTask.scene': 'Scene',
  'parentTask.dispatchHint': 'Start now switches the device immediately. A schedule starts that mode at the set time, no voice command needed.',
  'parentTask.lesson': 'Lesson',
  'parentTask.pickScene': 'Choose a scene',
  'parentTask.pickLesson': 'Choose a lesson',
  'parentTask.repeat': 'Repeats',
  'parentTask.level': 'Level',
  'parentTask.system': 'Category',
  'parentTask.story': 'Idiom story',
  'parentTask.pickStory': 'Choose one story',
  'parentTask.noStories': 'No stories in this category yet. Add them in the lesson catalog.',
  'parentTask.sentenceCount': 'Shadowing has {n} sentences',
  'parentTask.enPassesTitle': 'How to listen in English',
  'parentTask.cnFixed': 'Chinese plays once at 1.0×, then English uses the passes below.',
  'parentTask.enPassIndex': 'English pass {n}',
  'parentTask.addEnPass': 'Add an English pass',
  'parentTask.removePass': 'Remove',
  'parentTask.shadowingSettings': 'Shadowing',
  'parentTask.shadowingLang': 'Language',
  'parentTask.shadowingLang.cn': 'Chinese',
  'parentTask.shadowingLang.en': 'English',
  'parentTask.shadowingSpeed': 'Playback speed',
  'parentTask.shadowingHint': 'Listen window = actual play time × 1.2. Current speed {speed}×; slower playback makes a longer window.',
  'parentTask.languagePair': 'Language pair',
  'parentTask.pickPair': 'Choose a language pair',
  'parentTask.pairSoon': 'coming soon',
  'parentTask.pairFallbackHint': 'Full phrase packs are still in progress. The device will practice in Chinese-English first.',
  'parentTask.duration': 'Duration (minutes, 0 = unlimited)',
  'parentTask.noDuration': 'No time limit',
  'parentTask.minutesValue': '{n} min',
  'parentTask.onComplete': 'When finished',
  'parentTask.completeChat': 'Return to chat',
  'parentTask.completePowerOff': 'Soft power off',
  'parentTask.howToRun': 'How to run',
  'parentTask.immediate': 'Run now',
  'parentTask.schedule': 'Schedule',
  'parentTask.schedule.daily': 'Daily',
  'parentTask.schedule.hourly': 'Hourly',
  'parentTask.schedule.interval': 'Interval',
  'parentTask.time': 'Time',
  'parentTask.pickTime': 'Pick a time',
  'parentTask.timeHint': 'Any hour and minute of the day',
  'parentTask.repeatDays': 'Repeat',
  'parentTask.everyDay': 'Every day',
  'parentTask.weekdays': 'Weekdays',
  'parentTask.hourlyMinute': 'Minute of each hour',
  'parentTask.hourlyOnTheHour': 'Every hour on the hour',
  'parentTask.hourlyAt': 'Every hour at :{minute}',
  'parentTask.everyMinutes': 'Every {minutes} minutes',
  'parentTask.intervalMinutes': 'Interval (minutes)',
  'parentTask.weekday.mon': 'Mon',
  'parentTask.weekday.tue': 'Tue',
  'parentTask.weekday.wed': 'Wed',
  'parentTask.weekday.thu': 'Thu',
  'parentTask.weekday.fri': 'Fri',
  'parentTask.weekday.sat': 'Sat',
  'parentTask.weekday.sun': 'Sun',
 
  'parentHistory.pageTitle': 'History',
  'parentHistory.detailTitle': 'Record',
  'parentHistory.entry': 'History',
  'parentHistory.empty': 'No records yet. They appear after the child finishes a task.',
  'parentHistory.loadFailed': 'Failed to load',
  'parentHistory.status.running': 'In progress',
  'parentHistory.status.completed': 'Completed',
  'parentHistory.status.cancelled': 'Stopped',
  'parentHistory.status.preempted': 'Interrupted',
  'parentHistory.status.other': 'Incomplete',
  'parentHistory.source.immediate': 'Started now',
  'parentHistory.source.schedule': 'Scheduled',
  'parentHistory.source.voice': 'Voice command',
  'parentHistory.durationSec': '{s}s',
  'parentHistory.durationMin': '{m}m {s}s',
  'parentHistory.turns': '{n} lines',
  'parentHistory.sentence': 'Line {n}',
  'parentHistory.expected': 'Original',
  'parentHistory.asr': 'Follow-read',
  'parentHistory.noExpected': 'No original text',
  'parentHistory.noAsr': 'No follow-read recognized',
  'parentHistory.noAudio': 'No playable recording',
  'parentHistory.emptyTurns': 'No sentence records for this shadowing session.',
  'parentHistory.extensiveHint': 'Extensive listening has no per-sentence recordings. This page shows completion and duration.',
  'parentHistory.noChat': 'No chat was saved for this window.',
}