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
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
export default {
  // Texto da página de login
  'login.requiredUsername': 'O nome de usuário não pode estar vazio',
  'login.requiredPassword': 'A senha não pode estar vazia',
  'login.requiredCaptcha': 'O captcha não pode estar vazio',
  'login.requiredMobile': 'Por favor, insira um número de celular válido',
  'login.loginSuccess': 'Login realizado com sucesso!',
 
  // Texto do componente HeaderBar
  'header.smartManagement': 'Agentes',
  'header.modelConfig': 'Modelos',
  'header.knowledgeBase': 'Conhecimento',
  'header.voiceCloneManagement': 'Clonagem de Voz',
  'header.voiceResourceManagement': 'Recurso de Voz',
  'header.userManagement': 'Usuários',
  'header.otaManagement': 'Gerenciamento OTA',
  'header.paramDictionary': 'Mais',
  'header.paramManagement': 'Gerenciamento de Parâmetros',
  'header.dictManagement': 'Gerenciamento de Dicionário',
  'header.agentTemplate': 'Modelos de Papel Padrão',
  'header.searchHistory': 'Histórico de Pesquisa',
  'header.clearHistory': 'Limpar Histórico',
  'header.providerManagement': 'Gerenciamento de Provedores',
  'header.serverSideManagement': 'Gerenciamento de Servidores',
  'header.replacementWordManagement': 'Gerenciamento de Palavras de Substituição',
  'header.featureManagement': 'Gerenciamento de Funcionalidades do Sistema',
  'header.changePassword': 'Alterar Senha',
  'header.logout': 'Sair',
  'header.searchPlaceholder': 'Nome, tag ou pesquisa no Mac',
 
  // Texto do componente McpToolCallDialog
  'mcpToolCall.title': 'Chamada de Ferramenta',
  'mcpToolCall.execute': 'Executar',
  'mcpToolCall.chooseFunction': '1、Escolher Função',
  'mcpToolCall.searchFunction': 'Pesquisar Função',
  'mcpToolCall.noResults': 'Nenhuma função correspondente encontrada',
  'mcpToolCall.settings': '2、Configuração de Parâmetros',
  'mcpToolCall.inputPlaceholder': 'Por favor, insira {label}',
  'mcpToolCall.valueRange': 'Faixa de valores: {min} - {max}',
  'mcpToolCall.selectPlaceholder': 'Por favor, selecione {label}',
  'mcpToolCall.lightTheme': 'Tema Claro',
  'mcpToolCall.darkTheme': 'Tema Escuro',
  'mcpToolCall.pleaseSelect': 'Por favor, selecione uma função',
  'mcpToolCall.cancel': 'Cancelar',
  'mcpToolCall.requiredField': 'Por favor, insira {field}',
  'mcpToolCall.minValue': 'O valor mínimo é {value}',
  'mcpToolCall.maxValue': 'O valor máximo é {value}',
  'mcpToolCall.selectTool': 'Por favor, selecione uma ferramenta para executar',
  'mcpToolCall.executionResult': '3、Resultado da Execução',
  'mcpToolCall.copyResult': 'Copiar Resultado',
  'mcpToolCall.noResultYet': 'Nenhum resultado ainda',
  'mcpToolCall.loadingToolList': 'Carregando lista de ferramentas...',
 
  // Nomes de ferramentas
  'mcpToolCall.toolName.getDeviceStatus': 'Ver Status do Dispositivo',
  'mcpToolCall.toolName.setVolume': 'Definir Volume',
  'mcpToolCall.toolName.setBrightness': 'Definir Brilho',
  'mcpToolCall.toolName.setTheme': 'Definir Tema',
  'mcpToolCall.toolName.takePhoto': 'Tirar Foto e Reconhecer',
  'mcpToolCall.toolName.getSystemInfo': 'Informações do Sistema',
  'mcpToolCall.toolName.reboot': 'Reiniciar Dispositivo',
  'mcpToolCall.toolName.upgradeFirmware': 'Atualizar Firmware',
  'mcpToolCall.toolName.getScreenInfo': 'Informações da Tela',
  'mcpToolCall.toolName.snapshot': 'Captura de Tela',
  'mcpToolCall.toolName.previewImage': 'Pré-visualizar Imagem',
  'mcpToolCall.toolName.setDownloadUrl': 'Definir URL de Download',
 
  // Categorias de ferramentas
  'mcpToolCall.category.audio': 'Áudio',
  'mcpToolCall.category.display': 'Tela',
  'mcpToolCall.category.camera': 'Câmera',
  'mcpToolCall.category.system': 'Sistema',
  'mcpToolCall.category.assets': 'Recursos',
  'mcpToolCall.category.deviceInfo': 'Info do Dispositivo',
 
  // Categorias e propriedades da tabela
  'mcpToolCall.table.audioSpeaker': 'Alto-falante',
  'mcpToolCall.table.screen': 'Tela',
  'mcpToolCall.table.network': 'Rede',
  'mcpToolCall.table.audioControl': 'Controle de Áudio',
  'mcpToolCall.table.screenControl': 'Controle de Tela',
  'mcpToolCall.table.systemControl': 'Controle do Sistema',
  'mcpToolCall.table.screenInfo': 'Info da Tela',
  'mcpToolCall.table.hardwareInfo': 'Info do Hardware',
  'mcpToolCall.table.memoryInfo': 'Info da Memória',
  'mcpToolCall.table.applicationInfo': 'Info da Aplicação',
  'mcpToolCall.table.networkInfo': 'Info da Rede',
  'mcpToolCall.table.displayInfo': 'Info do Display',
  'mcpToolCall.table.deviceInfo': 'Info do Dispositivo',
  'mcpToolCall.table.systemInfo': 'Info do Sistema',
  // Cabeçalhos das colunas da tabela
  'mcpToolCall.table.component': 'Componente',
  'mcpToolCall.table.property': 'Propriedade',
  'mcpToolCall.table.value': 'Valor',
 
  'mcpToolCall.prop.volume': 'Volume',
  'mcpToolCall.prop.brightness': 'Brilho',
  'mcpToolCall.prop.theme': 'Tema',
  'mcpToolCall.prop.type': 'Tipo',
  'mcpToolCall.prop.ssid': 'SSID',
  'mcpToolCall.prop.signalStrength': 'Intensidade do Sinal',
  'mcpToolCall.prop.operationResult': 'Resultado da Operação',
  'mcpToolCall.prop.width': 'Largura',
  'mcpToolCall.prop.height': 'Altura',
  'mcpToolCall.prop.screenType': 'Tipo',
  'mcpToolCall.prop.chipModel': 'Modelo do Chip',
  'mcpToolCall.prop.cpuCores': 'Núcleos do CPU',
  'mcpToolCall.prop.chipVersion': 'Versão do Chip',
  'mcpToolCall.prop.flashSize': 'Tamanho do Flash',
  'mcpToolCall.prop.minFreeHeap': 'Heap Livre Mínimo',
  'mcpToolCall.prop.applicationName': 'Nome da Aplicação',
  'mcpToolCall.prop.applicationVersion': 'Versão da Aplicação',
  'mcpToolCall.prop.compileTime': 'Hora de Compilação',
  'mcpToolCall.prop.idfVersion': 'Versão IDF',
  'mcpToolCall.prop.macAddress': 'Endereço MAC',
  'mcpToolCall.prop.ipAddress': 'Endereço IP',
  'mcpToolCall.prop.wifiName': 'Nome WiFi',
  'mcpToolCall.prop.wifiChannel': 'Canal WiFi',
  'mcpToolCall.prop.screenSize': 'Tamanho da Tela',
  'mcpToolCall.prop.deviceUuid': 'UUID do Dispositivo',
  'mcpToolCall.prop.systemLanguage': 'Idioma do Sistema',
  'mcpToolCall.prop.currentOtaPartition': 'Partição OTA Atual',
  'mcpToolCall.prop.getResult': 'Obter Resultado',
  'mcpToolCall.prop.url': 'URL',
  'mcpToolCall.prop.quality': 'Qualidade',
  'mcpToolCall.prop.question': 'Pergunta',
 
  // Textos de ajuda das ferramentas
  'mcpToolCall.help.getDeviceStatus': 'Visualizar o status atual de execução do dispositivo, incluindo volume, tela, bateria e outras informações.',
  'mcpToolCall.help.setVolume': 'Ajustar o volume do dispositivo. Por favor, insira um valor entre 0-100.',
  'mcpToolCall.help.setBrightness': 'Ajustar o brilho da tela do dispositivo. Por favor, insira um valor entre 0-100.',
  'mcpToolCall.help.setTheme': 'Alternar o tema de exibição da tela do dispositivo. Você pode escolher entre modo claro ou escuro.',
  'mcpToolCall.help.takePhoto': 'Tirar fotos com a câmera do dispositivo e realizar análise de reconhecimento. Por favor, insira a pergunta que deseja fazer.',
  'mcpToolCall.help.getSystemInfo': 'Obter as informações do sistema do dispositivo, incluindo especificações de hardware, versão do software, etc.',
  'mcpToolCall.help.reboot': 'Reiniciar o dispositivo. O dispositivo será reiniciado após a execução.',
  'mcpToolCall.help.upgradeFirmware': 'Baixar e atualizar o firmware do dispositivo a partir da URL especificada. O dispositivo será reiniciado automaticamente após a atualização.',
  'mcpToolCall.help.getScreenInfo': 'Obter informações detalhadas sobre a tela, como resolução, tamanho e outros parâmetros.',
  'mcpToolCall.help.snapshot': 'Capturar a tela atual e enviar para a URL especificada.',
  'mcpToolCall.help.previewImage': 'Pré-visualizar imagens da URL especificada na tela do dispositivo.',
  'mcpToolCall.help.setDownloadUrl': 'Definir o endereço de download dos arquivos de recursos do dispositivo.',
 
  // Outros textos
  'mcpToolCall.text.strong': 'Forte',
  'mcpToolCall.text.medium': 'Médio',
  'mcpToolCall.text.weak': 'Fraco',
  'mcpToolCall.text.dark': 'Escuro',
  'mcpToolCall.text.light': 'Claro',
  'mcpToolCall.text.setSuccess': 'Configuração realizada com sucesso',
  'mcpToolCall.text.setFailed': 'Falha na configuração',
  'mcpToolCall.text.brightnessSetSuccess': 'Brilho configurado com sucesso',
  'mcpToolCall.text.brightnessSetFailed': 'Falha ao configurar brilho',
  'mcpToolCall.text.themeSetSuccess': 'Tema configurado com sucesso',
  'mcpToolCall.text.themeSetFailed': 'Falha ao configurar tema',
  'mcpToolCall.text.rebootCommandSent': 'Comando de reinicialização enviado',
  'mcpToolCall.text.rebootFailed': 'Falha ao reiniciar',
  'mcpToolCall.text.monochrome': 'Tela Monocromática',
  'mcpToolCall.text.color': 'Tela Colorida',
  'mcpToolCall.text.getSuccessParseFailed': 'Obtido com sucesso, mas falha ao analisar',
  'mcpToolCall.text.getFailed': 'Falha ao obter',
  'mcpToolCall.text.getSuccessFormatError': 'Obtido com sucesso, mas formato de dados anormal',
 
  // Diálogo de dados do dicionário
  'dictDataDialog.addDictData': 'Adicionar Dados do Dicionário',
  'dictDataDialog.dictLabel': 'Rótulo do Dicionário',
  'dictDataDialog.dictLabelPlaceholder': 'Por favor, insira o rótulo do dicionário',
  'dictDataDialog.dictValue': 'Valor do Dicionário',
  'dictDataDialog.dictValuePlaceholder': 'Por favor, insira o valor do dicionário',
  'dictDataDialog.sort': 'Ordenação',
  'dictDataDialog.requiredDictLabel': 'Por favor, insira o rótulo do dicionário',
  'dictDataDialog.requiredDictValue': 'Por favor, insira o valor do dicionário',
 
  // Diálogo de tipo de dicionário
  'dictTypeDialog.addDictType': 'Adicionar Tipo de Dicionário',
  'dictTypeDialog.dictName': 'Nome do Tipo de Dicionário',
  'dictTypeDialog.dictNamePlaceholder': 'Por favor, insira o nome do tipo de dicionário',
  'dictTypeDialog.dictType': 'Código do Tipo de Dicionário',
  'dictTypeDialog.dictTypePlaceholder': 'Por favor, insira o código do tipo de dicionário',
  'dictTypeDialog.requiredDictName': 'Por favor, insira o nome do tipo de dicionário',
  'dictTypeDialog.requiredDictType': 'Por favor, insira o código do tipo de dicionário',
 
  // Diálogo de edição de voz
  'editVoiceDialog.voiceCode': 'Código da Voz',
  'editVoiceDialog.voiceCodePlaceholder': 'Por favor, insira o código da voz',
  'editVoiceDialog.voiceName': 'Nome da Voz',
  'editVoiceDialog.voiceNamePlaceholder': 'Por favor, insira o nome da voz',
  'editVoiceDialog.languageType': 'Tipo de Idioma',
  'editVoiceDialog.languageTypePlaceholder': 'Por favor, insira o tipo de idioma',
  'editVoiceDialog.sortNumber': 'Número de Ordenação',
  'editVoiceDialog.remark': 'Observação',
  'editVoiceDialog.remarkPlaceholder': 'Por favor, insira o conteúdo da observação',
  'editVoiceDialog.generatePreview': 'Gerar Pré-visualização',
  'editVoiceDialog.defaultVoiceName': 'Wawa Xiaohe',
  'editVoiceDialog.defaultLanguageType': 'Chinês',
  'editVoiceDialog.requiredVoiceCode': 'Por favor, insira o código da voz',
  'editVoiceDialog.requiredVoiceName': 'Por favor, insira o nome da voz',
 
  // Diálogo de firmware
  'firmwareDialog.firmwareName': 'Nome do Firmware',
  'firmwareDialog.firmwareNamePlaceholder': 'Por favor, insira o nome do firmware (placa + versão)',
  'firmwareDialog.firmwareType': 'Tipo de Firmware',
  'firmwareDialog.firmwareTypePlaceholder': 'Por favor, selecione o tipo de firmware',
  'firmwareDialog.version': 'Versão',
  'firmwareDialog.versionPlaceholder': 'Por favor, insira a versão (formato x.x.x)',
  'firmwareDialog.firmwareFile': 'Arquivo de Firmware',
  'firmwareDialog.clickUpload': 'Clique para Enviar',
  'firmwareDialog.uploadTip': 'Apenas arquivos de firmware (.bin/.apk) são suportados, e o tamanho não deve exceder 100MB',
  'firmwareDialog.uploadHint': 'Lembrete: Por favor, envie o arquivo xiaozhi.bin pré-mesclado, não o arquivo merged-binary.bin mesclado',
  'firmwareDialog.remark': 'Observação',
  'firmwareDialog.remarkPlaceholder': 'Por favor, insira informações de observação',
  'firmwareDialog.requiredFirmwareName': 'Por favor, insira o nome do firmware (placa + versão)',
  'firmwareDialog.requiredFirmwareType': 'Por favor, selecione o tipo de firmware',
  'firmwareDialog.requiredVersion': 'Por favor, insira a versão',
  'firmwareDialog.versionFormatError': 'Formato de versão incorreto. Por favor, insira no formato x.x.x',
  'firmwareDialog.requiredFirmwareFile': 'Por favor, envie o arquivo de firmware',
  'firmwareDialog.invalidFileType': 'Apenas arquivos de firmware no formato .bin/.apk são suportados!',
  'firmwareDialog.invalidFileSize': 'O tamanho do arquivo de firmware não pode exceder 100MB!',
  'firmwareDialog.uploadSuccess': 'Arquivo de firmware enviado com sucesso',
  'firmwareDialog.uploadFailed': 'Falha no envio do arquivo',
 
  // Diálogo de impressão vocal
  'voicePrintDialog.addSpeaker': 'Adicionar Falante',
  'voicePrintDialog.voicePrintVector': 'Vetor de Impressão Vocal',
  'voicePrintDialog.selectVoiceMessage': 'Por favor, selecione uma mensagem de voz',
  'voicePrintDialog.name': 'Nome',
  'voicePrintDialog.enterName': 'Por favor, insira o nome',
  'voicePrintDialog.description': 'Descrição',
  'voicePrintDialog.enterDescription': 'Por favor, insira a descrição',
  'voicePrintDialog.save': 'Salvar',
  'voicePrintDialog.cancel': 'Cancelar',
  'voicePrintDialog.requiredDescription': 'Por favor, insira a descrição',
  'voicePrintDialog.requiredName': 'Por favor, insira o nome',
  'voicePrintDialog.requiredAudioVector': 'Por favor, selecione o vetor de áudio',
 
  // 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',
 
  // Página de configuração de papel - provedor de contexto
  'roleConfig.contextProvider': 'Contexto',
  'roleConfig.contextProviderSuccess': '{count} fontes adicionadas com sucesso.',
  'roleConfig.contextProviderDocLink': 'Como implantar provedor de contexto',
  'roleConfig.editContextProvider': 'Editar Fonte',
 
  // Página de impressão vocal
  'voicePrint.pageTitle': 'Reconhecimento de Impressão Vocal',
  'voicePrint.name': 'Nome',
  'voicePrint.description': 'Descrição',
  'voicePrint.createTime': 'Data de Criação',
  'voicePrint.action': 'Ação',
  'voicePrint.edit': 'Editar',
  'voicePrint.delete': 'Excluir',
  'voicePrint.add': 'Adicionar',
  'voicePrint.addSpeaker': 'Adicionar Falante',
  'voicePrint.editSpeaker': 'Editar Falante',
  'voicePrint.fetchFailed': 'Falha ao buscar lista de impressões vocais',
  'voicePrint.updateSuccess': 'Atualizado com sucesso',
  'voicePrint.addSuccess': 'Adicionado com sucesso',
  'voicePrint.confirmDelete': 'Tem certeza de que deseja excluir esta impressão vocal?',
  'voicePrint.warning': 'Aviso',
  'voicePrint.confirm': 'Confirmar',
  'voicePrint.cancel': 'Cancelar',
  'voicePrint.deleteSuccess': 'Impressão vocal excluída com sucesso',
  'voicePrint.deleteFailed': 'Falha na exclusão. Por favor, tente novamente',
  'voicePrint.cancelDelete': 'Operação de exclusão cancelada',
  'voicePrint.closeOperation': 'Operação fechada',
  'voicePrint.loading': 'Carregando...',
 
  // 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',
 
  // Componente AddModelDialog
  'addModelDialog.requiredSupplier': 'Por favor, selecione um fornecedor',
 
  // Página de registro
  'register.title': 'Criar Conta',
  'register.welcome': 'Bem-vindo ao XiaoZhi AI',
  'register.usernamePlaceholder': 'Por favor, insira o nome de usuário',
  'register.mobilePlaceholder': 'Por favor, insira o número de celular',
  'register.captchaPlaceholder': 'Por favor, insira o captcha',
  'register.mobileCaptchaPlaceholder': 'Por favor, insira o código de verificação SMS',
  'register.passwordPlaceholder': 'Por favor, defina a senha',
  'register.confirmPasswordPlaceholder': 'Por favor, confirme a senha',
  'register.goToLogin': 'Já tem uma conta? Entrar',
  'register.registerButton': 'Registrar',
  'register.agreeTo': 'Ao se registrar, você concorda com nossos',
  'register.userAgreement': 'Termos de Uso',
  'register.privacyPolicy': 'Política de Privacidade',
  'register.notAllowRegister': 'O registro de usuários não é permitido',
  'register.captchaLoadFailed': 'Falha ao carregar captcha',
  'register.inputCaptcha': 'Por favor, insira o captcha',
  'register.inputCorrectMobile': 'Por favor, insira um número de celular válido',
  'register.captchaSendSuccess': 'Código de verificação enviado com sucesso',
  'register.captchaSendFailed': 'Falha ao enviar código de verificação',
  'register.passwordsNotMatch': 'As senhas não coincidem',
  'register.registerSuccess': 'Registro realizado com sucesso!',
  'register.registerFailed': 'Falha no registro',
  'register.requiredUsername': 'O nome de usuário não pode estar vazio',
  'register.requiredPassword': 'A senha não pode estar vazia',
  'register.requiredCaptcha': 'O captcha não pode estar vazio',
  'register.requiredMobileCaptcha': 'Por favor, insira o código de verificação SMS',
  'register.invalidCaptcha': 'Código de verificação inválido',
  'register.passwordLength': 'A senha deve ter entre 6 e 20 caracteres',
  'register.usernameFormat': 'Formato de nome de usuário inválido',
  'register.confirmPasswordRequired': 'A confirmação de senha não pode estar vazia',
  'register.sendCaptcha': 'Obter Código de Verificação',
  'register.secondsLater': 'segundos depois',
 
  // Diálogo de parâmetros
  'paramDialog.paramCode': 'Código do Parâmetro',
  'paramDialog.paramCodePlaceholder': 'Por favor, insira o código do parâmetro',
  'paramDialog.paramValue': 'Valor do Parâmetro',
  'paramDialog.paramValuePlaceholder': 'Por favor, insira o valor do parâmetro',
  'paramDialog.valueType': 'Tipo de Valor',
  'paramDialog.valueTypePlaceholder': 'Por favor, selecione o tipo de valor',
  'paramDialog.remark': 'Observação',
  'paramDialog.remarkPlaceholder': 'Por favor, insira a observação',
  'paramDialog.save': 'Salvar',
  'paramDialog.cancel': 'Cancelar',
  'paramDialog.requiredParamCode': 'Por favor, insira o código do parâmetro',
  'paramDialog.requiredParamValue': 'Por favor, insira o valor do parâmetro',
  'paramDialog.requiredValueType': 'Por favor, selecione o tipo de valor',
  'paramDialog.stringType': 'Texto',
  'paramDialog.numberType': 'Número',
  'paramDialog.booleanType': 'Booleano',
  'paramDialog.arrayType': 'Array',
  'paramDialog.jsonType': 'Objeto JSON',
 
  // Replacement word management page related
  'replacementWordManagement.pageTitle': 'Gerenciamento de Palavras de Substituição',
  'replacementWordManagement.searchPlaceholder': 'Digite o nome do arquivo para pesquisar',
  'replacementWordManagement.search': 'Pesquisar',
  'replacementWordManagement.fileName': 'Nome do Arquivo',
  'replacementWordManagement.replacementWordCount': 'Quantidade de Palavras de Substituição',
  'replacementWordManagement.replacementWordContent': 'Conteúdo Substituto',
  'replacementWordManagement.operation': 'Operação',
  'replacementWordManagement.createTime': 'Tempo de Criação',
  'replacementWordManagement.updateTime': 'Tempo de Atualização',
  'replacementWordManagement.addFile': 'Adicionar Arquivo de Substituição',
  'replacementWordManagement.edit': 'Editar',
  'replacementWordManagement.download': 'Baixar',
  'replacementWordManagement.delete': 'Excluir',
 
  // Replacement word dialog related
  'replacementDialog.fileName': 'Nome do Arquivo',
  'replacementDialog.fileNamePlaceholder': 'Por favor, insira o nome do arquivo',
  'replacementDialog.content': 'Conteúdo Substituto',
  'replacementDialog.contentPlaceholder': 'Insira conteúdo: original|substituto',
  'replacementDialog.formatTip': 'Formato por linha: original|substituição',
  'replacementDialog.wordCountUnit': 'palavras de substituição',
  'replacementDialog.uploadTxt': 'Carregar txt',
  'replacementDialog.uploadReplacementFile': 'Carregar arquivo de substituição',
  'replacementDialog.clickUploadTip': 'Carregar arquivo de substituição',
  'replacementDialog.uploadCoverTip': 'Upload substitui conteúdo atual',
  'replacementDialog.save': 'Salvar',
  'replacementDialog.cancel': 'Cancelar',
  'replacementDialog.requiredFileName': 'Por favor, insira o nome do arquivo',
  'replacementDialog.requiredContent': 'Por favor, insira o conteúdo de substituição',
  'replacementDialog.invalidFormat': 'Linha {line} com erro de formato, cada linha deve conter o separador |',
  'replacementDialog.invalidPipeCount': 'Linha {line} com erro de formato, cada linha pode conter apenas um separador |',
  'replacementDialog.emptyOriginal': 'Linha {line} palavra original não pode estar vazia',
  'replacementDialog.emptyReplacement': 'Linha {line} palavra de substituição não pode estar vazia',
  'replacementDialog.invalidOriginalChar': 'Linha {line} palavra original contém caracteres especiais',
  'replacementDialog.invalidReplacementChar': 'Linha {line} palavra de substituição contém caracteres especiais',
  'replacementDialog.readFileError': 'Falha ao ler arquivo',
  'replacementDialog.maxWordCountExceeded': 'A quantidade de palavras de substituição não pode exceder {max}',
 
  // Página de gerenciamento de palavras de substituição
  'replacementWordManagement.getListFailed': 'Falha ao obter lista',
  'replacementWordManagement.confirmDelete': 'Tem certeza de que deseja excluir este arquivo?',
  'replacementWordManagement.deleteHint': 'Dica',
  'replacementWordManagement.saveSuccess': 'Salvo com sucesso',
  'replacementWordManagement.saveFailed': 'Falha ao salvar',
  'replacementWordManagement.addFailed': 'Falha ao adicionar',
  'replacementWordManagement.batchDelete': 'Exclusão em Lote',
  'replacementWordManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir os {count} arquivos selecionados?',
  'replacementWordManagement.batchDeleteHint': 'Dica de Exclusão em Lote',
 
  // Página de login
  'login.title': 'Entrar',
  'login.welcome': 'BEM-VINDO AO LOGIN',
  'login.username': 'Nome de Usuário',
  'login.usernamePlaceholder': 'Por favor, insira o nome de usuário',
  'login.mobilePlaceholder': 'Por favor, insira o número de celular',
  'login.password': 'Senha',
  'login.passwordPlaceholder': 'Por favor, insira a senha',
  'login.captchaPlaceholder': 'Por favor, insira o código de verificação',
  'login.loginButton': 'Entrar',
  'login.login': 'Entrar',
  'login.register': 'Registrar',
  'login.forgotPassword': 'Esqueceu a Senha',
  'login.forgetPassword': 'Esqueceu a Senha?',
  'login.mobileLogin': 'Login por Celular',
  'login.usernameLogin': 'Login por Usuário',
  'login.agreeTo': 'Ao entrar, você aceita os',
  'login.userAgreement': 'Termos de Uso',
  'login.and': 'e',
  'login.privacyPolicy': 'Política de Privacidade',
  'login.registerAccount': 'Registrar Conta',
 
  // Página de recuperação de senha
  'retrievePassword.title': 'Redefinir Senha',
  'retrievePassword.welcome': 'RECUPERAÇÃO DE SENHA',
  'retrievePassword.subtitle': 'Recuperar Senha',
  'retrievePassword.mobile': 'Celular',
  'retrievePassword.mobilePlaceholder': 'Por favor, insira o número de celular',
  'retrievePassword.captcha': 'Código de Verificação',
  'retrievePassword.captchaPlaceholder': 'Por favor, insira o código de verificação',
  'retrievePassword.mobileCaptcha': 'Código de Verificação por Celular',
  'retrievePassword.mobileCaptchaPlaceholder': 'Por favor, insira o código de verificação por celular',
  'retrievePassword.newPassword': 'Nova Senha',
  'retrievePassword.newPasswordPlaceholder': 'Por favor, insira a nova senha',
  'retrievePassword.confirmNewPassword': 'Confirmar Nova Senha',
  'retrievePassword.confirmNewPasswordPlaceholder': 'Por favor, confirme a nova senha',
  'retrievePassword.getMobileCaptcha': 'Obter Código de Verificação',
  'retrievePassword.resetButton': 'Redefinir Senha',
  'retrievePassword.updateButton': 'Atualizar Agora',
  'retrievePassword.goToLogin': 'Voltar ao Login',
  'retrievePassword.inputCorrectMobile': 'Por favor, insira um número de celular válido',
  'retrievePassword.captchaSendSuccess': 'Código de verificação enviado com sucesso',
  'retrievePassword.passwordsNotMatch': 'As duas senhas não coincidem',
  'retrievePassword.passwordLength': 'A senha deve ter entre 6 e 20 caracteres',
  'retrievePassword.mobileRequired': 'O número de celular não pode estar vazio',
  'retrievePassword.captchaRequired': 'O código de verificação não pode estar vazio',
  'retrievePassword.mobileCaptchaRequired': 'O código de verificação por celular não pode estar vazio',
  'retrievePassword.newPasswordRequired': 'A nova senha não pode estar vazia',
  'retrievePassword.confirmNewPasswordRequired': 'A confirmação da nova senha não pode estar vazia',
  'retrievePassword.passwordUpdateSuccess': 'Senha atualizada com sucesso',
  'retrievePassword.agreeTo': 'Redefinir significa concordar',
 
  // Página de alteração de senha
  'changePassword.title': 'Alterar Senha',
  'changePassword.oldPasswordLabel': 'Senha Atual:',
  'changePassword.oldPasswordPlaceholder': 'Por favor, insira a senha atual',
  'changePassword.newPasswordLabel': 'Nova Senha:',
  'changePassword.newPasswordPlaceholder': 'Por favor, insira a nova senha',
  'changePassword.confirmPasswordLabel': 'Confirmar Nova Senha:',
  'changePassword.confirmPasswordPlaceholder': 'Por favor, insira novamente a nova senha',
  'changePassword.confirmButton': 'Confirmar',
  'changePassword.cancelButton': 'Cancelar',
  'changePassword.allFieldsRequired': 'Por favor, preencha todos os campos',
  'changePassword.passwordsNotMatch': 'As duas novas senhas não coincidem',
  'changePassword.newPasswordSameAsOld': 'A nova senha não pode ser igual à senha atual',
  'changePassword.passwordChangedSuccessfully': 'Senha alterada com sucesso. Por favor, faça login novamente',
  'changePassword.changeFailed': 'Falha ao alterar senha',
 
  // Página de gerenciamento de dispositivos
  'device.management': 'Gerenciamento de Dispositivos',
  'device.add': 'Adicionar Dispositivo',
  'device.edit': 'Editar Dispositivo',
  'device.delete': 'Excluir Dispositivo',
  'device.name': 'Nome do Dispositivo',
  'device.type': 'Tipo de Dispositivo',
  'device.status': 'Status do Dispositivo',
  'device.dialogTitle': 'Adicionar Dispositivo',
  'device.verificationCode': 'Código de Verificação:',
  'device.verificationCodePlaceholder': 'Por favor, insira o código de verificação de 6 dígitos transmitido pelo dispositivo..',
  'device.confirmButton': 'Confirmar',
  'device.cancelButton': 'Cancelar',
  'device.input6DigitCode': 'Por favor, insira um código de verificação de 6 dígitos',
  'device.bindSuccess': 'Dispositivo vinculado com sucesso',
  'device.bindFailed': 'Falha na vinculação',
  'device.searchPlaceholder': 'Por favor, insira modelo do dispositivo ou endereço MAC para pesquisar',
  'device.model': 'Modelo do Dispositivo',
  'device.macAddress': 'Endereço MAC',
  'device.firmwareVersion': 'Versão do Firmware',
  'device.bindTime': 'Data de Vinculação',
  'device.lastConversation': 'Última Conversa',
  'device.alias': 'Alias do dispositivo',
  'device.autoUpdate': 'Atualização Automática',
  'device.operation': 'Operação',
  'device.search': 'Pesquisar',
  'device.selectAll': 'Selecionar Tudo/Desmarcar Tudo',
  'deviceManagement.loading': 'Carregando...',
  'device.bindWithCode': 'Vincular com Código de 6 Dígitos',
  'device.manualAdd': 'Adicionar Manualmente',
  'device.unbind': 'Desvincular',
  'device.deviceThemeGeneration': 'Geração de tema do dispositivo',
  'device.toolCall': 'Chamada de Ferramenta',
  'device.selectAtLeastOne': 'Por favor, selecione pelo menos um registro',
  'device.confirmBatchUnbind': 'Tem certeza de que deseja desvincular {count} dispositivos selecionados?',
  'device.batchUnbindSuccess': '{count} dispositivos desvinculados com sucesso',
  'device.batchUnbindError': 'Ocorreu um erro durante a desvinculação em lote',
  'device.aliasTooLong': 'O alias do dispositivo não pode exceder 64 caracteres',
  'device.aliasSaved': 'Alias do dispositivo salvo com sucesso',
  'device.aliasSaveFailed': 'Falha ao salvar o alias do dispositivo',
  'device.confirmUnbind': 'Tem certeza de que deseja desvincular este dispositivo?',
  'device.unbindSuccess': 'Dispositivo desvinculado com sucesso',
  'device.unbindFailed': 'Falha ao desvincular dispositivo',
  'device.getListFailed': 'Falha ao buscar lista de dispositivos',
  'device.autoUpdateEnabled': 'Atualização automática ativada',
  'device.autoUpdateDisabled': 'Atualização automática desativada',
  'device.getFirmwareTypeFailed': 'Falha ao buscar tipo de firmware',
  'device.deviceStatus': 'Status',
  'device.online': 'Online',
  'device.offline': 'Offline',
 
  // Mensagens de dica
  'message.success': 'Operação Realizada com Sucesso',
  'message.error': 'Falha na Operação',
  'message.warning': 'Aviso',
  'message.info': 'Informação',
 
  // Cache
  'cache.viewer': 'Visualizador de Cache',
 
  // Diálogo de histórico de chat
  'chatHistory.with': 'Com',
  'chatHistory.dialogTitle': ' - Histórico de Chat',
  'chatHistory.loading': 'Carregando...',
  'chatHistory.noMoreRecords': 'Não há mais registros',
  'chatHistory.selectSession': 'Por favor, selecione uma sessão para visualizar o histórico de chat',
  'chatHistory.today': 'Hoje',
  'chatHistory.yesterday': 'Ontem',
  'chatHistory.downloadCurrentSession': 'Baixar histórico de chat da sessão atual',
  'chatHistory.downloadCurrentWithPreviousSessions': 'Baixar histórico de chat da sessão atual e das 20 sessões anteriores',
  'chatHistory.downloadLinkFailed': 'Falha ao obter link de download',
 
  'cache.status': 'Status do Cache',
  'cache.cdnEnabled': 'Modo CDN Ativado',
  'cache.cdnDisabled': 'Modo CDN Desativado',
  'cache.serviceWorkerRegistered': 'Service Worker Registrado',
  'cache.serviceWorkerNotRegistered': 'Service Worker Não Registrado',
  'cache.noCacheDetected': 'Nenhum cache detectado ainda. Por favor, atualize a página ou aguarde o cache ser estabelecido',
  'cache.swDevEnvWarning': 'No ambiente de desenvolvimento, o Service Worker pode não inicializar o cache corretamente',
  'cache.swCheckMethods': 'Por favor, tente os seguintes métodos para verificar se o Service Worker está funcionando:',
  'cache.swCheckMethod1': 'Verifique o status do Service Worker na aba Application/Aplicação das ferramentas de desenvolvedor',
  'cache.swCheckMethod2': 'Visualize o conteúdo do cache em Application/Cache/Cache Storage das ferramentas de desenvolvedor',
  'cache.swCheckMethod3': 'Use o build de produção (npm run build) e acesse através de um servidor HTTP para testar a funcionalidade completa',
  'cache.swDevEnvNormal': 'No ambiente de desenvolvimento, isso é normal',
  'cache.swProdOnly': 'O Service Worker geralmente funciona apenas no ambiente de produção',
  'cache.swTestingTitle': 'Para testar a funcionalidade do Service Worker:',
  'cache.swTestingStep1': 'Execute npm run build para compilar a versão de produção',
  'cache.swTestingStep2': 'Acesse a página compilada através de um servidor HTTP',
  'cache.swNotSupported': 'O navegador atual não suporta Service Worker. A função de cache de recursos CDN não está disponível',
  'cache.dialogTitle': 'Status de Cache de Recursos CDN',
  'cache.loading': 'Carregando informações de cache...',
  'cache.notSupported': 'Seu navegador não suporta Cache API ou o Service Worker não está instalado',
  'cache.refreshPage': 'Atualizar Página',
  'cache.noCachedResources': 'Nenhum recurso CDN em cache encontrado',
  'cache.noCachedResourcesDesc': 'O Service Worker pode não ter concluído a inicialização ou o cache não foi estabelecido. Por favor, atualize a página ou tente novamente mais tarde.',
  'cache.cdnCacheStatus': 'Status de Cache de Recursos CDN',
  'cache.totalCachedResources': 'Encontrados {count} recursos em cache no total',
  'cache.jsResources': 'Recursos JavaScript ({count})',
  'cache.cssResources': 'Recursos CSS ({count})',
  'cache.cached': 'Em Cache',
  'cache.notCached': 'Não Em Cache',
  'cache.refreshStatus': 'Atualizar Status do Cache',
  'cache.clearCache': 'Limpar Cache',
  'cache.refreshingStatus': 'Atualizando status do cache',
  'cache.confirmClear': 'Tem certeza de que deseja limpar todo o cache?',
  'cache.clearedSuccess': 'Cache limpo com sucesso',
  'cache.clearFailed': 'Falha ao limpar cache',
  'cache.clearCanceled': 'Operação de limpeza cancelada',
 
  // Botões comuns
  'button.ok': 'OK',
  'button.cancel': 'Cancelar',
  'button.save': 'Salvar',
  'button.close': 'Fechar',
 
  // Informações do sistema
  'system.name': 'Serviço XiaoZhi',
 
  // Impressão vocal
  'voiceprint.management': 'Gerenciamento de Impressão Vocal',
  'voiceprint.add': 'Adicionar Impressão Vocal',
  'voiceprint.delete': 'Excluir Impressão Vocal',
 
  // Página de gerenciamento de dicionário
  'dictManagement.pageTitle': 'Gerenciamento de Dicionário',
  'dictManagement.dictTypeCategory': 'Categoria do Dicionário',
  'dictManagement.searchPlaceholder': 'Por favor, insira o rótulo do dicionário para pesquisar',
  'dictManagement.search': 'Pesquisar',
  'dictManagement.dictTypeName': 'Nome do Tipo de Dicionário',
  'dictManagement.operation': 'Operação',
  'dictManagement.edit': 'Editar',
  'dictManagement.dictLabel': 'Rótulo do Dicionário',
  'dictManagement.dictValue': 'Valor do Dicionário',
  'dictManagement.sort': 'Ordenação',
  'dictManagement.delete': 'Excluir',
  'dictManagement.selectAll': 'Selecionar Tudo',
  'dictManagement.deselectAll': 'Desmarcar Tudo',
  'dictManagement.addDictType': 'Adicionar Tipo de Dicionário',
  'dictManagement.batchDeleteDictType': 'Exclusão em Lote de Tipos de Dicionário',
  'dictManagement.addDictData': 'Adicionar Dados do Dicionário',
  'dictManagement.batchDeleteDictData': 'Exclusão em Lote de Dados do Dicionário',
  'dictManagement.itemsPerPage': '{items} itens/página',
  'dictManagement.firstPage': 'Primeira Página',
  'dictManagement.prevPage': 'Página Anterior',
  'dictManagement.nextPage': 'Próxima Página',
  'dictManagement.totalRecords': 'Total de {total} registros',
  'dictManagement.editDictType': 'Editar Tipo de Dicionário',
  'dictManagement.editDictData': 'Editar Dados do Dicionário',
  'dictManagement.saveSuccess': 'Salvo com Sucesso',
  'dictManagement.deleteSuccess': 'Excluído com Sucesso',
  'dictManagement.selectDictTypeToDelete': 'Por favor, selecione tipos de dicionário para excluir',
  'dictManagement.confirmDeleteDictType': 'Tem certeza de que deseja excluir os tipos de dicionário selecionados?',
  'dictManagement.confirm': 'Confirmar',
  'dictManagement.cancel': 'Cancelar',
  'dictManagement.selectDictTypeFirst': 'Por favor, selecione um tipo de dicionário primeiro',
  'dictManagement.confirmDeleteDictData': 'Tem certeza de que deseja excluir estes dados do dicionário?',
  'dictManagement.selectDictDataToDelete': 'Por favor, selecione dados do dicionário para excluir',
  'dictManagement.confirmBatchDeleteDictData': 'Tem certeza de que deseja excluir {count} itens de dados do dicionário selecionados?',
  'dictManagement.getDictDataFailed': 'Falha ao obter dados do dicionário',
 
  // Informações do usuário
  'user.info': 'Informações do Usuário',
  'user.username': 'Nome de Usuário',
  'user.mobile': 'Celular',
  'user.userid': 'ID do Usuário',
  'user.deviceCount': 'Quantidade de Dispositivos',
  'user.createDate': 'Data de Registro',
  'user.status': 'Status',
  'user.normal': 'Normal',
  'user.disabled': 'Desativado',
  'user.resetPassword': 'Redefinir Senha',
  'user.disableAccount': 'Desativar Conta',
  'user.enableAccount': 'Ativar Conta',
  'user.deleteUser': 'Excluir Usuário',
  'user.deselectAll': 'Desmarcar Tudo',
  'user.selectAll': 'Selecionar Tudo',
  'user.enable': 'Ativar',
  'user.disable': 'Desativar',
  'user.delete': 'Excluir',
  'user.selectUsersFirst': 'Por favor, selecione usuários para excluir primeiro',
  'user.selectUsersToDisable': 'Por favor, selecione usuários para desativar',
  'user.selectUsersToEnable': 'Por favor, selecione usuários para ativar',
  'user.confirmDeleteSelected': 'Tem certeza de que deseja excluir {count} usuários selecionados?',
  'user.deleting': 'Excluindo...',
  'user.deleteSuccess': '{count} usuários excluídos com sucesso',
  'user.deleteFailed': 'Falha na exclusão. Por favor, tente novamente',
  'user.partialDelete': '{successCount} usuários excluídos com sucesso, {failCount} falharam',
  'user.deleteError': 'Ocorreu um erro durante a exclusão',
  'user.deleteCancelled': 'Exclusão cancelada',
  'user.confirmResetPassword': 'Uma nova senha será gerada após a redefinição. Continuar?',
  'user.resetPasswordSuccess': 'Senha redefinida. Por favor, notifique o usuário para fazer login com a nova senha',
  'user.generatedPassword': 'Senha Padrão Gerada',
  'user.confirmDeleteUser': 'Tem certeza de que deseja excluir este usuário?',
  'user.deleteUserSuccess': 'Excluído com sucesso',
  'user.operationFailed': 'Falha na operação. Por favor, tente novamente',
  'user.confirmStatusChange': 'Tem certeza de que deseja {action} {count} usuários selecionados?',
  'user.statusChangeSuccess': '{count} usuários {action} com sucesso',
  'user.invalidUserId': 'Existem IDs de usuário inválidos',
  'user.searchPhone': 'Por favor, insira o número de celular para pesquisar',
  'user.search': 'Pesquisar',
 
  // Página de gerenciamento de provedores
  'providerManagement.categoryFilter': 'Filtro de Categoria',
  'providerManagement.searchPlaceholder': 'Por favor, insira o nome do provedor para pesquisar',
  'providerManagement.category': 'Categoria',
  'providerManagement.providerCode': 'Código do Provedor',
  'providerManagement.fieldConfig': 'Configuração de Campos',
  'providerManagement.selectToDelete': 'Por favor, selecione provedores para excluir primeiro',
  'providerManagement.confirmDelete': 'Tem certeza de que deseja excluir os {count} provedores selecionados?',
  'providerManagement.viewFields': 'Ver Campos',
 
  // Texto comum
  'common.all': 'Todos',
  'common.search': 'Pesquisar',
  'common.name': 'Nome',
  'common.sort': 'Ordenação',
  'common.action': 'Ação',
  'common.edit': 'Editar',
  'common.delete': 'Excluir',
  'common.selectAll': 'Selecionar Tudo',
  'common.deselectAll': 'Desmarcar Tudo',
  'common.add': 'Adicionar',
  'common.perPage': '{number}/página',
  'common.firstPage': 'Primeira Página',
  'common.prevPage': 'Página Anterior',
  'common.nextPage': 'Próxima Página',
  'common.totalRecords': 'Total de {number} registros',
  'common.addProvider': 'Adicionar Provedor',
  'common.success': 'Sucesso',
  'common.editProvider': 'Editar Provedor',
  'common.updateSuccess': 'Atualizado com Sucesso',
  'common.addSuccess': 'Adicionado com Sucesso',
  'common.deleteSuccess': 'Excluído com Sucesso',
  'common.deleteFailure': 'Falha ao Excluir. Por Favor, Tente Novamente',
  'common.deleteCancelled': 'Exclusão Cancelada',
  'common.warning': 'Aviso',
  'common.tip': 'Dica',
  'common.confirm': 'Confirmar',
  'common.cancel': 'Cancelar',
  'common.sensitive': 'Sensível',
  'common.loading': 'Carregando',
  'common.copySuccess': 'Cópia bem-sucedida',
  'common.copyFailed': 'Falha ao copiar',
  'common.copyAddress': 'Copiar endereço',
 
  // Troca de idioma
  'language.zhCN': '中文简体',
  'language.zhTW': '中文繁體',
  'language.en': 'English',
  'language.de': 'Deutsch',
  'language.vi': 'Tiếng Việt',
  'language.ptBR': 'Português (Brasil)',
 
  // Página inicial
  'home.addAgent': 'Adicionar Agente',
  'home.greeting': 'Olá XiaoZhi',
  'home.wish': 'Vamos ter um dia maravilhoso!',
  'home.languageModel': 'LLM',
  'home.voiceModel': 'TTS',
  'home.configureRole': 'ConfRoles',
  'home.voiceprintRecognition': 'RecVoz',
  'home.deviceManagement': 'Dispositivos',
  'home.chatHistory': 'Conversa',
  'home.lastConversation': 'Última Conversa',
  'home.noConversation': 'Nenhuma conversa',
  'home.justNow': 'Agora mesmo',
  'home.minutesAgo': 'Há {minutes} minutos',
  'home.hoursAgo': 'Há {hours} horas e {minutes} minutos',
  '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.deleteSuccess': 'Excluído com sucesso',
  'home.deleteFailed': 'Falha ao excluir',
  'home.enableMemory': 'Por favor, ative a memória na página "Configurar Papel" primeiro',
 
  // Página de gerenciamento de parâmetros
  'paramManagement.pageTitle': 'Gerenciamento de Parâmetros',
  'paramManagement.searchPlaceholder': 'Por favor, insira código do parâmetro ou observação para pesquisar',
  'paramManagement.search': 'Pesquisar',
  'paramManagement.paramCode': 'Código do Parâmetro',
  'paramManagement.paramValue': 'Valor do Parâmetro',
  'paramManagement.valueType': 'Tipo',
  'paramManagement.remark': 'Observação',
  'paramManagement.operation': 'Operação',
  'paramManagement.select': 'Selecionar',
  'paramManagement.hide': 'Ocultar',
  'paramManagement.view': 'Visualizar',
  'paramManagement.deselectAll': 'Desmarcar Tudo',
  'paramManagement.selectAll': 'Selecionar Tudo',
  'paramManagement.add': 'Adicionar',
  'paramManagement.delete': 'Excluir',
  'paramManagement.edit': 'Editar',
  'paramManagement.refresh': 'Atualizar',
  'paramManagement.itemsPerPage': 'itens/página',
  'paramManagement.firstPage': 'Primeira Página',
  'paramManagement.prevPage': 'Página Anterior',
  'paramManagement.nextPage': 'Próxima Página',
  'paramManagement.totalRecords': '{total} no total',
  'paramManagement.selectedCount': '{count} selecionados',
  'paramManagement.groupHint': 'Agrupado por namespace',
  'paramManagement.emptyResult': 'Nenhum parâmetro correspondente',
  'paramManagement.group.all': 'Todos',
  'paramManagement.group.server': 'Servidor',
  'paramManagement.group.plugins': 'Plugins',
  'paramManagement.group.log': 'Logs',
  'paramManagement.group.session': 'Sessão',
  'paramManagement.group.general': 'Geral',
  'paramManagement.subgroup.root': 'Básico',
  'paramManagement.subgroup.auth': 'Auth',
  'paramManagement.subgroup.connection': 'Conexão',
  'paramManagement.subgroup.registry': 'Registry',
  'paramManagement.subgroup.resilience': 'Resilience',
  'paramManagement.subgroup.metrics': 'Métricas',
  'paramManagement.subgroup.tracing': 'Tracing',
  'paramManagement.subgroup.plugin': 'Plugin · {name}',
  'paramManagement.addParam': 'Adicionar Parâmetro',
  'paramManagement.editParam': 'Editar Parâmetro',
  'paramManagement.getParamsListFailed': 'Falha ao obter lista de parâmetros',
  'paramManagement.selectParamsFirst': 'Por favor, selecione parâmetros para excluir primeiro',
  'paramManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir {paramCount} parâmetros selecionados?',
  'paramManagement.invalidParamId': 'Existem IDs de parâmetro inválidos',
  'paramManagement.batchDeleteSuccess': '{paramCount} parâmetros excluídos com sucesso',
  'paramManagement.deleteFailed': 'Falha na exclusão. Por favor, tente novamente',
  'paramManagement.operationCancelled': 'Exclusão cancelada',
  'paramManagement.operationClosed': 'Operação fechada',
  'paramManagement.updateSuccess': 'Atualizado com sucesso. Algumas configurações só terão efeito após reiniciar o módulo xiaozhi-server.',
  'paramManagement.addSuccess': 'Adicionado com sucesso',
  'paramManagement.updateFailed': 'Falha na atualização',
  'paramManagement.addFailed': 'Falha ao adicionar',
 
  // Página de gerenciamento de servidores
  'serverSideManager.pageTitle': 'Gerenciamento de Servidores',
  'serverSideManager.wsAddress': 'Endereço WS',
  'serverSideManager.operation': 'Operação',
  'serverSideManager.restart': 'Reiniciar',
  'serverSideManager.updateConfig': 'Atualizar Configuração',
  'serverSideManager.restartServer': 'Reiniciar Servidor',
  'serverSideManager.updateConfigTitle': 'Atualizar Configuração',
  'serverSideManager.confirmRestart': 'Tem certeza de que deseja reiniciar o servidor?',
  'serverSideManager.confirmUpdateConfig': 'Tem certeza de que deseja atualizar a configuração?',
  'serverSideManager.loading': 'Carregando...',
  'serverSideManager.getServerListFailed': 'Falha ao obter lista de servidores',
  'serverSideManager.operationFailed': 'Falha na operação',
  'serverSideManager.restartSuccess': 'Reiniciado com sucesso',
  'serverSideManager.updateConfigSuccess': 'Configuração atualizada com sucesso',
 
  // Diálogo de adicionar agente
  'addAgentDialog.title': 'Adicionar Agente',
  'addAgentDialog.agentName': 'Nome do Agente',
  'addAgentDialog.placeholder': 'Por favor, insira o nome do agente..',
  'addAgentDialog.confirm': 'Confirmar',
  'addAgentDialog.cancel': 'Cancelar',
  'addAgentDialog.nameRequired': 'Por favor, insira o nome do agente',
  'addAgentDialog.addSuccess': 'Adicionado com sucesso',
 
  // Página de configuração de papel
  'roleConfig.title': 'Configuração de Papel',
  'roleConfig.addTag': 'Adicionar Novo Rótulo',
  'roleConfig.restartNotice': 'Reinicie após salvar a configuração para ativação.',
  'roleConfig.saveConfig': 'Salvar Configuração',
  'roleConfig.snapshotHistory': 'Histórico de Versões',
  'roleConfig.currentVersion': 'Versão Atual {version}',
  'roleConfig.functionName': 'Nome da Função',
  'roleConfig.reset': 'Redefinir',
  'roleConfig.agentName': 'Apelido',
  'roleConfig.roleTemplate': 'Modelo',
  'roleConfig.roleIntroduction': 'Introdução',
  'roleConfig.languageCode': 'Código do Idioma',
  'roleConfig.interactionLanguage': 'Idioma de Interação',
  'agentSnapshot.title': 'Histórico de Versões',
  'agentSnapshot.empty': 'Ainda sem versões',
  'agentSnapshot.version': 'Versão',
  'agentSnapshot.createdAt': 'Salvo em',
  'agentSnapshot.source': 'Origem',
  'agentSnapshot.changedFields': 'Alterações',
  'agentSnapshot.actions': 'Ações',
  'agentSnapshot.view': 'Ver',
  'agentSnapshot.restore': 'Restaurar',
  'agentSnapshot.delete': 'Excluir',
  'agentSnapshot.detailTitle': 'Detalhes da Alteração',
  'agentSnapshot.restorePreviewTitle': 'Prévia da Restauração',
  'agentSnapshot.confirmRestore': 'Confirmar Restauração',
  'agentSnapshot.before': 'Antes',
  'agentSnapshot.after': 'Depois',
  'agentSnapshot.emptyValue': 'Nenhum',
  'agentSnapshot.secretRedacted': 'Chave secreta mascarada',
  'agentSnapshot.configValue': 'Valor da configuração',
  'agentSnapshot.noChangedContent': 'Nenhuma alteração para exibir',
  'agentSnapshot.noFunctionChange': 'Sem alterações de função',
  'agentSnapshot.beforeChange': 'Antes da Alteração',
  'agentSnapshot.afterChange': 'Depois da Alteração',
  'agentSnapshot.beforeRestore': 'Antes da Restauração',
  'agentSnapshot.afterRestore': 'Depois da Restauração',
  'agentSnapshot.restoreMemoryWarning': 'Restaurar para uma versão sem memória apagará o histórico de conversa deste agente. Continue somente após confirmar esse risco.',
  'agentSnapshot.restoreMemoryDestructiveWarning': 'Esta restauração excluirá permanentemente o histórico de conversa existente deste agente. O histórico de conversa não faz parte dos snapshots de configuração e não pode ser recuperado pelo histórico de versões.',
  'agentSnapshot.unsavedChangesWarning': 'As alterações não salvas nesta página não serão incluídas no histórico e serão descartadas após a restauração.',
  'agentSnapshot.restoreConfirm': 'Restaurar para a versão {version}? A configuração atual será preservada no histórico.',
  'agentSnapshot.restoreSuccess': 'Versão restaurada',
  'agentSnapshot.restoreFailed': 'Falha ao restaurar versão',
  'agentSnapshot.restoreFailedRollback': 'Falha ao restaurar versão. A transação foi revertida e a configuração atual não foi alterada',
  'agentSnapshot.deleteConfirm': 'Excluir a versão {version}? Esta ação não pode ser desfeita.',
  'agentSnapshot.deleteSuccess': 'Versão do histórico excluída',
  'agentSnapshot.deleteFailed': 'Falha ao excluir a versão do histórico',
  'agentSnapshot.fetchFailed': 'Falha ao buscar versões',
  'agentSnapshot.detailFailed': 'Falha ao buscar detalhes do snapshot',
  'agentSnapshot.currentVersion': 'Snapshot mais recente',
  'agentSnapshot.source.config': 'Configuração Salva',
  'agentSnapshot.source.current': 'Configuração Atual',
  'agentSnapshot.source.restore': 'Resultado da restauração',
  'agentSnapshot.source.initial': 'Versão inicial',
  'agentSnapshot.field.restore': 'Restauração',
  '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 Atividade de Voz',
  'agentSnapshot.field.llmModelId': 'Modelo de Linguagem Principal',
  'agentSnapshot.field.slmModelId': 'Modelo de Linguagem Pequeno',
  'agentSnapshot.field.vllmModelId': 'Modelo de Visão',
  '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': 'Tom',
  'agentSnapshot.field.memModelId': 'Modelo de Memória',
  'agentSnapshot.field.intentModelId': 'Reconhecimento de Intenção',
  'agentSnapshot.field.chatHistoryConf': 'Histórico de Conversa',
  'agentSnapshot.field.systemPrompt': 'Introdução',
  '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': 'Funções',
  'agentSnapshot.field.contextProviders': 'Provedores de Contexto',
  'agentSnapshot.field.correctWordFileIds': 'Palavras de Substituição',
  'agentSnapshot.field.tagNames': 'Rótulos',
  'agentSnapshot.field.tagIds': 'IDs dos Rótulos',
  'agentSnapshot.function.added': 'Ativado',
  'agentSnapshot.function.removed': 'Desativado',
  'agentSnapshot.function.updated': 'Parâmetros alterados',
  'agentSnapshot.function.enabled': 'Ativado',
  'agentSnapshot.function.disabled': 'Desativado',
  'agentSnapshot.function.disabledNote': 'Esta função está desativada',
  'agentSnapshot.function.noParams': 'Nenhum parâmetro necessário',
  'agentSnapshot.chatHistoryConf.none': 'Não registrar histórico de conversa',
  'agentSnapshot.chatHistoryConf.text': 'Enviar texto',
  'agentSnapshot.chatHistoryConf.textVoice': 'Enviar texto e voz',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_WEATHER': 'Clima',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_MUSIC': 'Reprodutor de música do servidor',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_NEWS_CHINANEWS': 'China News',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_NEWS_NEWSNOW': 'Agregação NewsNow',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_HA_STATE': 'Controle de dispositivo do HomeAssistant',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_HA_PLAY_MUSIC': 'Reprodutor de música do HomeAssistant',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_WEB_SEARCH': 'Pesquisa na web',
  'agentSnapshot.plugin.SYSTEM_PLUGIN_CALL_DEVICE': 'Chamada entre dispositivos',
  'agentSnapshot.pluginField.url': 'URL do endpoint',
  'agentSnapshot.pluginField.news_sources': 'Fontes de notícias',
  'agentSnapshot.pluginField.default_rss_url': 'URL RSS padrão',
  'agentSnapshot.pluginField.society_rss_url': 'URL RSS de sociedade',
  'agentSnapshot.pluginField.world_rss_url': 'URL RSS mundial',
  'agentSnapshot.pluginField.finance_rss_url': 'URL RSS financeiro',
  'agentSnapshot.pluginField.api_key': 'Chave de API',
  'agentSnapshot.pluginField.default_location': 'Cidade padrão',
  'agentSnapshot.pluginField.api_host': 'Host da API de desenvolvedor',
  'agentSnapshot.pluginField.base_url': 'URL do servidor',
  'agentSnapshot.pluginField.devices': 'Dispositivos',
  'agentSnapshot.pluginField.provider': 'Provedor de pesquisa',
  'agentSnapshot.pluginField.description': 'Descrição da ferramenta',
  'agentSnapshot.pluginField.max_results': 'Quantidade de resultados',
  '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': 'Somente relatório',
  'agentSnapshot.model.Intent_nointent': 'Sem reconhecimento de intenção',
  'agentSnapshot.model.Intent_intent_llm': 'Reconhecimento de intenção por LLM externo',
  'agentSnapshot.model.Intent_function_call': 'Chamada de função por LLM',
  'agentSnapshot.voice.TTS_EdgeTTS0001': 'EdgeTTS feminino - Xiaoxiao',
  'agentSnapshot.voice.TTS_EdgeTTS0002': 'EdgeTTS masculino - Yunyang',
  'agentSnapshot.voice.TTS_EdgeTTS0003': 'EdgeTTS feminino - Xiaoyi',
  'agentSnapshot.voice.TTS_EdgeTTS0004': 'EdgeTTS masculino - Yunjian',
  'agentSnapshot.voice.TTS_EdgeTTS0005': 'EdgeTTS masculino - Yunxi',
  'agentSnapshot.voice.TTS_EdgeTTS0006': 'EdgeTTS masculino - Yunxia',
  'roleConfig.vad': 'Detecção de Voz',
  'roleConfig.asr': 'Reconhecimento de Fala',
  'roleConfig.llm': 'Modelo de Linguagem Principal',
  'roleConfig.slm': 'Modelo de Linguagem Pequeno',
  'roleConfig.vllm': 'Modelo de Visão',
  'roleConfig.intent': 'Reconhecimento de Intenção',
  'roleConfig.memoryHis': 'Memória',
  'roleConfig.memory': 'Modelo de Memória',
  'roleConfig.tts': 'Texto para Fala',
  'roleConfig.language': 'Linguagem do diálogo',
  'roleConfig.selectLanguage': 'Por favor, selecione o idioma',
  'roleConfig.voiceType': 'Tipo de Voz',
  'roleConfig.ttsVolume': 'Volume',
  'roleConfig.ttsRate': 'Velocidade da fala',
  'roleConfig.ttsPitch': 'Tonalidade',
  'roleConfig.ttsAdvanced': 'Parâmetros TTS',
  'roleConfig.advancedSettings': 'Pronúncia Tonal Substituição de Palavras',
  'roleConfig.volumeHint': '-100=mínimo, 0=padrão, 100=máximo',
  'roleConfig.speedHint': '-100=mais lento, 0=padrão, 100=mais rápido',
  'roleConfig.pitchHint': '-100=mínimo, 0=padrão, 100=máximo',
  'roleConfig.replacementWordLabel': 'Palavras de substituição associadas',
  'roleConfig.replacementWordTip': 'Durante a síntese de fala, substitua forçadamente palavras mal reconhecidas, caracteres polissílabos, substantivos próprios e palavras sensíveis pelo texto/pronúncia correto especificado por você para melhorar a precisão, conformidade e experiência',
  'replacementDialog.selectPlaceholder': 'Por favor, selecione',
  'roleConfig.pleaseEnterContent': 'Por favor, insira o conteúdo',
  'roleConfig.pleaseEnterLangCode': 'Por favor, insira o código do idioma, ex.: pt_BR',
  'roleConfig.pleaseEnterLangName': 'Por favor, insira o idioma de interação, ex.: Português',
  'roleConfig.pleaseSelect': 'Por favor, selecione',
  'roleConfig.editFunctions': 'Editar Funções',
  'roleConfig.reportText': 'Somente Texto',
  'roleConfig.reportTextVoice': 'Texto e Voz',
  'roleConfig.saveSuccess': 'Configuração salva com sucesso',
  'roleConfig.saveFailed': 'Falha ao salvar configuração',
  'roleConfig.confirmReset': 'Tem certeza de que deseja redefinir a configuração?',
  'roleConfig.resetSuccess': 'Configuração redefinida',
  'roleConfig.fetchTemplatesFailed': 'Falha ao buscar lista de modelos',
  'roleConfig.templateApplied': 'modelo aplicado',
  'roleConfig.applyTemplateFailed': 'Falha ao aplicar modelo',
  'roleConfig.fetchConfigFailed': 'Falha ao buscar configuração',
  'roleConfig.fetchModelsFailed': 'Falha ao buscar lista de modelos',
  'roleConfig.fetchPluginsFailed': 'Falha ao buscar lista de plugins',
  'roleConfig.cannotResumeAudio': 'Não é possível retomar a reprodução de áudio',
  'roleConfig.selectVoiceFirst': 'Por favor, selecione uma voz primeiro',
  'roleConfig.audioLoadTimeout': 'O carregamento do áudio está demorando muito. Por favor, tente novamente mais tarde',
  'roleConfig.cloneAudioPlayFailed': 'Falha na reprodução do áudio clonado',
  'roleConfig.cannotPlayCloneAudio': 'Não é possível reproduzir áudio clonado',
  'roleConfig.getCloneAudioFailed': 'Falha ao obter áudio clonado',
  'roleConfig.noPreviewAudio': 'Esta voz não possui áudio de pré-visualização disponível',
  'roleConfig.audioPlayFailed': 'Falha na reprodução de áudio',
  'roleConfig.cannotPlayAudio': 'Não é possível reproduzir áudio',
  'roleConfig.audioPlayError': 'Ocorreu um erro durante a reprodução de áudio',
 
  // Descrições de Tooltip para campos de formulário
  'roleConfig.tooltip.agentName': 'Defina o nome do seu agente de IA para identificação e reconhecimento',
  'roleConfig.tooltip.roleTemplate': 'Escolha entre modelos de função predefinidos para configurar rapidamente as configurações básicas do seu agente',
  'roleConfig.tooltip.contextProvider': 'Quando o XiaoZhi é ativado, busca dados de sistemas externos e os injeta dinamicamente no prompt do sistema do LLM',
  'roleConfig.tooltip.roleIntroduction': 'Defina o posicionamento do papel, traços de personalidade, normas comportamentais e histórico de conhecimento profissional do agente de IA',
  'roleConfig.tooltip.memoryHis': 'Resumir conteúdo do registro de chat',
  'roleConfig.tooltip.languageCode': 'Defina o código de idioma como pt-BR, en-US, etc., usado para reconhecimento de recursos específicos',
  'roleConfig.tooltip.interactionLanguage': 'Defina o idioma de interação, especificando o idioma principal que o agente de IA usa para comunicação',
  'roleConfig.tooltip.vad': 'Detecção de Atividade de Voz: Detecta quando o usuário começa ou para de falar, usado para determinar o início e fim da conversa, permitindo funcionalidade de interrupção',
  'roleConfig.tooltip.asr': 'Reconhecimento Automático de Fala: Converte fala do usuário em texto, o primeiro passo no diálogo humano-computador, suporta reconhecimento multilíngue',
  'roleConfig.tooltip.llm': 'Modelo de Linguagem Principal (Large Language Model): O "cérebro" do agente de IA, responsável por entender a intenção do usuário, gerar respostas e executar várias tarefas',
  'roleConfig.tooltip.slm': 'Modelo de Parâmetros Pequeno (Small Language Model): Usado para ativação do agente de IA, gerando títulos de resumo de memória',
  'roleConfig.tooltip.vllm': 'Modelo de Linguagem Visual Grande: Processa compreensão de imagem e vídeo, permitindo que o agente de IA analise e descreva o conteúdo capturado pela câmera',
  'roleConfig.tooltip.intent': 'Detecção de Intenção: Analisa fala ou texto do usuário para determinar a verdadeira intenção do usuário, como consultas, bate-papo, controle de dispositivos, etc.',
  'roleConfig.tooltip.memory': 'Modelo de Memória: Gerencia armazenamento e resumo do histórico de conversas, determina se a IA pode lembrar conversas anteriores para memória de longo prazo',
  'roleConfig.tooltip.tts': 'Texto para Fala: Converte texto em fala natural, determinando a voz, velocidade e tom da IA',
  'roleConfig.tooltip.language': 'Selecione o idioma da voz; o sistema filtrará vozes disponíveis que suportam esse idioma',
  'roleConfig.tooltip.voiceType': 'Escolha a voz para o agente de IA; diferentes vozes têm diferentes características e estilos. Algumas vozes suportam funcionalidade de visualização, clique no botão de reprodução para visualizar',
 
  // Diálogo de gerenciamento de funções
  'functionDialog.title': 'Gerenciamento de Funções',
  'functionDialog.unselectedFunctions': 'Funções Não Selecionadas',
  'functionDialog.selectedFunctions': 'Funções Selecionadas',
  'functionDialog.selectAll': 'Selecionar Tudo',
  'functionDialog.noMorePlugins': 'Não há mais plugins disponíveis',
  'functionDialog.pleaseSelectPlugin': 'Por favor, selecione funções de plugin',
  'functionDialog.paramConfig': 'Configuração de Parâmetros',
  'functionDialog.noNeedToConfig': ' não requer configuração de parâmetros',
  'functionDialog.pleaseSelectFunctionForParam': 'Por favor, selecione uma função configurada para definições de parâmetros',
  'functionDialog.mcpAccessPoint': 'Ponto de Acesso MCP',
  'functionDialog.mcpAddressDesc': 'Abaixo estão os endereços de ponto de acesso MCP do agente.',
  'functionDialog.howToDeployMcp': 'Como implantar ponto de acesso MCP',
  'functionDialog.howToIntegrateMcp': 'Como integrar funções MCP',
  'functionDialog.copy': 'Copiar',
  'functionDialog.accessPointStatus': 'Status do Ponto de Acesso',
  'functionDialog.connected': 'Conectado',
  'functionDialog.loading': 'Carregando...',
  'functionDialog.disconnected': 'Desconectado',
  'functionDialog.refresh': 'Atualizar',
  'functionDialog.noAvailableTools': 'Nenhuma ferramenta disponível',
  'functionDialog.cancel': 'Cancelar',
  'functionDialog.saveConfig': 'Salvar Configuração',
  'functionDialog.copiedToClipboard': 'Copiado para a área de transferência',
  'functionDialog.copyFailed': 'Falha ao copiar. Por favor, copie manualmente',
  'functionDialog.jsonFormatError': ' erro no formato do campo: formato JSON inválido',
  'functionDialog.defaultValue': 'Valor Padrão',
 
  // Página de configuração de modelos
  'modelConfig.searchPlaceholder': 'Por favor, insira o nome do modelo para pesquisar',
  'modelConfig.search': 'Pesquisar',
  'modelConfig.vad': 'Detecção de Atividade de Voz',
  'modelConfig.asr': 'Reconhecimento de Fala',
  'modelConfig.llm': 'Modelo de Linguagem Grande',
  'modelConfig.vllm': 'Modelo de Linguagem Visual',
  'modelConfig.intent': 'Reconhecimento de Intenção',
  'modelConfig.tts': 'Texto para Fala',
  'modelConfig.memory': 'Memória',
  'modelConfig.rag': 'RAG',
  'modelConfig.modelId': 'ID do Modelo',
  'modelConfig.modelName': 'Nome do Modelo',
  'modelConfig.provider': 'Tipo de Interface',
  'modelConfig.unknown': 'Desconhecido',
  'modelConfig.isEnabled': 'Ativado',
  'modelConfig.isDefault': 'Padrão',
  'modelConfig.defaultModelCannotDisable': 'A configuração do modelo padrão não pode ser desativada',
  'modelConfig.action': 'Ação',
  'modelConfig.voiceManagement': 'Gerenciamento de Voz',
  'modelConfig.edit': 'Editar',
  'modelConfig.duplicate': 'Duplicar',
  'modelConfig.delete': 'Excluir',
  'modelConfig.deselectAll': 'Desmarcar Tudo',
  'modelConfig.select': 'Selecionar',
  'modelConfig.selectAll': 'Selecionar Tudo',
  'modelConfig.add': 'Adicionar Novo',
  'modelConfig.selectModelsFirst': 'Por favor, selecione modelos para excluir primeiro',
  'modelConfig.confirmBatchDelete': 'Tem certeza de que deseja excluir os modelos selecionados?',
  'modelConfig.confirmDelete': 'Tem certeza de que deseja excluir este modelo?',
  'modelConfig.batchDeleteSuccess': 'Exclusão em lote realizada com sucesso',
  'modelConfig.partialDeleteFailed': 'Exclusão parcial falhou',
  'modelConfig.deleteSuccess': 'Excluído com sucesso',
  'modelConfig.deleteFailed': 'Falha ao excluir',
  'modelConfig.deleteCancelled': 'Exclusão cancelada',
  'modelConfig.duplicateSuccess': 'Duplicado com sucesso',
  'modelConfig.duplicateFailed': 'Falha ao duplicar',
  'modelConfig.saveSuccess': 'Salvo com sucesso',
  'modelConfig.saveFailed': 'Falha ao salvar',
  'modelConfig.addSuccess': 'Adicionado com sucesso',
  'modelConfig.addFailed': 'Falha ao adicionar',
  'modelConfig.fetchModelsFailed': 'Falha ao buscar lista de modelos',
  'modelConfig.enableSuccess': 'Ativado com sucesso',
  'modelConfig.disableSuccess': 'Desativado com sucesso',
  'modelConfig.operationFailed': 'Falha na operação',
  'modelConfig.setDefaultSuccess': 'Modelo padrão definido com sucesso. Por favor, reinicie o módulo xiaozhi-server manualmente',
  'modelConfig.itemsPerPage': '{items} itens/página',
  'modelConfig.firstPage': 'Primeira Página',
  'modelConfig.prevPage': 'Página Anterior',
  'modelConfig.nextPage': 'Próxima Página',
  'modelConfig.totalRecords': 'Total de {total} registros',
  'modelConfig.loading': 'Carregando...',
 
  // Diálogo de configuração de modelos
  'modelConfigDialog.addModel': 'Adicionar Modelo',
  'modelConfigDialog.editModel': 'Editar Modelo',
  'modelConfigDialog.duplicateModel': 'Duplicar Modelo',
  'modelConfigDialog.copySuffix': '_cópia',
  'modelConfigDialog.modelInfo': 'Informações do Modelo',
  'modelConfigDialog.enable': 'Ativar',
  'modelConfigDialog.setDefault': 'Definir como Padrão',
  'modelConfigDialog.modelId': 'ID do Modelo',
  'modelConfigDialog.enterModelId': 'Se não preenchido, será gerado automaticamente',
  'modelConfigDialog.invalidModelId': 'O ID do modelo não pode ser apenas texto ou espaços. Use letras, números, sublinhados ou hífens',
  'modelConfigDialog.modelName': 'Nome do Modelo',
  'modelConfigDialog.enterModelName': 'Por favor, insira o nome do modelo',
  'modelConfigDialog.modelCode': 'Código do Modelo',
  'modelConfigDialog.enterModelCode': 'Por favor, insira o código do modelo',
  'modelConfigDialog.supplier': 'Fornecedor',
  'modelConfigDialog.selectSupplier': 'Por favor, selecione',
  'modelConfigDialog.sortOrder': 'Ordem de Classificação',
  'modelConfigDialog.enterSortOrder': 'Por favor, insira a ordem de classificação',
  'modelConfigDialog.docLink': 'Link da Documentação',
  'modelConfigDialog.enterDocLink': 'Por favor, insira o link da documentação',
  'modelConfigDialog.remark': 'Observação',
  'modelConfigDialog.enterRemark': 'Por favor, insira a observação do modelo',
  'modelConfigDialog.callInfo': 'Informações de Chamada',
  'modelConfigDialog.enterJsonExample': 'Por favor, insira variáveis no formato JSON (exemplo: {"key":"value"})',
  'modelConfigDialog.save': 'Salvar',
 
  // Configuração de modelo TTS
  'ttsModel.select': 'Selecionar',
  'ttsModel.voiceCode': 'Código da Voz',
  'ttsModel.voiceName': 'Nome da Voz',
  'ttsModel.languageType': 'Tipo de Idioma',
  'ttsModel.preview': 'Pré-visualizar',
  'ttsModel.enterMp3Url': 'Por favor, insira a URL do MP3',
  'ttsModel.remark': 'Observação',
  'ttsModel.enterRemark': 'Esta é uma observação',
  'ttsModel.referenceAudioPath': 'Caminho do Áudio de Referência',
  'ttsModel.enterReferenceAudio': 'Este é o caminho do áudio de referência',
  'ttsModel.referenceText': 'Texto do Áudio de Referência',
  'ttsModel.enterReferenceText': 'Este é o texto do áudio de referência',
  'ttsModel.action': 'Ação',
  'ttsModel.operation': 'Operação',
  'ttsModel.operationFailed': 'Falha na operação',
  'ttsModel.operationClosed': 'Operação fechada',
  'ttsModel.edit': 'Editar',
  'ttsModel.delete': 'Excluir',
  'ttsModel.deleteVoiceSuccess': '{count} vozes excluídas com sucesso',
  'ttsModel.deleteFailed': 'Falha ao excluir vozes',
  'ttsModel.save': 'Salvar',
  'ttsModel.deselectAll': 'Desmarcar Tudo',
  'ttsModel.selectAll': 'Selecionar Tudo',
  'ttsModel.add': 'Adicionar',
  'ttsModel.fetchVoicesFailed': 'Falha ao buscar lista de vozes',
  'ttsModel.loadVoicesFailed': 'Falha ao carregar dados de voz',
  'ttsModel.unnamedVoice': 'Voz Sem Nome',
  'ttsModel.finishEditingFirst': 'Por favor, termine a edição atual primeiro',
  'ttsModel.selectVoiceToDelete': 'Por favor, selecione vozes para excluir',
  'ttsModel.warning': 'Aviso',
  'ttsModel.confirmDeleteVoice': 'Tem certeza de que deseja excluir {count} vozes?',
  'ttsModel.voiceCodeNameLanguageRequired': 'Código da voz, nome da voz e tipo de idioma não podem estar vazios',
  'ttsModel.deleteCancelled': 'Exclusão cancelada',
  'ttsModel.updateSuccess': 'Atualizado com sucesso',
  'ttsModel.saveSuccess': 'Salvo com sucesso',
 
  // Página de gerenciamento OTA
  'otaManagement.firmwareManagement': 'Gerenciamento de Firmware',
  'otaManagement.searchPlaceholder': 'Por favor, insira o nome do firmware para pesquisar',
  'otaManagement.search': 'Pesquisar',
  'otaManagement.firmwareName': 'Nome do Firmware',
  'otaManagement.firmwareType': 'Tipo de Firmware',
  'otaManagement.version': 'Versão',
  'otaManagement.fileSize': 'Tamanho do Arquivo',
  'otaManagement.remark': 'Observação',
  'otaManagement.createTime': 'Data de Criação',
  'otaManagement.updateTime': 'Data de Atualização',
  'otaManagement.action': 'Ação',
  'otaManagement.download': 'Baixar',
  'otaManagement.edit': 'Editar',
  'otaManagement.delete': 'Excluir',
  'otaManagement.selectAll': 'Selecionar Tudo',
  'otaManagement.deselectAll': 'Desmarcar Tudo',
  'otaManagement.addNew': 'Adicionar Novo',
  'otaManagement.addFirmware': 'Adicionar Firmware',
  'otaManagement.editFirmware': 'Editar Firmware',
  'otaManagement.itemsPerPage': '{items} itens/página',
  'otaManagement.firstPage': 'Primeira Página',
  'otaManagement.prevPage': 'Página Anterior',
  'otaManagement.nextPage': 'Próxima Página',
  'otaManagement.totalRecords': 'Total de {total} registros',
  'otaManagement.selectFirmwareFirst': 'Por favor, selecione firmware para excluir primeiro',
  'otaManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir os {paramCount} firmware selecionados?',
  'otaManagement.operationCancelled': 'Operação de exclusão foi cancelada',
  'otaManagement.operationClosed': 'Operação foi fechada',
  'otaManagement.batchDeleteSuccess': '{paramCount} firmware excluídos com sucesso',
  'otaManagement.deleteFailed': 'Falha na exclusão. Por favor, tente novamente',
  'otaManagement.incompleteFirmwareInfo': 'Informações de firmware incompletas',
  'otaManagement.getDownloadUrlFailed': 'Falha ao obter link de download',
  'otaManagement.getFirmwareTypesFailed': 'Falha ao obter tipos de firmware',
  'otaManagement.updateSuccess': 'Atualizado com sucesso',
  'otaManagement.updateFailed': 'Falha na atualização',
  'otaManagement.addSuccess': 'Adicionado com sucesso',
  'otaManagement.addFailed': 'Falha ao adicionar',
  'otaManagement.fetchFirmwareListFailed': 'Falha ao buscar lista de firmware',
 
  // Tipos de modelo na página de gerenciamento de provedores
  'providerManagement.all': 'Todos',
  'providerManagement.modelType.ASR': 'Reconhecimento de Fala',
  'providerManagement.modelType.TTS': 'Texto para Fala',
  'providerManagement.modelType.LLM': 'Modelo de Linguagem Grande',
  'providerManagement.modelType.VLLM': 'Modelo de Linguagem Visual Grande',
  'providerManagement.modelType.Intent': 'Reconhecimento de Intenção',
  'providerManagement.modelType.Memory': 'Módulo de Memória',
  'providerManagement.modelType.VAD': 'Detecção de Atividade de Voz',
  'providerManagement.modelType.Plugin': 'Ferramenta de Plugin',
  'providerManagement.modelType.RAG': 'RAG',
 
  // Diálogo de provedor
  'providerDialog.category': 'Categoria',
  'providerDialog.selectCategory': 'Por favor, selecione a categoria',
  'providerDialog.code': 'Código',
  'providerDialog.inputCode': 'Por favor, insira o código do provedor',
  'providerDialog.name': 'Nome',
  'providerDialog.inputName': 'Por favor, insira o nome do provedor',
  'providerDialog.sort': 'Ordenação',
  'providerDialog.fieldConfig': 'Configuração de Campos',
  'providerDialog.add': 'Adicionar',
  'providerDialog.deselectAll': 'Desmarcar Tudo',
  'providerDialog.selectAll': 'Selecionar Tudo',
  'providerDialog.batchDelete': 'Exclusão em Lote',
  'providerDialog.fieldKey': 'Chave do Campo',
  'providerDialog.fieldLabel': 'Rótulo do Campo',
  'providerDialog.fieldType': 'Tipo do Campo',
  'providerDialog.type': 'Tipo',
  'providerDialog.stringType': 'Texto',
  'providerDialog.numberType': 'Número',
  'providerDialog.booleanType': 'Booleano',
  'providerDialog.dictType': 'Dicionário',
  'providerDialog.arrayType': 'Lista Separada por Ponto e Vírgula',
  'providerDialog.ragType': 'RAG',
  'providerDialog.defaultValue': 'Valor Padrão',
  'providerDialog.inputDefaultValue': 'Por favor, insira o valor padrão',
  'providerDialog.operation': 'Operação',
  'providerDialog.edit': 'Editar',
  'providerDialog.complete': 'Concluir',
  'providerDialog.delete': 'Excluir',
  'providerDialog.save': 'Salvar',
  'providerDialog.requiredCategory': 'Por favor, selecione a categoria',
  'providerDialog.requiredCode': 'Por favor, insira o código do provedor',
  'providerDialog.requiredName': 'Por favor, insira o nome do provedor',
  'providerDialog.completeFieldEdit': 'Por favor, conclua a edição do campo atual primeiro',
  'providerDialog.confirmDeleteField': 'Tem certeza de que deseja excluir este campo?',
  'providerDialog.selectFieldsToDelete': 'Por favor, selecione campos para excluir primeiro',
  'providerDialog.confirmBatchDeleteFields': 'Tem certeza de que deseja excluir {count} campos selecionados?',
  'providerDialog.batchDeleteFieldsSuccess': '{count} campos excluídos com sucesso',
 
  // Gerenciamento de modelos de agente
  'agentTemplateManagement.title': 'Gerenciamento de Papéis Padrão',
  'agentTemplateManagement.templateName': 'Nome do Modelo',
  'agentTemplateManagement.action': 'Ação',
  'agentTemplateManagement.createTemplate': 'Criar Modelo',
  'agentTemplateManagement.editTemplate': 'Editar Modelo',
  'agentTemplateManagement.deleteTemplate': 'Excluir Modelo',
  'agentTemplateManagement.deleteSuccess': 'Modelo excluído com sucesso',
  'agentTemplateManagement.batchDelete': 'Exclusão em Lote',
  'agentTemplateManagement.batchDeleteSuccess': 'Exclusão em lote realizada com sucesso',
  'agentTemplateManagement.selectTemplate': 'Por favor, selecione um modelo',
  'agentTemplateManagement.select': 'Selecionar',
  'agentTemplateManagement.searchPlaceholder': 'Por favor, insira o nome do modelo para pesquisar',
  'agentTemplateManagement.search': 'Pesquisar',
  'agentTemplateManagement.serialNumber': 'Número de Série',
  'agentTemplateManagement.selectAll': 'Selecionar Tudo',
  'agentTemplateManagement.deselectAll': 'Desmarcar Tudo',
  'agentTemplateManagement.loading': 'Carregando...',
  'agentTemplateManagement.confirmSingleDelete': 'Tem certeza de que deseja excluir este modelo?',
  'agentTemplateManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir os {count} modelos selecionados?',
  'agentTemplateManagement.deleteFailed': 'Falha ao excluir modelo',
  'agentTemplateManagement.batchDeleteFailed': 'Falha na exclusão em lote de modelos',
  'agentTemplateManagement.deleteBackendError': 'Falha na exclusão. Verifique se o serviço de backend está funcionando normalmente',
 
  // Configuração rápida de modelo
  'templateQuickConfig.title': 'Configuração Rápida de Módulo',
  'templateQuickConfig.agentSettings.agentName': 'Apelido',
  'templateQuickConfig.agentSettings.agentNamePlaceholder': 'Por favor, insira o apelido',
  'templateQuickConfig.agentSettings.systemPrompt': 'Introdução',
  'templateQuickConfig.agentSettings.systemPromptPlaceholder': 'Por favor, insira a introdução',
  'templateQuickConfig.saveConfig': 'Salvar Configuração',
  'templateQuickConfig.resetConfig': 'Redefinir Configuração',
  'templateQuickConfig.saveSuccess': 'Configuração salva com sucesso',
  'templateQuickConfig.resetSuccess': 'Configuração redefinida com sucesso',
  'templateQuickConfig.confirmReset': 'Tem certeza de que deseja redefinir a configuração?',
  'templateQuickConfig.saveFailed': 'Falha ao salvar configuração',
  'templateQuickConfig.confirm': 'Confirmar',
  'templateQuickConfig.cancel': 'Cancelar',
  'templateQuickConfig.templateNotFound': 'Modelo não encontrado',
  'templateQuickConfig.newTemplate': 'Novo Modelo',
  'templateQuickConfig.editTemplate': 'Editar Modelo',
  'templateQuickConfig.addTemplate': 'Adicionar Modelo',
  'warning': 'Aviso',
  'info': 'Informação',
  'common.networkError': 'Falha na requisição de rede',
 
  // Criptografia SM2
  '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 obtenção da chave pública',
 
  // Clonagem de Voz e Gerenciamento de Recursos
  'voiceClone.title': 'Clonagem de Voz',
  'voiceResource.title': 'Recurso de Voz',
  'voiceClone.platformName': 'Nome da Plataforma',
  'voiceClone.voiceId': 'ID da Voz',
  'voiceClone.userId': 'Proprietário da Conta',
  'voiceClone.name': 'Nome da Voz',
  'voiceClone.clone': 'Clonar Voz',
  'voiceClone.action': 'Ação',
  'voiceClone.modelId': 'ID do Modelo',
  'voiceClone.trainStatus': 'Status do Treinamento',
  'voiceClone.trainError': 'Erro de Treinamento',
  'voiceClone.createdAt': 'Data de Criação',
  'voiceClone.search': 'Pesquisar',
  'voiceClone.searchPlaceholder': 'Por favor, insira o nome da voz ou ID da voz',
  'voiceClone.addNew': 'Adicionar',
  'voiceClone.delete': 'Excluir',
  'voiceClone.selectAll': 'Selecionar Tudo',
  'voiceClone.deselectAll': 'Desmarcar Tudo',
  'voiceClone.addVoiceClone': 'Adicionar Recurso de Voz',
  'voiceClone.confirmDelete': 'Tem certeza de que deseja excluir os {count} recursos de voz selecionados?',
  'voiceClone.deleteSuccess': '{count} recursos de voz excluídos com sucesso',
  'voiceClone.deleteFailed': 'Falha na exclusão',
  'voiceClone.addSuccess': 'Adicionado com sucesso',
  'voiceClone.addFailed': 'Falha ao adicionar',
  'voiceClone.updateSuccess': 'Atualizado com sucesso',
  'voiceClone.updateFailed': 'Falha na atualização',
  'voiceClone.selectFirst': 'Por favor, selecione recursos de voz para excluir primeiro',
  'voiceClone.operationCancelled': 'Cancelar',
  'voiceClone.operationClosed': 'Popup fechado',
  'voiceClone.cloneSuccess': 'Clonagem bem-sucedida',
  'voiceClone.cloneFailed': 'Falha ao clonar',
  'voiceClone.cloneErrorTip': 'Falha na clonagem, passe o mouse sobre a dica de erro para ver os detalhes',
  'voiceClone.apiError': 'Erro na chamada da API',
  'voiceClone.confirmClone': 'Tem certeza de que deseja clonar esta voz?',
  'voiceClone.onlySuccessCanClone': 'Apenas vozes treinadas com sucesso podem ser clonadas',
  'common.insufficient': 'Insuficiente',
  'voiceClone.platformNameRequired': 'Por favor, selecione o nome da plataforma',
  'voiceClone.voiceIdRequired': 'Por favor, selecione o ID da voz',
  'voiceClone.userIdRequired': 'Por favor, selecione o proprietário da conta',
  'voiceClone.platformNamePlaceholder': 'Por favor, selecione o nome da plataforma',
  'voiceClone.voiceIdPlaceholder': 'Por favor, insira o ID da voz e pressione Enter',
  'voiceClone.userIdPlaceholder': 'Por favor, insira palavra-chave para selecionar o proprietário da conta',
  'voiceClone.languages': 'Idiomas',
  'voiceClone.languagesPlaceholder': 'Por favor, insira idiomas, ex.: Português, English',
  'voiceClone.languagesRequired': 'Por favor, insira idiomas',
  'voiceClone.waitingUpload': 'Aguardando envio',
  'voiceClone.waitingTraining': 'Aguardando clonagem',
  'voiceClone.training': 'Treinando',
  'voiceClone.trainSuccess': 'Treinamento bem-sucedido',
  'voiceClone.trainFailed': 'Treinamento falhou',
  'voiceClone.trainFailedWithError': 'Treinamento falhou: {error}',
  'voiceClone.itemsPerPage': '{items} itens/página',
  'voiceClone.firstPage': 'Primeira Página',
  'voiceClone.prevPage': 'Página Anterior',
  'voiceClone.nextPage': 'Próxima Página',
  'voiceClone.totalRecords': '{total} registros no total',
  'voiceClone.noVoiceCloneAssigned': 'Sua conta não possui recursos de voz atribuídos',
  'voiceClone.contactAdmin': 'Por favor, entre em contato com o administrador para atribuição de recursos de voz',
  'voiceClone.dialogTitle': 'Clonagem de Voz',
  'voiceClone.stepUpload': 'Preparar Áudio',
  'voiceClone.stepEdit': 'Editar Áudio',
  'voiceClone.dragOrClick': 'Arraste o arquivo de áudio aqui ou clique para enviar',
  'voiceClone.uploadTip': 'Suporta todos os formatos de áudio principais. A duração selecionada deve ser entre 8 e 60 segundos',
  'voiceClone.editTip1': 'Por favor, confirme se o áudio enviado está satisfatório',
  'voiceClone.editTip2': 'Você pode ouvir e cortar o áudio. Se não estiver satisfeito, pode voltar para regravar ou reenviar',
  'voiceClone.selectedDuration': 'Segmento válido selecionado: {duration} segundos',
  'voiceClone.trim': 'Cortar segmento selecionado',
  'voiceClone.reset': 'Redefinir',
  'voiceClone.play': 'Reproduzir',
  'voiceClone.pause': 'Pausar',
  'voiceClone.stop': 'Parar',
  'voiceClone.cancel': 'Cancelar',
  'voiceClone.warning': 'Aviso',
  'voiceClone.ok': 'OK',
  'voiceClone.nextStep': 'Próximo',
  'voiceClone.prevStep': 'Anterior',
  'voiceClone.upload': 'Enviar Áudio',
  'voiceClone.pleaseSelectAudio': 'Por favor, selecione um arquivo de áudio primeiro',
  'voiceClone.durationError': 'A duração do áudio deve ser entre 8 e 60 segundos',
  'voiceClone.loadAudioFailed': 'Falha ao carregar áudio',
  'voiceClone.trimSuccess': 'Corte realizado com sucesso',
  'voiceClone.resetSuccess': 'Redefinido com sucesso',
  'voiceClone.uploadSuccess': 'Enviado com sucesso',
  'voiceClone.uploadFailed': 'Falha no envio',
  'voiceClone.updateNameSuccess': 'Nome atualizado com sucesso',
  'voiceClone.updateNameFailed': 'Falha ao atualizar nome',
  'voiceClone.playFailed': 'Falha na reprodução',
  'voiceClone.Details': 'Detalhes do Erro',
 
  // Página de gerenciamento da Base de Conhecimento
  'knowledgeBaseManagement.title': 'Base de Conhecimento',
  'knowledgeBaseManagement.searchPlaceholder': 'Por favor, insira o nome da base de conhecimento para pesquisar',
  'knowledgeBaseManagement.search': 'Pesquisar',
  'knowledgeBaseManagement.name': 'Nome da Base de Conhecimento',
  'knowledgeBaseManagement.description': 'Descrição da Base de Conhecimento',
  'knowledgeBaseManagement.documentCount': 'Quantidade de Documentos',
  'knowledgeBaseManagement.status': 'Ativado',
  'knowledgeBaseManagement.createdAt': 'Data de Criação',
  'knowledgeBaseManagement.operation': 'Operação',
  'knowledgeBaseManagement.add': 'Adicionar',
  'knowledgeBaseManagement.delete': 'Excluir',
  'knowledgeBaseManagement.edit': 'Editar',
  'knowledgeBaseManagement.itemsPerPage': 'itens/página',
  'knowledgeBaseManagement.firstPage': 'Primeira Página',
  'knowledgeBaseManagement.prevPage': 'Página Anterior',
  'knowledgeBaseManagement.nextPage': 'Próxima Página',
  'knowledgeBaseManagement.totalRecords': 'Total de {total} registros',
  'knowledgeBaseManagement.addKnowledgeBase': 'Adicionar Base de Conhecimento',
  'knowledgeBaseManagement.editKnowledgeBase': 'Editar Base de Conhecimento',
  'knowledgeBaseManagement.getKnowledgeBaseListFailed': 'Falha ao obter lista de bases de conhecimento',
  'knowledgeBaseManagement.selectKnowledgeBaseFirst': 'Por favor, selecione bases de conhecimento para excluir primeiro',
  'knowledgeBaseManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir as {count} bases de conhecimento selecionadas?',
  'knowledgeBaseManagement.batchDeleteSuccess': '{count} bases de conhecimento excluídas com sucesso',
  'knowledgeBaseManagement.deleteFailed': 'Falha ao excluir. Por favor, tente novamente',
  'knowledgeBaseManagement.operationCancelled': 'Operação de exclusão foi cancelada',
  'knowledgeBaseManagement.updateSuccess': 'Atualizado com sucesso',
  'knowledgeBaseManagement.addSuccess': 'Adicionado com sucesso',
  'knowledgeBaseManagement.updateFailed': 'Falha na atualização',
  'knowledgeBaseManagement.addFailed': 'Falha ao adicionar',
  'knowledgeBaseManagement.selectAll': 'Selecionar Tudo',
  'knowledgeBaseManagement.cancelSelectAll': 'Desmarcar Tudo',
 
  // Diálogo da Base de Conhecimento
  'knowledgeBaseDialog.title': 'Base de Conhecimento',
  'knowledgeBaseDialog.name': 'Nome da Base de Conhecimento',
  'knowledgeBaseDialog.namePlaceholder': 'Por favor, insira o nome da base de conhecimento com precisão para melhorar a acurácia da chamada da base de conhecimento',
  'knowledgeBaseDialog.description': 'Descrição da Base de Conhecimento',
  'knowledgeBaseDialog.descriptionPlaceholder': 'Por favor, insira a descrição da base de conhecimento com precisão para ajudar o modelo a entender melhor o conteúdo',
  'knowledgeBaseDialog.ragModel': 'Modelo RAG',
  'knowledgeBaseDialog.ragModelPlaceholder': 'Por favor, selecione o modelo RAG',
  'knowledgeBaseDialog.ragModelRequired': 'Por favor, selecione o modelo RAG',
  'knowledgeBaseDialog.loadRAGModelsFailed': 'Falha ao carregar lista de modelos RAG',
  'knowledgeBaseDialog.status': 'Status',
  'knowledgeBaseDialog.statusEnabled': 'Ativado',
  'knowledgeBaseDialog.statusDisabled': 'Desativado',
  'knowledgeBaseDialog.save': 'Salvar',
  'knowledgeBaseDialog.cancel': 'Cancelar',
  'knowledgeBaseDialog.confirm': 'Confirmar',
  'knowledgeBaseDialog.requiredName': 'Por favor, insira o nome da base de conhecimento',
  'knowledgeBaseDialog.nameRequired': 'Por favor, insira o nome da base de conhecimento',
  'knowledgeBaseDialog.nameLength': 'O nome da base de conhecimento deve ter entre 1 e 50 caracteres',
  'knowledgeBaseDialog.namePattern': 'O nome da base de conhecimento pode conter apenas caracteres chinêses, inglêses, números, espaços, sublinhados e hífens',
  'knowledgeBaseDialog.descriptionLength': 'A descrição da base de conhecimento não pode exceder 200 caracteres',
  'knowledgeBaseDialog.nameLengthLimit': 'O nome da base de conhecimento não pode exceder 50 caracteres',
  'knowledgeBaseDialog.descriptionLengthLimit': 'A descrição da base de conhecimento não pode exceder 200 caracteres',
 
  // Botão de visualização na página de gerenciamento da base de conhecimento
  'knowledgeBaseManagement.view': 'Gerenciar Arquivos',
 
  // Página de upload de arquivos da base de conhecimento
  'knowledgeFileUpload.back': 'Voltar',
  'knowledgeFileUpload.searchPlaceholder': 'Por favor, insira o nome do documento para pesquisar',
  'knowledgeFileUpload.search': 'Pesquisar',
  'knowledgeFileUpload.addDocument': 'Adicionar Documento',
  'knowledgeFileUpload.documentName': 'Nome do Documento',
  'knowledgeFileUpload.uploadTime': 'Data de Envio',
  'knowledgeFileUpload.status': 'Status',
  'knowledgeFileUpload.operation': 'Operação',
  'knowledgeFileUpload.parse': 'Analisar',
  'knowledgeFileUpload.viewSlices': 'Ver Fatias',
  'knowledgeFileUpload.delete': 'Excluir',
  'knowledgeFileUpload.itemsPerPage': 'itens/página',
  'knowledgeFileUpload.uploadDocument': 'Enviar Documento',
  'knowledgeFileUpload.documentNamePlaceholder': 'Por favor, insira o nome do documento',
  'knowledgeFileUpload.file': 'Arquivo',
  'knowledgeFileUpload.clickToUpload': 'Clique para enviar',
  'knowledgeFileUpload.uploadTip': 'Tipos de arquivo suportados: PDF, DOC, DOCX, TXT, MD, CSV, XLS, XLSX, PPT, PPTX. Máximo de 32 arquivos por envio, cada arquivo com até 10MB',
  'knowledgeFileUpload.dragOrClick': 'Arraste o arquivo aqui ou clique para enviar',
  'knowledgeFileUpload.cancel': 'Cancelar',
  'knowledgeFileUpload.confirm': 'Confirmar',
  'knowledgeFileUpload.knowledgeBaseName': 'Nome da Base de Conhecimento',
  'knowledgeFileUpload.statusNotStarted': 'Não Iniciado',
  'knowledgeFileUpload.statusProcessing': 'Processando',
  'knowledgeFileUpload.statusCancelled': 'Cancelado',
  'knowledgeFileUpload.statusCompleted': 'Concluído',
  'knowledgeFileUpload.statusFailed': 'Falhou',
  'knowledgeFileUpload.uploadSuccess': 'Documento enviado com sucesso',
  'knowledgeFileUpload.uploadFailed': 'Falha no envio do documento',
  'knowledgeFileUpload.parseSuccess': 'Documento analisado com sucesso',
  'knowledgeFileUpload.parseFailed': 'Falha na análise do documento',
  'knowledgeFileUpload.deleteSuccess': 'Documento excluído com sucesso',
  'knowledgeFileUpload.deleteFailed': 'Falha ao excluir documento',
  'knowledgeFileUpload.confirmDelete': 'Tem certeza de que deseja excluir este documento?',
  'knowledgeFileUpload.confirmParse': 'Tem certeza de que deseja analisar este documento?',
  'knowledgeFileUpload.nameRequired': 'Por favor, insira o nome do documento',
  'knowledgeFileUpload.fileRequired': 'Por favor, selecione um arquivo para enviar',
  'knowledgeFileUpload.fileSizeExceeded': 'O tamanho do arquivo não pode exceder 10MB!',
  'knowledgeFileUpload.getListFailed': 'Falha ao obter lista de documentos',
  'knowledgeFileUpload.parseCancelled': 'Análise cancelada',
  'knowledgeFileUpload.deleteCancelled': 'Exclusão cancelada',
  'knowledgeFileUpload.selectFilesFirst': 'Por favor, selecione arquivos para excluir primeiro',
  'knowledgeFileUpload.selectAll': 'Selecionar Tudo',
  'knowledgeFileUpload.deselectAll': 'Desmarcar Tudo',
  'knowledgeFileUpload.batchDelete': 'Excluir',
  'knowledgeFileUpload.confirmBatchDelete': 'Tem certeza de que deseja excluir os {count} arquivos selecionados?',
  'knowledgeFileUpload.batchDeleteSuccess': '{count} arquivos excluídos com sucesso',
  'knowledgeFileUpload.batchDeleteFailed': 'Falha na exclusão em lote',
  'knowledgeFileUpload.sliceCount': 'Quantidade de Fatias',
  'knowledgeFileUpload.add': 'Adicionar',
  'knowledgeFileUpload.retrievalTest': 'Teste de Recuperação',
  'knowledgeFileUpload.executeTest': 'Executar Teste',
  'knowledgeFileUpload.selectedFiles': 'Arquivos Selecionados',
  'knowledgeFileUpload.totalSlices': 'Total de {total} registros',
  'knowledgeFileUpload.slice': 'Fatia',
  'knowledgeFileUpload.noSliceData': 'Não há dados de fatia disponíveis',
  'knowledgeFileUpload.firstPage': 'Primeira',
  'knowledgeFileUpload.prevPage': 'Anterior',
  'knowledgeFileUpload.nextPage': 'Próxima',
  'knowledgeFileUpload.totalRecords': 'Total de {total} registros',
  'knowledgeFileUpload.testQuestion': 'Pergunta de Teste',
  'knowledgeFileUpload.testQuestionPlaceholder': 'Por favor, insira a pergunta para testar',
  'knowledgeFileUpload.runTest': 'Executar Teste',
  'knowledgeFileUpload.testResult': 'Resultado do Teste:',
  'knowledgeFileUpload.noRelatedSlices': 'Nenhuma fatia relacionada encontrada',
  'knowledgeFileUpload.comprehensiveSimilarity': 'Similaridade Geral',
  'knowledgeFileUpload.content': 'Conteúdo:',
  'knowledgeFileUpload.testQuestionRequired': 'Por favor, insira a pergunta de teste',
  'knowledgeFileUpload.sourceDocument': 'Documento de origem',
  'knowledgeFileUpload.parsing': 'Analisando...',
  'knowledgeBaseDialog.descriptionRequired': 'Por favor, insira a descrição da base de conhecimento',
 
  // Página de gerenciamento de base de conhecimento
  'knowledgeBaseManagement.loading': 'Carregando...',
  'knowledgeBaseManagement.noData': 'Sem dados',
  'knowledgeBaseManagement.switchKnowledgeBase': 'Alternar Base de Conhecimento',
  'knowledgeBaseManagement.currentKnowledgeBaseDocuments': 'Ativos de Documentos da Base de Conhecimento Atual',
  'knowledgeBaseManagement.enabled': 'Ativado',
  'knowledgeBaseManagement.disabled': 'Desativado',
  'knowledgeBaseManagement.totalDocuments': 'Total de {total} documentos',
  'knowledgeBaseManagement.getListFailed': 'Falha ao obter lista',
 
  // Página de gerenciamento de funcionalidades
  'featureManagement.selectAll': 'Selecionar Tudo',
  'featureManagement.deselectAll': 'Desmarcar Tudo',
  'featureManagement.save': 'Salvar Configuração',
  'featureManagement.reset': 'Redefinir',
  'featureManagement.group.featureManagement': 'Ativar/Desativar a funcionalidade/seção',
  'featureManagement.group.voiceManagement': 'Visível para usuários durante a configuração do agente',
  'featureManagement.noFeatures': 'Nenhuma funcionalidade disponível',
  'featureManagement.contactAdmin': 'Por favor, entre em contato com o administrador para configurar funcionalidades',
  'featureManagement.saveSuccess': 'Configuração de funcionalidades salva com sucesso',
  'featureManagement.resetConfirm': 'Tem certeza de que deseja redefinir todas as configurações de funcionalidades?',
  'featureManagement.confirm': 'Confirmar',
  'featureManagement.cancel': 'Cancelar',
  'featureManagement.resetSuccess': 'Configuração de funcionalidades redefinida com sucesso',
  'featureManagement.noChanges': 'Nenhuma alteração para salvar',
  'featureManagement.saving': 'Salvando...',
  'featureManagement.groupName.featureManagement': 'Interruptor de Módulo de Funcionalidade',
  'featureManagement.groupName.voiceManagement': 'Configuração de Visibilidade do Agente',
  'featureManagement.groupDescription.featureManagement': 'Controlar o status de ativação dos módulos de funcionalidade principal',
  'featureManagement.groupDescription.voiceManagement': 'Configurar quais funcionalidades são visíveis e disponíveis para agentes (assistentes de IA)',
  'featureManagement.moduleCount': '{count} módulos no total',
 
  // Nomes e descrições de funcionalidades
  'feature.voiceprintRecognition.name': 'Reconhecimento de Impressão Vocal',
  'feature.voiceprintRecognition.description': 'Verificar a identidade do usuário através da tecnologia de reconhecimento de impressão vocal, proporcionando uma experiência segura de interação por voz',
  'feature.voiceClone.name': 'Clonagem de Voz',
  'feature.voiceClone.description': 'Clonar timbres de voz específicos usando tecnologia de IA para obter síntese de voz personalizada',
  'feature.knowledgeBase.name': 'Base de Conhecimento',
  'feature.knowledgeBase.description': 'Construir e gerenciar sistema de base de conhecimento para fornecer suporte de conhecimento profissional aos assistentes de IA',
  'feature.mcpAccessPoint.name': 'Ponto de Acesso MCP',
  'feature.mcpAccessPoint.description': 'Fornecer pontos de acesso do protocolo MCP para suportar integração de ferramentas e serviços externos',
  'feature.vad.name': 'Detecção de Atividade de Voz',
  'feature.vad.description': 'Detectar automaticamente atividade de voz para otimizar a eficiência de resposta da interação por voz',
  'feature.asr.name': 'Reconhecimento de Fala',
  'feature.asr.description': 'Converter fala em texto para habilitar a funcionalidade de interação por linguagem natural',
  'feature.addressBook.name': 'Lista de Contatos',
  'feature.addressBook.description': 'Gerenciar e manter lista de contatos para fornecer suporte de informações de contato para assistente de IA',
 
  // Página de Gerenciamento de Lista de Contatos
  'addressBookManagement.title': 'Gerenciamento de Lista de Contatos',
  'addressBookManagement.searchPlaceholder': 'Pesquisar nome do dispositivo ou endereço MAC',
  'addressBookManagement.selectAgent': 'Selecione um agente',
  'addressBookManagement.name': 'Nome da Lista de Contatos',
  'addressBookManagement.description': 'Descrição da Lista de Contatos',
  'addressBookManagement.contactCount': 'Número de Contatos',
  'addressBookManagement.createdAt': 'Data de Criação',
  'addressBookManagement.operation': 'Operação',
  'addressBookManagement.add': 'Adicionar',
  'addressBookManagement.edit': 'Editar',
  'addressBookManagement.delete': 'Excluir',
  'addressBookManagement.itemsPerPage': 'itens/página',
  'addressBookManagement.firstPage': 'Primeira',
  'addressBookManagement.prevPage': 'Anterior',
  'addressBookManagement.nextPage': 'Próxima',
  'addressBookManagement.totalRecords': '{total} registros no total',
  'addressBookManagement.addAddressBook': 'Adicionar Lista de Contatos',
  'addressBookManagement.editAddressBook': 'Editar Lista de Contatos',
  'addressBookManagement.getAddressBookListFailed': 'Falha ao obter lista de contatos',
  'addressBookManagement.selectAddressBookFirst': 'Selecione as listas de contatos para excluir primeiro',
  'addressBookManagement.confirmBatchDelete': 'Tem certeza de que deseja excluir {count} listas de contatos selecionadas?',
  'addressBookManagement.batchDeleteSuccess': '{count} listas de contatos excluídas com sucesso',
  'addressBookManagement.deleteFailed': 'Falha ao excluir, tente novamente',
  'addressBookManagement.operationCancelled': 'Operação de exclusão cancelada',
  'addressBookManagement.updateSuccess': 'Atualização bem-sucedida',
  'addressBookManagement.addSuccess': 'Adição bem-sucedida',
  'addressBookManagement.addFailed': 'Falha ao adicionar',
  'addressBookManagement.cancelSelectAll': 'Desmarcar Todos',
  'addressBookManagement.deviceName': 'Nome do Dispositivo',
  'addressBookManagement.deviceType': 'Tipo do Dispositivo',
  'addressBookManagement.deviceId': 'ID do Dispositivo',
  'addressBookManagement.remarks': 'Observações',
  'addressBookManagement.addressBookDetail': 'Detalhes da Lista de Contatos',
  'addressBookManagement.addressBookName': 'Nome da Lista de Contatos',
  'addressBookManagement.addressBookNamePlaceholder': 'Digite o nome da lista de contatos',
  'addressBookManagement.addressBookNameRequired': 'Digite o nome da lista de contatos',
  'addressBookManagement.addressBookNameLength': 'O nome da lista de contatos deve ter entre 1 e 50 caracteres',
  'addressBookManagement.addressBookDesc': 'Descrição da Lista de Contatos',
  'addressBookManagement.addressBookDescPlaceholder': 'Digite a descrição da lista de contatos',
  'addressBookManagement.remarksPlaceholder': 'Digite as observações',
  'addressBookManagement.selectDevice': 'Selecione um dispositivo para ver os detalhes da lista de contatos',
  'addressBookManagement.saveSuccess': 'Salvo com sucesso',
  'addressBookManagement.deviceNotSelected': 'Selecione um dispositivo primeiro',
  'addressBookManagement.addDeviceTip': 'Recurso de adicionar dispositivo em desenvolvimento',
  'addressBookManagement.selectAgentFirst': 'Selecione um agente primeiro',
 
  // Diálogo da Lista de Contatos
  'addressBookDialog.title': 'Lista de Contatos',
  'addressBookDialog.name': 'Nome da Lista de Contatos',
  'addressBookDialog.namePlaceholder': 'Digite o nome da lista de contatos',
  'addressBookDialog.description': 'Descrição da Lista de Contatos',
  'addressBookDialog.descriptionPlaceholder': 'Digite a descrição detalhada da lista de contatos',
  'addressBookDialog.status': 'Status',
  'addressBookDialog.save': 'Salvar',
  'addressBookDialog.cancel': 'Cancelar',
  'addressBookDialog.confirm': 'Confirmar',
  'addressBookDialog.nameRequired': 'Digite o nome da lista de contatos',
  'addressBookDialog.nameLength': 'O nome da lista de contatos deve ter entre 1 e 50 caracteres',
  'addressBookDialog.namePattern': 'O nome da lista de contatos pode conter apenas letras, números, espaços, sublinhados e hifens',
  'addressBookDialog.descriptionRequired': 'Digite a descrição da lista de contatos',
  'addressBookDialog.descriptionLength': 'A descrição da lista de contatos não pode exceder 300 caracteres',
 
  // Página de Gerenciamento de Lista de Contatos - Lista de Dispositivos
  'addressBookManagement.mainTitle': 'Gerenciamento de Lista de Contatos',
  'addressBookManagement.subTitle': 'Gerenciar lista de contatos do dispositivo, definir nomes e permissões de chamada',
  'addressBookManagement.online': 'Online',
  'addressBookManagement.offline': 'Offline',
  'addressBookManagement.macAddress': 'Endereço MAC',
  'addressBookManagement.status': 'Status',
  'addressBookManagement.deviceGroup': 'Agente Vinculado',
  'addressBookManagement.addTime': 'Hora de Adição',
  'addressBookManagement.lastOnline': 'Última Conexão',
  'addressBookManagement.deviceCallPermission': 'Permissão de Chamada do Dispositivo',
  'addressBookManagement.setPermissionDesc': 'Definir quais dispositivos o dispositivo atual pode chamar ({count} selecionados)',
  'addressBookManagement.selectAll': 'Selecionar Todos',
  'addressBookManagement.deselectAll': 'Desmarcar Todos',
  'addressBookManagement.save': 'Salvar Permissões',
 
  // Address Book Management page - operation messages
  'addressBookManagement.aliasSaved': 'Apelido salvo',
  'addressBookManagement.saveFailed': 'Falha ao salvar',
  'addressBookManagement.noChanges': 'Sem alterações',
  'addressBookManagement.permissionSaved': 'Permissão salva',
  'addressBookManagement.partialSaveFailed': 'Algumas permissões não puderam ser salvas',
  'addressBookManagement.agentNameUpdated': 'Nome do agente atualizado',
  'addressBookManagement.updateFailed': 'Falha na atualização',
 
  // Time format
  'addressBookManagement.justNow': 'Agora mesmo',
  'addressBookManagement.minutesAgo': 'há {minutes} minutos',
  'addressBookManagement.hoursAgo': 'há {hours} horas',
  'addressBookManagement.daysAgo': 'há {days} dias',
  'addressBookManagement.monthsAgo': 'há {months} meses',
  'addressBookManagement.yearsAgo': 'há {years} anos',
 
  // Header navigation
  'header.addressBook': 'Lista de Contatos',
 
}