Files
xiaozhi-esp32-server/main/manager-web/src/i18n/pt_BR.js
T

1526 lines
90 KiB
JavaScript

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.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.remark': 'Observação',
'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.remarkTooLong': 'A observação não pode exceder 64 caracteres',
'device.remarkSaved': 'Observação salva com sucesso',
'device.remarkSaveFailed': 'Falha ao salvar observação',
'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.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.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',
// 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.confirmDeleteAgent': 'Tem certeza de que deseja excluir este agente?',
'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.remark': 'Observação',
'paramManagement.operation': 'Operação',
'paramManagement.hide': 'Ocultar',
'paramManagement.view': 'Visualizar',
'paramManagement.deselectAll': 'Desmarcar Tudo',
'paramManagement.selectAll': 'Selecionar Tudo',
'paramManagement.add': 'Adicionar',
'paramManagement.delete': 'Excluir',
'paramManagement.edit': 'Editar',
'paramManagement.itemsPerPage': 'itens/página',
'paramManagement.firstPage': 'Primeira Página',
'paramManagement.prevPage': 'Página Anterior',
'paramManagement.nextPage': 'Próxima Página',
'paramManagement.totalRecords': 'Total de {total} registros',
'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.reset': 'Redefinir',
'roleConfig.agentName': 'Apelido',
'roleConfig.roleTemplate': 'Modelo',
'roleConfig.roleIntroduction': 'Introdução',
'roleConfig.languageCode': 'Código do Idioma',
'roleConfig.interactionLanguage': 'Idioma de Interação',
'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',
'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': 'Clonado com sucesso',
'voiceClone.cloneFailed': 'Falha ao clonar',
'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.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.firstPage': 'Primeira Página',
'knowledgeFileUpload.prevPage': 'Página Anterior',
'knowledgeFileUpload.nextPage': 'Próxima Página',
'knowledgeFileUpload.totalRecords': 'Total de {total} registros',
'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.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.testQuestion': 'Pergunta de Teste',
'knowledgeFileUpload.testQuestionPlaceholder': 'Por favor, insira a pergunta para testar',
'knowledgeFileUpload.executeTest': 'Executar Teste',
'knowledgeFileUpload.testResult': 'Resultado do 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',
'knowledgeBaseDialog.descriptionRequired': 'Por favor, insira a descrição da base de conhecimento',
// 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',
// 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.search': 'Pesquisar',
'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.status': 'Ativo',
'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.updateFailed': 'Falha na atualização',
'addressBookManagement.addFailed': 'Falha ao adicionar',
'addressBookManagement.selectAll': 'Selecionar Todos',
'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.save': 'Salvar',
'addressBookManagement.saveSuccess': 'Salvo com sucesso',
'addressBookManagement.saveFailed': 'Falha ao salvar',
'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',
}