wangzhibo
2026-08-30 c8515170fd399b4d2dfaebb59128d4674e58915e
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
// Pacote de idioma Português Brasileiro
export default {
  // TabBar
  'tabBar.home': 'Início',
  'tabBar.deviceConfig': 'Config. de Rede',
  'tabBar.settings': 'Sistema',
  // Settings page title
  'settings.title': 'Configurações',
  // Login page
  'login.pageTitle': 'Entrar',
  'login.navigationTitle': 'Entrar',
  'login.fetchConfigError': 'Falha ao buscar configuração:',
  'login.selectLanguage': 'Selecionar Idioma',
  'login.selectLanguageTip': 'Pt',
  'login.welcomeBack': 'Bem-vindo de Volta',
  'login.pleaseLogin': 'Por favor, entre na sua conta',
  'login.enterUsername': 'Por favor, insira o nome de usuário',
  'login.enterPassword': 'Por favor, insira a senha',
  'login.enterCaptcha': 'Por favor, insira o código de verificação',
  'login.loginButton': 'Entrar',
  'login.loggingIn': 'Entrando...',
  'login.noAccount': 'Cadastrar',
  'login.enterPhone': 'Por favor, insira o número de telefone',
  'login.selectCountry': 'Selecionar País/Região',
  'login.confirm': 'Confirmar',
  'login.serverSetting': 'Configurações do Servidor',
  'login.requiredUsername': 'O nome de usuário não pode estar vazio',
  'login.requiredPassword': 'A senha não pode estar vazia',
  'login.requiredCaptcha': 'O código de verificação não pode estar vazio',
  'login.requiredMobile': 'Por favor, insira um número de telefone válido',
  'login.captchaError': 'Erro no código de verificação gráfico',
  'login.forgotPassword': 'Esqueceu a Senha',
  'login.userAgreement': 'Termos de Uso',
  'login.privacyPolicy': 'Política de Privacidade',
 
  // Register page
  'register.pageTitle': 'Cadastro',
  'register.createAccount': 'Criar Conta',
  'register.enterUsername': 'Por favor, insira o nome de usuário',
  'register.enterPassword': 'Por favor, insira a senha',
  'register.confirmPassword': 'Por favor, confirme a senha',
  'register.enterPhone': 'Por favor, insira o número de telefone',
  'register.enterCode': 'Por favor, insira o código de verificação',
  'register.getCode': 'Obter Código',
  'register.agreeTerms': 'Li e concordo com os',
  'register.terms': 'Termos de Uso',
  'register.privacy': 'Política de Privacidade',
  'register.registerButton': 'Cadastrar',
  'register.registering': 'Cadastrando...',
  'register.haveAccount': 'Já tem uma conta?',
  'register.loginNow': 'Entrar Agora',
  'register.selectCountry': 'Selecionar País/Região',
  'register.confirm': 'Confirmar',
  'register.captchaSendSuccess': 'Código de verificação enviado com sucesso',
 
  // Home page
  'home.pageTitle': 'Início',
  'home.createAgent': 'Criar Agente',
  'home.agentName': 'Agente',
  'home.modelInfo': 'Info do Modelo',
  'home.lastActive': 'Última Atividade',
  'home.greeting': 'Olá Jarvis',
  'home.subtitle': 'Vamos ter',
  'home.wonderfulDay': 'um dia maravilhoso!',
  'home.emptyState': 'Nenhum agente disponível',
  'home.deviceManagement': 'Gerenciamento de Dispositivos',
  'home.lastConversation': 'Última Conversa:',
  'home.delete': 'Excluir',
  'home.createFirstAgent': 'Clique no botão + no canto inferior direito para criar seu primeiro agente',
  'home.dialogTitle': 'Criar Agente',
  'home.inputPlaceholder': 'ex: Assistente de Atendimento, Assistente de Voz, Perguntas e Respostas',
  'home.createError': 'O comprimento do nome deve estar entre 1 e 64 caracteres',
  'home.createNow': 'Criar Agora',
  'home.deleteConfirmTitle': 'Excluir Agente',
  'home.confirmDeleteAgent': 'A exclusão não pode ser desfeita. Digite o nome do agente "{agentName}" para confirmar.',
  'home.deleteAgentNamePlaceholder': 'Digite o nome do agente',
  'home.deleteAgentNameMismatch': 'O nome do agente não corresponde',
  'home.deleteAgentPasteForbidden': 'Digite o nome do agente manualmente. Colar não é permitido.',
  'home.deleteAgentMissingInfo': 'Não foi possível confirmar as informações do agente. Atualize a página e tente novamente.',
  'home.deleteAgentSuccess': 'Agente excluído com sucesso',
  'home.justNow': 'Agora mesmo',
  'home.minutesAgo': 'minutos atrás',
  'home.hoursAgo': 'horas atrás',
  'home.daysAgo': 'dias atrás',
  'home.languageModel': 'LLM',
  'home.voiceModel': 'TTS',
 
  // Agent page
  'agent.pageTitle': 'Agente',
  'agent.roleConfig': 'Configuração de Papel',
  'agent.deviceManagement': 'Gerenciamento de Dispositivos',
  'agent.chatHistory': 'Histórico de Conversas',
  'agent.voiceprintManagement': 'Gerenciamento de Impressão Vocal',
  'agent.editTitle': 'Editar Agente',
  'agent.toolsTitle': 'Editar Funcionalidades',
  'agent.voiceActivityDetection': 'Detecção de Atividade de Voz',
  'agent.speechRecognition': 'Reconhecimento de Fala',
  'agent.largeLanguageModel': 'Modelo de Linguagem Grande',
  'agent.save': 'Salvar',
  'agent.cancel': 'Cancelar',
  // Agent Edit Page
  'agent.basicInfo': 'Informações Básicas',
  'agent.agentName': 'Nome do Agente',
  'agent.inputAgentName': 'Por favor, insira o nome do agente',
  'agent.roleMode': 'Modo de Papel',
  'agent.agentTag': 'Etiquetas de corpo inteligente',
  'agent.addAgentTag': 'Adicionar etiqueta',
  'agent.inputAgentTag': 'Por favor, insira o rótulo do corpo inteligente',
  'agent.contextProvider': 'Contexto',
  'agent.contextProviderSuccess': '{count} fontes adicionadas com sucesso.',
  'agent.contextProviderDocLink': 'Como implantar provedor de contexto',
  'agent.editContextProvider': 'Editar Fonte',
  'agent.roleDescription': 'Descrição do Papel',
  'agent.inputRoleDescription': 'Por favor, insira a descrição do papel',
  'agent.modelConfig': 'Configuração do Modelo',
  'agent.vad': 'Detecção de Atividade de Voz',
  'agent.asr': 'Reconhecimento de Fala',
  'agent.llm': 'Modelo de Linguagem Principal',
  'agent.slm': 'Modelo de pequenos parâmetros',
  'agent.vllm': 'Modelo de Linguagem Visual',
  'agent.intent': 'Reconhecimento de Intenção',
  'agent.memory': 'Memória',
  'agent.voiceSettings': 'Configurações de Voz',
  'agent.tts': 'Texto para Fala',
  'agent.voiceprint': 'Voz do Agente',
  'agent.plugins': 'Plugins',
  'agent.editFunctions': 'Editar Funções',
  'agent.historyMemory': 'Memória de Histórico',
  'agent.memoryContent': 'Conteúdo da memória',
  'agent.saving': 'Salvando...',
  'agent.saveSuccess': 'Salvo com sucesso',
  'agent.saveFail': 'Falha ao salvar',
  'agent.ttsOptionsLoadFailed': 'Não foi possível carregar as opções de voz. As configurações anteriores foram mantidas.',
  'agent.loadFail': 'Falha ao carregar',
  'agent.pleaseInputAgentName': 'Por favor, insira o nome do agente',
  'agent.pleaseInputRoleDescription': 'Por favor, insira a descrição do papel',
  'agent.pleaseSelect': 'Por favor, selecione',
  'agent.reportText': 'Enviar Texto',
  'agent.reportTextVoice': 'Enviar Texto+Voz',
  'agent.reportMode': 'Modo de Envio',
  'agent.language': 'Idioma de Conversa',
  'agent.languageConfig': 'Configuração de Voz',
  'agent.ttsVolume': 'Volume',
  'agent.ttsRate': 'Taxa de Fala',
  'agent.ttsPitch': 'Tonalidade',
  'agent.volumeHint': '-100=Mínimo, 0=Padrão, 100=Máximo',
  'agent.speedHint': '-100=Slower, 0=Standard, 100=Faster',
  'agent.pitchHint': '-100=Lowest, 0=Standard, 100=Highest',
 
  // Histórico de versões do agente
  'agentSnapshot.title': 'Histórico de Versões',
  'agentSnapshot.empty': 'Ainda sem versões',
  'agentSnapshot.emptyTip': 'Configurações salvas aparecerão aqui',
  'agentSnapshot.version': 'Versão',
  'agentSnapshot.createdAt': 'Salvo em',
  'agentSnapshot.source': 'Origem',
  'agentSnapshot.changedFields': 'Alterações',
  'agentSnapshot.view': 'Ver',
  'agentSnapshot.restore': 'Restaurar',
  'agentSnapshot.delete': 'Excluir',
  'agentSnapshot.loadMore': 'Carregar Mais',
  'agentSnapshot.detailTitle': 'Detalhes da Alteração',
  'agentSnapshot.restorePreviewTitle': 'Prévia da Restauração',
  'agentSnapshot.confirmRestore': 'Confirmar Restauração',
  'agentSnapshot.currentVersion': 'Snapshot mais recente',
  'agentSnapshot.beforeChange': 'Antes',
  'agentSnapshot.afterChange': 'Depois',
  'agentSnapshot.beforeRestore': 'Antes da Restauração',
  'agentSnapshot.afterRestore': 'Depois da Restauração',
  'agentSnapshot.configValue': 'Valor da Configuração',
  'agentSnapshot.emptyValue': 'Nenhum',
  'agentSnapshot.secretRedacted': 'Segredo oculto',
  'agentSnapshot.redactedValueChanged': 'O valor está oculto, mas foi alterado',
  'agentSnapshot.noChangedContent': 'Nenhuma alteração exibível',
  'agentSnapshot.recordedChange': 'Alterado quando registrado',
  'agentSnapshot.noRestoreNeeded': 'A configuração atual já corresponde a esta versão',
  'agentSnapshot.unsavedChangesTitle': 'Alterações não salvas',
  'agentSnapshot.unsavedChangesWarning': 'Continuar descartará as alterações não salvas desta página.',
  'agentSnapshot.discardAndRestore': 'Descartar e restaurar',
  'agentSnapshot.restoreConfirm': 'Restaurar para a versão #{version}? A configuração atual continuará disponível no histórico.',
  'agentSnapshot.restoreMemoryWarning': 'Restaurar para uma versão sem memória limpará o histórico de chat deste agente. Confirme o risco.',
  'agentSnapshot.restoreChatHistoryDestructiveWarning': 'Esta restauração excluirá permanentemente o histórico de chat existente deste agente. O histórico de chat não faz parte dos snapshots de configuração e não pode ser recuperado pelo histórico de versões.',
  'agentSnapshot.restoreSuccess': 'Versão restaurada',
  'agentSnapshot.restoreFailed': 'Falha ao restaurar versão',
  'agentSnapshot.reloadAfterRestorePending': 'Recarregando a configuração e as tags restauradas. Não é possível salvar até a conclusão.',
  'agentSnapshot.reloadAfterRestoreFailed': 'Não foi possível recarregar a configuração ou as tags restauradas. O salvamento permanece desativado para impedir que dados antigos sobrescrevam a restauração. Tente novamente.',
  'agentSnapshot.retryReload': 'Recarregar',
  'agentSnapshot.mutationBusy': 'A configuração está sendo salva ou recarregada. Aguarde a conclusão antes de abrir o histórico de versões ou restaurar.',
  'agentSnapshot.deleteConfirm': 'Excluir versão #{version}? Esta ação não pode ser desfeita.',
  'agentSnapshot.deleteSuccess': 'Versão excluída',
  'agentSnapshot.deleteFailed': 'Falha ao excluir versão',
  'agentSnapshot.fetchFailed': 'Falha ao buscar versões',
  'agentSnapshot.detailFailed': 'Falha ao buscar detalhes da versão',
  'agentSnapshot.correctWordCount': '{count} palavras de substituição',
  'agentSnapshot.source.config': 'Configuração Salva',
  'agentSnapshot.source.current': 'Configuração Atual',
  'agentSnapshot.source.restore': 'Restaurado',
  'agentSnapshot.source.initial': 'Versão Inicial',
  'agentSnapshot.field.initial': 'Snapshot Inicial',
  'agentSnapshot.field.agentCode': 'Código do Agente',
  'agentSnapshot.field.agentName': 'Apelido',
  'agentSnapshot.field.asrModelId': 'Reconhecimento de Fala',
  'agentSnapshot.field.vadModelId': 'Detecção de Voz',
  'agentSnapshot.field.llmModelId': 'Modelo Principal',
  'agentSnapshot.field.slmModelId': 'Modelo Pequeno',
  'agentSnapshot.field.vllmModelId': 'Modelo Visual',
  'agentSnapshot.field.ttsModelId': 'Texto para Fala',
  'agentSnapshot.field.ttsVoiceId': 'Voz',
  'agentSnapshot.field.ttsLanguage': 'Idioma',
  'agentSnapshot.field.ttsVolume': 'Volume',
  'agentSnapshot.field.ttsRate': 'Velocidade',
  'agentSnapshot.field.ttsPitch': 'Tonalidade',
  'agentSnapshot.field.memModelId': 'Modo de Memória',
  'agentSnapshot.field.intentModelId': 'Reconhecimento de Intenção',
  'agentSnapshot.field.chatHistoryConf': 'Configuração do Histórico',
  'agentSnapshot.field.systemPrompt': 'Descrição do Papel',
  'agentSnapshot.field.summaryMemory': 'Memória',
  'agentSnapshot.field.langCode': 'Código do Idioma',
  'agentSnapshot.field.language': 'Idioma de Interação',
  'agentSnapshot.field.sort': 'Ordenação',
  'agentSnapshot.field.functions': 'Plugins',
  'agentSnapshot.field.contextProviders': 'Fontes de Contexto',
  'agentSnapshot.field.correctWordFileIds': 'Palavras de Substituição',
  'agentSnapshot.field.tagNames': 'Tags do Agente',
  'agentSnapshot.chatHistoryConf.none': 'Não registrar histórico de chat',
  'agentSnapshot.chatHistoryConf.text': 'Reportar texto',
  'agentSnapshot.chatHistoryConf.textVoice': 'Reportar texto e voz',
  'agentSnapshot.model.Memory_nomem': 'Sem memória',
  'agentSnapshot.model.Memory_mem_local_short': 'Memória curta local',
  'agentSnapshot.model.Memory_mem0ai': 'Memória Mem0AI',
  'agentSnapshot.model.Memory_mem_report_only': 'Apenas reportar',
  'agentSnapshot.model.Intent_nointent': 'Sem reconhecimento de intenção',
  'agentSnapshot.model.Intent_intent_llm': 'Reconhecimento por LLM externo',
  'agentSnapshot.model.Intent_function_call': 'Chamada de função por LLM',
 
  // Diálogo de provedor de contexto
  'contextProviderDialog.title': 'Editar Fonte',
  'contextProviderDialog.noContextApi': 'Sem API de Contexto',
  'contextProviderDialog.add': 'Adicionar',
  'contextProviderDialog.apiUrl': 'URL da API',
  'contextProviderDialog.apiUrlPlaceholder': 'http://api.example.com/data',
  'contextProviderDialog.requestHeaders': 'Cabeçalhos da Requisição',
  'contextProviderDialog.headerKeyPlaceholder': 'Chave',
  'contextProviderDialog.headerValuePlaceholder': 'Valor',
  'contextProviderDialog.noHeaders': 'Sem Cabeçalhos',
  'contextProviderDialog.addHeader': 'Adicionar Cabeçalho',
  'contextProviderDialog.cancel': 'Cancelar',
  'contextProviderDialog.confirm': 'Confirmar',
 
  // Diálogo de adição manual de dispositivo
  'manualAddDeviceDialog.title': 'Adicionar Dispositivo Manualmente',
  'manualAddDeviceDialog.deviceType': 'Tipo de Dispositivo',
  'manualAddDeviceDialog.deviceTypePlaceholder': 'Por favor, selecione o tipo de dispositivo',
  'manualAddDeviceDialog.firmwareVersion': 'Versão do Firmware',
  'manualAddDeviceDialog.firmwareVersionPlaceholder': 'Por favor, insira a versão do firmware',
  'manualAddDeviceDialog.macAddress': 'Endereço MAC',
  'manualAddDeviceDialog.macAddressPlaceholder': 'Por favor, insira o endereço MAC',
  'manualAddDeviceDialog.confirm': 'Confirmar',
  'manualAddDeviceDialog.cancel': 'Cancelar',
  'manualAddDeviceDialog.requiredMacAddress': 'Por favor, insira o endereço MAC',
  'manualAddDeviceDialog.invalidMacAddress': 'Por favor, insira o formato correto de endereço MAC, ex.: 00:1A:2B:3C:4D:5E',
  'manualAddDeviceDialog.requiredDeviceType': 'Por favor, selecione o tipo de dispositivo',
  'manualAddDeviceDialog.requiredFirmwareVersion': 'Por favor, insira a versão do firmware',
  'manualAddDeviceDialog.getFirmwareTypeFailed': 'Falha ao obter tipo de firmware',
  'manualAddDeviceDialog.addSuccess': 'Dispositivo adicionado com sucesso',
  'manualAddDeviceDialog.addFailed': 'Falha ao adicionar',
  'manualAddDeviceDialog.bindWithCode': 'Vincular com Código de 6 Dígitos',
 
  // Chat History Page
  'chatHistory.getChatSessions': 'Obter lista de sessões de conversa',
  'chatHistory.noSelectedAgent': 'Nenhum agente selecionado',
  'chatHistory.getChatSessionsFailed': 'Falha ao obter lista de sessões de conversa:',
  'chatHistory.unknownTime': 'Hora desconhecida',
  'chatHistory.justNow': 'Agora mesmo',
  'chatHistory.minutesAgo': '{minutes} minutos atrás',
  'chatHistory.hoursAgo': '{hours} horas atrás',
  'chatHistory.daysAgo': '{days} dias atrás',
  'chatHistory.conversationRecord': 'Registro de Conversas',
  'chatHistory.totalChats': '{count} conversas no total',
  'chatHistory.loading': 'Carregando...',
  'chatHistory.noMoreData': 'Não há mais dados',
  'chatHistory.noChatRecords': 'Nenhum registro de conversa',
  'chatHistory.chatRecordsDescription': 'Os registros de conversas com agentes serão exibidos aqui',
  // Chat History Detail Page
  'chatHistory.pageTitle': 'Detalhe da Conversa',
  'chatHistory.assistantName': 'Assistente Inteligente',
  'chatHistory.userName': 'Usuário',
  'chatHistory.aiAssistantName': 'Assistente IA',
  'chatHistory.loadFailed': 'Falha ao carregar histórico de conversas',
  'chatHistory.parameterError': 'Erro de parâmetro da página',
  'chatHistory.invalidAudioId': 'ID de áudio inválido',
  'chatHistory.audioPlayFailed': 'Falha na reprodução de áudio',
  'chatHistory.playAudioFailed': 'Falha ao reproduzir áudio',
 
  // Device management page
  'device.pageTitle': 'Gerenciamento de Dispositivos',
  'device.noDevices': 'Nenhum dispositivo disponível',
  'device.macAddress': 'Endereço MAC',
  'device.firmwareVersion': 'Versão do Firmware',
  'device.lastConnected': 'Última Conversa',
  'device.otaUpdate': 'Atualização OTA',
  'device.unbind': 'Desvincular',
  'device.confirmUnbind': 'Confirmar',
  'device.bindDevice': 'Vincular Novo Dispositivo',
  'device.deviceType': 'Tipo de Dispositivo',
  'device.loading': 'Carregando...',
  'device.neverConnected': 'Nunca conectado',
  'device.justNow': 'Agora mesmo',
  'device.minutesAgo': '{minutes} minutos atrás',
  'device.hoursAgo': '{hours} horas atrás',
  'device.daysAgo': '{days} dias atrás',
  'device.otaAutoUpdateEnabled': 'Atualização automática OTA ativada',
  'device.otaAutoUpdateDisabled': 'Atualização automática OTA desativada',
  'device.operationFailed': 'Operação falhou, por favor tente novamente',
  'device.deviceUnbound': 'Dispositivo desvinculado',
  'device.unbindFailed': 'Falha ao desvincular, por favor tente novamente',
  'device.unbindDevice': 'Desvincular Dispositivo',
  'device.confirmUnbindDevice': 'Tem certeza que deseja desvincular o dispositivo "{macAddress}"?',
  'device.cancel': 'Cancelar',
  'device.noDevice': 'Nenhum Dispositivo',
  'device.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
  'device.deviceBindSuccess': 'Dispositivo vinculado com sucesso!',
  'device.bindFailed': 'Falha ao vincular, por favor verifique se o código de verificação está correto',
  'device.enterDeviceCode': 'Por favor, insira o código de verificação do dispositivo',
  'device.bindNow': 'Vincular Agora',
  'device.lastConnection': 'Última Conexão',
  'device.clickToBindFirstDevice': 'Clique no botão + no canto inferior direito para vincular seu primeiro dispositivo',
 
  // Common
  'common.success': 'Sucesso',
  'common.fail': 'Falhou',
  'common.loading': 'Carregando...',
  'common.confirm': 'Confirmar',
  'common.cancel': 'Cancelar',
  'common.delete': 'Excluir',
  'common.edit': 'Editar',
  'common.add': 'Adicionar',
  'common.pleaseSelect': 'Por favor, selecione',
  'common.unknownError': 'Erro desconhecido',
  'common.networkError': 'Erro de rede',
 
  // Retrieve Password page
  'retrievePassword.title': 'Redefinir Senha',
  'retrievePassword.subtitle': 'Recupere a senha da sua conta pelo número de celular',
  'retrievePassword.mobileRequired': 'Por favor, insira o número de celular',
  'retrievePassword.inputCorrectMobile': 'Por favor, insira um número de celular válido',
  'retrievePassword.captchaRequired': 'Por favor, insira o código de verificação gráfico',
  'retrievePassword.mobileCaptchaRequired': 'Por favor, insira o código de verificação por SMS',
  'retrievePassword.newPasswordRequired': 'Por favor, insira a nova senha',
  'retrievePassword.confirmNewPasswordRequired': 'Por favor, confirme a nova senha',
  'retrievePassword.passwordsNotMatch': 'As senhas não coincidem',
  'retrievePassword.mobilePlaceholder': 'Por favor, insira o número de celular',
  'retrievePassword.captchaPlaceholder': 'Por favor, insira o código de verificação gráfico',
  'retrievePassword.mobileCaptchaPlaceholder': 'Por favor, insira o código de verificação por SMS',
  'retrievePassword.newPasswordPlaceholder': 'Por favor, insira a nova senha',
  'retrievePassword.confirmNewPasswordPlaceholder': 'Por favor, confirme a nova senha',
  'retrievePassword.getMobileCaptcha': 'Obter Código',
  'retrievePassword.captchaSendSuccess': 'Código de verificação enviado com sucesso',
  'retrievePassword.passwordUpdateSuccess': 'Senha redefinida com sucesso',
  'retrievePassword.resetButton': 'Redefinir Senha',
  'retrievePassword.goToLogin': 'Voltar ao Login',
 
  // SM2 encryption related error messages
  'sm2.publicKeyNotConfigured': 'Chave pública SM2 não configurada, por favor entre em contato com o administrador',
  'sm2.encryptionFailed': 'Falha na criptografia da senha',
  'sm2.keyGenerationFailed': 'Falha na geração do par de chaves',
  'sm2.invalidPublicKey': 'Formato de chave pública inválido',
  'sm2.encryptionError': 'Ocorreu um erro durante a criptografia',
  'sm2.publicKeyRetry': 'Tentando obter a chave pública novamente...',
  'sm2.publicKeyRetryFailed': 'Falha na nova tentativa de obter a chave pública',
 
  // Voiceprint page
  'voiceprint.noSelectedAgent': 'Nenhum agente selecionado',
  'voiceprint.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
  'voiceprint.fetchHistoryFailed': 'Falha ao buscar histórico de conversas',
  'voiceprint.clickToSelectVector': 'Clique para selecionar vetor de impressão vocal',
  'voiceprint.pleaseInputName': 'Por favor, insira o nome',
  'voiceprint.pleaseSelectVector': 'Por favor, selecione o vetor de impressão vocal',
  'voiceprint.addSuccess': 'Adicionado com sucesso',
  'voiceprint.addFailed': 'Falha ao adicionar locutor',
  'voiceprint.editSuccess': 'Editado com sucesso',
  'voiceprint.editFailed': 'Falha ao editar locutor',
  'voiceprint.deleteConfirmMsg': 'Tem certeza que deseja excluir este locutor?',
  'voiceprint.deleteConfirmTitle': 'Confirmar Exclusão',
  'voiceprint.deleteSuccess': 'Excluído com sucesso',
  'voiceprint.loading': 'Carregando...',
  'voiceprint.delete': 'Excluir',
  'voiceprint.emptyTitle': 'Nenhum dado de impressão vocal',
  'voiceprint.emptyDesc': 'Clique no botão + no canto inferior direito para adicionar seu primeiro locutor',
  'voiceprint.addSpeaker': 'Adicionar Locutor',
  'voiceprint.voiceVector': 'Vetor de Impressão Vocal',
  'voiceprint.name': 'Nome',
  'voiceprint.description': 'Descrição',
  'voiceprint.pleaseInputDescription': 'Por favor, insira a descrição',
  'voiceprint.cancel': 'Cancelar',
  'voiceprint.save': 'Salvar',
  'voiceprint.editSpeaker': 'Editar Locutor',
  'voiceprint.selectVector': 'Selecionar Vetor de Impressão Vocal',
  'voiceprint.voiceprintInterfaceNotConfigured': 'Interface de impressão vocal não configurada',
 
  // Settings page
  'settings.pageTitle': 'Configurações',
  'settings.navigationTitle': 'Configurações',
  'settings.networkSettings': 'Configurações de Rede',
  'settings.serverApiUrl': 'URL da API do Servidor',
  'settings.validServerUrl': 'Por favor, insira um endereço de servidor válido (começando com http ou https e terminando com /xiaozhi)',
  'settings.saveSettings': 'Salvar Configurações',
  'settings.resetDefault': 'Restaurar Padrão',
  'settings.restartApp': 'Reiniciar App',
  'settings.restartNow': 'Reiniciar Agora',
  'settings.restartLater': 'Depois',
  // About us
  'settings.aboutApp': 'Sobre o Console XiaoZhi',
  'settings.aboutContent': 'Console XiaoZhi\n\nUm aplicativo móvel de gerenciamento multiplataforma construído com Vue.js 3 + uni-app, oferecendo gerenciamento de dispositivos, configuração de agentes e outras funcionalidades para o hardware inteligente xiaozhi ESP32.\n\n© 2025 xiaozhi-esp32-server {version}',
  'settings.restartSuccess': 'Salvo, você pode reiniciar o app manualmente depois',
  'settings.serverUrlSavedAndCacheCleared': 'URL do servidor salva e cache limpo',
  'settings.resetToDefaultAndCacheCleared': 'Restaurado ao padrão e cache limpo',
  'settings.resetSuccess': 'Restauração bem-sucedida',
  'settings.enterServerUrl': 'Por favor, insira a URL do servidor',
  'settings.clearCacheFailed': 'Falha ao limpar o cache',
  'settings.cacheManagement': 'Gerenciamento de Cache',
  'settings.totalCacheSize': 'Tamanho Total do Cache',
  'settings.appDataSize': 'Tamanho Total dos Dados do App',
  'settings.cacheClear': 'Limpar Cache',
  'settings.clearAllCache': 'Limpar todos os dados de cache',
  'settings.clearCache': 'Limpar Cache',
  'settings.modifyWillClearCache': 'Modificações irão limpar o cache',
  'settings.appInfo': 'Informações do App',
  'settings.aboutUs': 'Sobre Nós',
  'settings.appVersion': 'Versão do App e Info da Equipe',
  'settings.confirmClear': 'Confirmar Limpeza',
  'settings.confirmClearMessage': 'Tem certeza que deseja limpar todo o cache? Isso excluirá todos os dados, incluindo o status de login, e exigirá novo login.',
  'settings.cacheCleared': 'Cache limpo com sucesso, redirecionando para a página de login',
  'settings.languageSettings': 'Configurações de Idioma',
  'settings.language': 'Idioma',
  'settings.selectLanguage': 'Selecionar Idioma',
  'settings.languageChanged': 'Idioma alterado com sucesso',
 
  // Messages
  'message.loginSuccess': 'Login realizado com sucesso!',
  'message.loginFail': 'Falha no login',
  'message.registerSuccess': 'Cadastro realizado com sucesso',
  'message.registerFail': 'Falha no cadastro',
  'message.saveSuccess': 'Salvo com sucesso',
  'message.saveFail': 'Falha ao salvar',
  'message.deleteSuccess': 'Excluído com sucesso',
  'message.deleteFail': 'Falha ao excluir',
  'message.bindSuccess': 'Vinculação realizada com sucesso',
  'message.bindFail': 'Falha na vinculação',
  'message.unbindSuccess': 'Desvinculação realizada com sucesso',
  'message.unbindFail': 'Falha na desvinculação',
  'message.networkError': 'Erro de rede, por favor verifique sua conexão',
  'message.serverError': 'Erro no servidor, por favor tente novamente mais tarde',
  'message.invalidAddress': 'O endereço pode ser inválido, verifique se o servidor está iniciado ou se a conexão de rede está correta; Também pode ser impossível enviar solicitações devido a problemas com o protocolo HTTPS',
  'message.languageChanged': 'Idioma alterado',
  'message.passwordError': 'Conta ou senha incorretos',
  'message.phoneRegistered': 'Este número de telefone já está cadastrado',
 
  // Agent Tools Page
  'agent.tools.pageTitle': 'Ferramentas do Agente',
  'agent.tools.unselected': 'Não selecionado',
  'agent.tools.selected': 'Selecionado',
  'agent.tools.noMorePlugins': 'Não há mais plugins',
  'agent.tools.pleaseSelectPlugin': 'Por favor, selecione a função do plugin',
  'agent.tools.builtInPlugins': 'Plugins Integrados',
  'agent.tools.mcpAccessPoint': 'Ponto de Acesso MCP',
  'agent.tools.copy': 'Copiar',
  'agent.tools.noTools': 'Nenhuma ferramenta disponível',
  'agent.tools.parameterConfig': 'Configuração',
  'agent.tools.noParamsNeeded': 'Nenhum parâmetro necessário',
  'agent.tools.pleaseInput': 'Por favor, insira',
  'agent.tools.inputOneItemPerLine': 'Insira um item por linha',
  'agent.tools.pleaseInputValidJson': 'Por favor, insira um formato JSON válido',
  'agent.tools.enableFunction': 'Ativar Função',
  'agent.tools.toggleFunction': 'Ativar ou desativar esta função',
  'agent.tools.jsonFormatError': 'Erro no formato JSON',
  'agent.tools.noMcpAddressToCopy': 'Nenhum endereço MCP para copiar',
  'agent.tools.mcpAddressCopied': 'Endereço MCP copiado para a área de transferência',
  'agent.tools.copyFailed': 'Falha ao copiar, por favor tente novamente',
  'agent.tools.defaultValue': 'Valor padrão',
  'agent.tools.notSelected': 'Não selecionado',
  'agent.tools.clickToConfigure': 'Clique para configurar',
  'agent.tools.mcpEndpoint': 'Endpoint MCP',
  'agent.tools.eachLineOneItem': 'Insira um item por linha',
 
  // Device Config page
  'deviceConfig.pageTitle': 'Configuração do Dispositivo',
  'deviceConfig.wifiConfig': 'Configuração WiFi',
  'deviceConfig.ultrasonicConfig': 'Configuração Ultrassônica',
  'deviceConfig.selectConfigMethod': 'Selecionar Método de Configuração',
  'deviceConfig.networkConfig': 'Configuração de Rede',
  'deviceConfig.selectedNetwork': 'Rede Selecionada',
  'deviceConfig.signal': 'Sinal',
  'deviceConfig.openNetwork': 'Rede Aberta',
  'deviceConfig.encryptedNetwork': 'Rede Criptografada',
  'deviceConfig.password': 'Senha',
  'deviceConfig.pleaseEnterPassword': 'Por favor, insira a senha do WiFi',
  'deviceConfig.startConfig': 'Iniciar Configuração',
  'deviceConfig.connectToXiaozhiHotspot': 'Por favor, conecte-se ao hotspot xiaozhi primeiro',
  'deviceConfig.detecting': 'Detectando...',
  'deviceConfig.reDetect': 'Detectar Novamente',
  'deviceConfig.alreadyConnected': 'Conectado ao hotspot xiaozhi',
  'deviceConfig.refreshStatus': 'Atualizar Status',
  'deviceConfig.wifiNetworks': 'Redes WiFi',
  'deviceConfig.selectWifiNetwork': 'Selecionar Rede WiFi',
  'deviceConfig.refreshScan': 'Atualizar Busca',
  'deviceConfig.noWifiNetworks': 'Nenhuma rede WiFi disponível',
  'deviceConfig.clickToRefreshScan': 'Por favor, clique em Atualizar Busca',
  'deviceConfig.signalStrong': 'Sinal Forte',
  'deviceConfig.signalGood': 'Sinal Bom',
  'deviceConfig.signalFair': 'Sinal Regular',
  'deviceConfig.signalWeak': 'Sinal Fraco',
  'deviceConfig.channel': 'Canal',
  'deviceConfig.about': 'aproximadamente',
  'deviceConfig.seconds': 'segundos',
  'deviceConfig.generating': 'Gerando...',
  'deviceConfig.playing': 'Reproduzindo...',
  'deviceConfig.generateAndPlaySoundWave': 'Gerar e Reproduzir Onda Sonora',
  'deviceConfig.playSoundWave': 'Reproduzir Onda Sonora',
  'deviceConfig.stopPlaying': 'Parar Reprodução',
  'deviceConfig.autoLoopPlaySoundWave': 'Reproduzir Onda Sonora em Loop Automático',
  'deviceConfig.configAudioFile': 'Arquivo de Áudio de Configuração',
  'deviceConfig.duration': 'Duração',
  'deviceConfig.ultrasonicConfigInstructions': 'Instruções de Configuração Ultrassônica',
  'deviceConfig.ensureWifiNetworkSelectedAndPasswordEntered': 'Certifique-se de que a rede WiFi foi selecionada e a senha foi inserida',
  'deviceConfig.clickGenerateAndPlaySoundWave': 'Clique em Gerar e Reproduzir Onda Sonora, o sistema codificará as informações de configuração em áudio',
  'deviceConfig.bringPhoneCloseToXiaozhiDevice': 'Aproxime o celular do dispositivo xiaozhi (distância de 1-2 metros)',
  'deviceConfig.duringAudioPlaybackXiaozhiWillReceive': 'Durante a reprodução do áudio, o xiaozhi receberá e decodificará as informações de configuração',
  'deviceConfig.afterConfigSuccessDeviceWillConnect': 'Após a configuração bem-sucedida, o dispositivo se conectará automaticamente à rede WiFi',
  'deviceConfig.usesAfskModulation': 'Utiliza tecnologia de modulação AFSK, transmitindo dados pelas frequências de 1800Hz e 1500Hz',
  'deviceConfig.ensureModeratePhoneVolume': 'Por favor, certifique-se de que o volume do celular está moderado para evitar interferência de ruídos ambientais',
  'deviceConfig.generatingUltrasonicConfigAudio': 'Gerando áudio de configuração ultrassônica',
  'deviceConfig.configData': 'Dados de configuração',
  'deviceConfig.dataBytesLength': 'Comprimento dos bytes de dados',
  'deviceConfig.bitStreamLength': 'Comprimento do fluxo de bits',
  'deviceConfig.base64Length': 'Comprimento Base64',
  'deviceConfig.audioFileTooLarge': 'Arquivo de áudio muito grande, por favor reduza o tamanho do SSID ou da senha',
  'deviceConfig.audioGenerationSuccess': 'Áudio gerado com sucesso',
  'deviceConfig.samplePoints': 'Pontos de amostra',
  'deviceConfig.soundWaveGenerationSuccess': 'Onda sonora gerada com sucesso',
  'deviceConfig.audioGenerationFailed': 'Falha na geração do áudio',
  'deviceConfig.soundWaveGenerationFailed': 'Falha na geração da onda sonora',
  'deviceConfig.pleaseGenerateAudioFirst': 'Por favor, gere o áudio primeiro',
  'deviceConfig.startPlayingUltrasonicConfigAudio': 'Iniciando reprodução do áudio de configuração ultrassônica',
  'deviceConfig.ultrasonicAudioStartedPlaying': 'Reprodução do áudio ultrassônico iniciada',
  'deviceConfig.startPlayingConfigSoundWave': 'Reprodução da onda sonora de configuração iniciada',
  'deviceConfig.ultrasonicAudioPlaybackEnded': 'Reprodução do áudio ultrassônico finalizada',
  'deviceConfig.audioPlaybackFailed': 'Falha na reprodução do áudio',
  'deviceConfig.audioResourceBusy': 'Recurso de áudio ocupado, por favor tente novamente mais tarde',
  'deviceConfig.audioFormatNotSupported': 'Formato de áudio não suportado, pode ser um problema de URI de dados',
  'deviceConfig.audioFileError': 'Erro no arquivo de áudio',
  'deviceConfig.cleaningUpAudioContext': 'Limpando contexto de áudio',
  'deviceConfig.cleaningUpAudioContextFailed': 'Falha ao limpar contexto de áudio',
  'deviceConfig.stoppedPlayingUltrasonicAudio': 'Reprodução do áudio ultrassônico interrompida',
  'deviceConfig.stoppedPlaying': 'Reprodução interrompida',
  'deviceConfig.configMethod': 'Método de Configuração',
  'deviceConfig.enterWifiPassword': 'Por favor, insira a senha do WiFi',
  'deviceConfig.xiaozhi': 'xiaozhi',
  'deviceConfig.connectXiaozhiHotspot': 'Por favor, conecte-se ao hotspot xiaozhi',
  'deviceConfig.wifiScanResponse': 'Resposta da busca WiFi',
  'deviceConfig.scanSuccess': 'Busca bem-sucedida',
  'deviceConfig.networks': 'redes',
  'deviceConfig.wifiScanFailed': 'Falha na busca WiFi',
  'deviceConfig.scanFailedCheckConnection': 'Falha na busca, por favor verifique a conexão',
  'deviceConfig.checking': 'Verificando',
  'deviceConfig.reCheck': 'Verificar Novamente',
  'deviceConfig.connectedXiaozhiHotspot': 'Conectado ao hotspot xiaozhi',
  'deviceConfig.wifiNetwork': 'Rede WiFi',
  'deviceConfig.wifiPassword': 'Senha do WiFi',
  'deviceConfig.scanning': 'Buscando',
  'deviceConfig.cancel': 'Cancelar',
  'deviceConfig.clickRefreshScan': 'Por favor, clique em Atualizar Busca',
  'deviceConfig.esp32ConnectionCheckFailed': 'Falha na verificação de conexão ESP32',
  'deviceConfig.startWifiConfig': 'Iniciando configuração WiFi',
  'deviceConfig.configSuccess': 'Configuração bem-sucedida',
  'deviceConfig.deviceWillConnectTo': 'O dispositivo se conectará a',
  'deviceConfig.deviceWillRestart': 'O dispositivo será reiniciado',
  'deviceConfig.pleaseDisconnectXiaozhiHotspot': 'Por favor, desconecte-se do hotspot xiaozhi',
  'deviceConfig.configFailed': 'Falha na configuração',
  'deviceConfig.wifiConfigFailed': 'Falha na configuração WiFi',
  'deviceConfig.pleaseCheckNetworkConnection': 'Por favor, verifique a conexão de rede',
  'deviceConfig.startWifiConfigButton': 'Iniciar Configuração',
  'deviceConfig.configuring': 'Configurando...',
  'deviceConfig.wifiConfigInstructions': 'Instruções de Configuração WiFi',
  'deviceConfig.phoneConnectXiaozhiHotspot': 'Conecte o celular ao hotspot xiaozhi',
  'deviceConfig.selectTargetWifiNetwork': 'Selecione a rede WiFi de destino',
  'deviceConfig.enterWifiPasswordIfNeeded': 'Insira a senha do WiFi se necessário',
  'deviceConfig.clickStartConfigAndWait': 'Clique em Iniciar Configuração e aguarde',
  'deviceConfig.afterConfigSuccessDeviceWillRestart': 'Após a configuração bem-sucedida, o dispositivo reiniciará automaticamente',
  'deviceConfig.audioPlaybackError': 'Erro na reprodução de áudio',
  'deviceConfig.playbackFailed': 'Falha na reprodução',
 
  // Voiceprint page
  'voiceprint.audioNotExist': 'O áudio não existe',
  'voiceprint.getAudioFailed': 'Falha ao obter áudio',
  'voiceprint.audioPlayFailed': 'Falha na reprodução de áudio',
}