feat: adicionar suporte a Português Brasileiro (pt_BR) no projeto

- Adiciona arquivo de tradução pt_BR.js para manager-web (~1332 chaves)
- Adiciona arquivo de tradução pt_BR.ts para manager-mobile (~440 chaves)
- Cria README_pt_BR.md com documentação traduzida completa
- Registra pt_BR no sistema i18n de ambos os frontends (web e mobile)
- Adiciona pt_BR nos seletores de idioma (HeaderBar, login, retrievePassword)
- Adiciona badge "Português (Brasil)" em todos os READMEs existentes
- Adiciona detecção automática de idioma pt/pt-BR no navegador
- Adiciona chave language.ptBR em todos os arquivos de tradução existentes

https://claude.ai/code/session_01XJMVWKBjy7UwqskN9BbsYM
This commit is contained in:
Claude
2026-02-19 17:44:25 +00:00
parent 8897b4f3c6
commit 63dfcf6659
18 changed files with 2185 additions and 2 deletions
+3
View File
@@ -8,6 +8,7 @@ import en from './en'
import zh_TW from './zh_TW'
import de from './de'
import vi from './vi'
import pt_BR from './pt_BR'
// 语言包映射
const messages = {
@@ -16,6 +17,7 @@ const messages = {
zh_TW: zh_TW,
de,
vi,
pt_BR: pt_BR,
}
// 当前使用的语言
@@ -72,5 +74,6 @@ export function getSupportedLanguages(): { code: Language, name: string }[] {
{ code: 'zh_TW', name: '繁體中文' },
{ code: 'de', name: 'Deutsch' },
{ code: 'vi', name: 'Tiếng Việt' },
{ code: 'pt_BR', name: 'Português (Brasil)' },
]
}
+440
View File
@@ -0,0 +1,440 @@
// Pacote de idioma Português Brasileiro
export default {
// TabBar
'tabBar.home': 'Início',
'tabBar.deviceConfig': 'Config. de Rede',
'tabBar.settings': 'Sistema',
// Settings page title
'settings.title': 'Configurações',
// Login page
'login.pageTitle': 'Entrar',
'login.navigationTitle': 'Entrar',
'login.fetchConfigError': 'Falha ao buscar configuração:',
'login.selectLanguage': 'Selecionar Idioma',
'login.selectLanguageTip': '中文',
'login.welcomeBack': 'Bem-vindo de Volta',
'login.pleaseLogin': 'Por favor, entre na sua conta',
'login.enterUsername': 'Por favor, insira o nome de usuário',
'login.enterPassword': 'Por favor, insira a senha',
'login.enterCaptcha': 'Por favor, insira o código de verificação',
'login.loginButton': 'Entrar',
'login.loggingIn': 'Entrando...',
'login.noAccount': 'Cadastrar',
'login.enterPhone': 'Por favor, insira o número de telefone',
'login.selectCountry': 'Selecionar País/Região',
'login.confirm': 'Confirmar',
'login.serverSetting': 'Configurações do Servidor',
'login.requiredUsername': 'O nome de usuário não pode estar vazio',
'login.requiredPassword': 'A senha não pode estar vazia',
'login.requiredCaptcha': 'O código de verificação não pode estar vazio',
'login.requiredMobile': 'Por favor, insira um número de telefone válido',
'login.captchaError': 'Erro no código de verificação gráfico',
'login.forgotPassword': 'Esqueceu a Senha',
// Register page
'register.pageTitle': 'Cadastro',
'register.createAccount': 'Criar Conta',
'register.enterUsername': 'Por favor, insira o nome de usuário',
'register.enterPassword': 'Por favor, insira a senha',
'register.confirmPassword': 'Por favor, confirme a senha',
'register.enterPhone': 'Por favor, insira o número de telefone',
'register.enterCode': 'Por favor, insira o código de verificação',
'register.getCode': 'Obter Código',
'register.agreeTerms': 'Li e concordo com os',
'register.terms': 'Termos de Uso',
'register.privacy': 'Política de Privacidade',
'register.registerButton': 'Cadastrar',
'register.registering': 'Cadastrando...',
'register.haveAccount': 'Já tem uma conta?',
'register.loginNow': 'Entrar Agora',
'register.selectCountry': 'Selecionar País/Região',
'register.confirm': 'Confirmar',
'register.captchaSendSuccess': 'Código de verificação enviado com sucesso',
// Home page
'home.pageTitle': 'Início',
'home.createAgent': 'Criar Agente',
'home.agentName': 'Agente',
'home.modelInfo': 'Info do Modelo',
'home.lastActive': 'Última Atividade',
'home.greeting': 'Olá Jarvis',
'home.subtitle': 'Vamos ter',
'home.wonderfulDay': 'um dia maravilhoso!',
'home.emptyState': 'Nenhum agente disponível',
'home.deviceManagement': 'Gerenciamento de Dispositivos',
'home.lastConversation': 'Última Conversa:',
'home.delete': 'Excluir',
'home.createFirstAgent': 'Clique no botão + no canto inferior direito para criar seu primeiro agente',
'home.dialogTitle': 'Criar Agente',
'home.inputPlaceholder': 'ex: Assistente de Atendimento, Assistente de Voz, Perguntas e Respostas',
'home.createError': 'Por favor, insira o nome do agente',
'home.createNow': 'Criar Agora',
'home.justNow': 'Agora mesmo',
'home.minutesAgo': 'minutos atrás',
'home.hoursAgo': 'horas atrás',
'home.daysAgo': 'dias atrás',
// Agent page
'agent.pageTitle': 'Agente',
'agent.roleConfig': 'Configuração de Papel',
'agent.deviceManagement': 'Gerenciamento de Dispositivos',
'agent.chatHistory': 'Histórico de Conversas',
'agent.voiceprintManagement': 'Gerenciamento de Impressão Vocal',
'agent.editTitle': 'Editar Agente',
'agent.toolsTitle': 'Editar Funcionalidades',
'agent.voiceActivityDetection': 'Detecção de Atividade de Voz',
'agent.speechRecognition': 'Reconhecimento de Fala',
'agent.largeLanguageModel': 'Modelo de Linguagem Grande',
'agent.save': 'Salvar',
'agent.cancel': 'Cancelar',
// Agent Edit Page
'agent.basicInfo': 'Informações Básicas',
'agent.agentName': 'Nome do Agente',
'agent.inputAgentName': 'Por favor, insira o nome do agente',
'agent.roleMode': 'Modo de Papel',
'agent.roleDescription': 'Descrição do Papel',
'agent.inputRoleDescription': 'Por favor, insira a descrição do papel',
'agent.modelConfig': 'Configuração do Modelo',
'agent.vad': 'Detecção de Atividade de Voz',
'agent.asr': 'Reconhecimento de Fala',
'agent.llm': 'Modelo de Linguagem Grande',
'agent.vllm': 'Modelo de Linguagem Visual',
'agent.intent': 'Reconhecimento de Intenção',
'agent.memory': 'Memória',
'agent.voiceSettings': 'Configurações de Voz',
'agent.tts': 'Texto para Fala',
'agent.voiceprint': 'Voz do Agente',
'agent.plugins': 'Plugins',
'agent.editFunctions': 'Editar Funções',
'agent.historyMemory': 'Memória de Histórico',
'agent.memoryContent': 'Conteúdo da memória',
'agent.saving': 'Salvando...',
'agent.saveSuccess': 'Salvo com sucesso',
'agent.saveFail': 'Falha ao salvar',
'agent.loadFail': 'Falha ao carregar',
'agent.pleaseInputAgentName': 'Por favor, insira o nome do agente',
'agent.pleaseInputRoleDescription': 'Por favor, insira a descrição do papel',
'agent.pleaseSelect': 'Por favor, selecione',
// Chat History Page
'chatHistory.getChatSessions': 'Obter lista de sessões de conversa',
'chatHistory.noSelectedAgent': 'Nenhum agente selecionado',
'chatHistory.getChatSessionsFailed': 'Falha ao obter lista de sessões de conversa:',
'chatHistory.unknownTime': 'Hora desconhecida',
'chatHistory.justNow': 'Agora mesmo',
'chatHistory.minutesAgo': '{minutes} minutos atrás',
'chatHistory.hoursAgo': '{hours} horas atrás',
'chatHistory.daysAgo': '{days} dias atrás',
'chatHistory.conversationRecord': 'Registro de Conversas',
'chatHistory.totalChats': '{count} conversas no total',
'chatHistory.loading': 'Carregando...',
'chatHistory.noMoreData': 'Não há mais dados',
'chatHistory.noChatRecords': 'Nenhum registro de conversa',
'chatRecordsDescription': 'Os registros de conversas com agentes serão exibidos aqui',
// Chat History Detail Page
'chatHistory.pageTitle': 'Detalhe da Conversa',
'chatHistory.assistantName': 'Assistente Inteligente',
'chatHistory.userName': 'Usuário',
'chatHistory.aiAssistantName': 'Assistente IA',
'chatHistory.loadFailed': 'Falha ao carregar histórico de conversas',
'chatHistory.parameterError': 'Erro de parâmetro da página',
'chatHistory.invalidAudioId': 'ID de áudio inválido',
'chatHistory.audioPlayFailed': 'Falha na reprodução de áudio',
'chatHistory.playAudioFailed': 'Falha ao reproduzir áudio',
// Device management page
'device.pageTitle': 'Gerenciamento de Dispositivos',
'device.noDevices': 'Nenhum dispositivo disponível',
'device.macAddress': 'Endereço MAC',
'device.firmwareVersion': 'Versão do Firmware',
'device.lastConnected': 'Última Conversa',
'device.otaUpdate': 'Atualização OTA',
'device.unbind': 'Desvincular',
'device.confirmUnbind': 'Confirmar',
'device.bindDevice': 'Vincular Novo Dispositivo',
'device.deviceType': 'Tipo de Dispositivo',
'device.loading': 'Carregando...',
'device.neverConnected': 'Nunca conectado',
'device.justNow': 'Agora mesmo',
'device.minutesAgo': '{minutes} minutos atrás',
'device.hoursAgo': '{hours} horas atrás',
'device.daysAgo': '{days} dias atrás',
'device.otaAutoUpdateEnabled': 'Atualização automática OTA ativada',
'device.otaAutoUpdateDisabled': 'Atualização automática OTA desativada',
'device.operationFailed': 'Operação falhou, por favor tente novamente',
'device.deviceUnbound': 'Dispositivo desvinculado',
'device.unbindFailed': 'Falha ao desvincular, por favor tente novamente',
'device.unbindDevice': 'Desvincular Dispositivo',
'device.confirmUnbindDevice': 'Tem certeza que deseja desvincular o dispositivo "{macAddress}"?',
'device.cancel': 'Cancelar',
'device.noDevice': 'Nenhum Dispositivo',
'device.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
'device.deviceBindSuccess': 'Dispositivo vinculado com sucesso!',
'device.bindFailed': 'Falha ao vincular, por favor verifique se o código de verificação está correto',
'device.enterDeviceCode': 'Por favor, insira o código de verificação do dispositivo',
'device.bindNow': 'Vincular Agora',
'device.lastConnection': 'Última Conexão',
'device.clickToBindFirstDevice': 'Clique no botão + no canto inferior direito para vincular seu primeiro dispositivo',
// Common
'common.success': 'Sucesso',
'common.fail': 'Falhou',
'common.loading': 'Carregando...',
'common.confirm': 'Confirmar',
'common.cancel': 'Cancelar',
'common.delete': 'Excluir',
'common.edit': 'Editar',
'common.add': 'Adicionar',
'common.pleaseSelect': 'Por favor, selecione',
'common.unknownError': 'Erro desconhecido',
'common.networkError': 'Erro de rede',
// Retrieve Password page
'retrievePassword.title': 'Redefinir Senha',
'retrievePassword.subtitle': 'Recupere a senha da sua conta pelo número de celular',
'retrievePassword.mobileRequired': 'Por favor, insira o número de celular',
'retrievePassword.inputCorrectMobile': 'Por favor, insira um número de celular válido',
'retrievePassword.captchaRequired': 'Por favor, insira o código de verificação gráfico',
'retrievePassword.mobileCaptchaRequired': 'Por favor, insira o código de verificação por SMS',
'retrievePassword.newPasswordRequired': 'Por favor, insira a nova senha',
'retrievePassword.confirmNewPasswordRequired': 'Por favor, confirme a nova senha',
'retrievePassword.passwordsNotMatch': 'As senhas não coincidem',
'retrievePassword.mobilePlaceholder': 'Por favor, insira o número de celular',
'retrievePassword.captchaPlaceholder': 'Por favor, insira o código de verificação gráfico',
'retrievePassword.mobileCaptchaPlaceholder': 'Por favor, insira o código de verificação por SMS',
'retrievePassword.newPasswordPlaceholder': 'Por favor, insira a nova senha',
'retrievePassword.confirmNewPasswordPlaceholder': 'Por favor, confirme a nova senha',
'retrievePassword.getMobileCaptcha': 'Obter Código',
'retrievePassword.captchaSendSuccess': 'Código de verificação enviado com sucesso',
'retrievePassword.passwordUpdateSuccess': 'Senha redefinida com sucesso',
'retrievePassword.resetButton': 'Redefinir Senha',
'retrievePassword.goToLogin': 'Voltar ao Login',
// SM2 encryption related error messages
'sm2.publicKeyNotConfigured': 'Chave pública SM2 não configurada, por favor entre em contato com o administrador',
'sm2.encryptionFailed': 'Falha na criptografia da senha',
'sm2.keyGenerationFailed': 'Falha na geração do par de chaves',
'sm2.invalidPublicKey': 'Formato de chave pública inválido',
'sm2.encryptionError': 'Ocorreu um erro durante a criptografia',
'sm2.publicKeyRetry': 'Tentando obter a chave pública novamente...',
'sm2.publicKeyRetryFailed': 'Falha na nova tentativa de obter a chave pública',
// Voiceprint page
'voiceprint.noSelectedAgent': 'Nenhum agente selecionado',
'voiceprint.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
'voiceprint.fetchHistoryFailed': 'Falha ao buscar histórico de conversas',
'voiceprint.clickToSelectVector': 'Clique para selecionar vetor de impressão vocal',
'voiceprint.pleaseInputName': 'Por favor, insira o nome',
'voiceprint.pleaseSelectVector': 'Por favor, selecione o vetor de impressão vocal',
'voiceprint.addSuccess': 'Adicionado com sucesso',
'voiceprint.addFailed': 'Falha ao adicionar locutor',
'voiceprint.editSuccess': 'Editado com sucesso',
'voiceprint.editFailed': 'Falha ao editar locutor',
'voiceprint.deleteConfirmMsg': 'Tem certeza que deseja excluir este locutor?',
'voiceprint.deleteConfirmTitle': 'Confirmar Exclusão',
'voiceprint.deleteSuccess': 'Excluído com sucesso',
'voiceprint.loading': 'Carregando...',
'voiceprint.delete': 'Excluir',
'voiceprint.emptyTitle': 'Nenhum dado de impressão vocal',
'voiceprint.emptyDesc': 'Clique no botão + no canto inferior direito para adicionar seu primeiro locutor',
'voiceprint.addSpeaker': 'Adicionar Locutor',
'voiceprint.voiceVector': 'Vetor de Impressão Vocal',
'voiceprint.name': 'Nome',
'voiceprint.description': 'Descrição',
'voiceprint.pleaseInputDescription': 'Por favor, insira a descrição',
'voiceprint.cancel': 'Cancelar',
'voiceprint.save': 'Salvar',
'voiceprint.editSpeaker': 'Editar Locutor',
'voiceprint.selectVector': 'Selecionar Vetor de Impressão Vocal',
'voiceprint.voiceprintInterfaceNotConfigured': 'Interface de impressão vocal não configurada',
// Settings page
'settings.pageTitle': 'Configurações',
'settings.navigationTitle': 'Configurações',
'settings.networkSettings': 'Configurações de Rede',
'settings.serverApiUrl': 'URL da API do Servidor',
'settings.validServerUrl': 'Por favor, insira um endereço de servidor válido (começando com http ou https e terminando com /xiaozhi)',
'settings.saveSettings': 'Salvar Configurações',
'settings.resetDefault': 'Restaurar Padrão',
'settings.restartApp': 'Reiniciar App',
'settings.restartNow': 'Reiniciar Agora',
'settings.restartLater': 'Depois',
// About us
'settings.aboutApp': 'Sobre o Console XiaoZhi',
'settings.aboutContent': 'Console XiaoZhi\n\nUm aplicativo móvel de gerenciamento multiplataforma construído com Vue.js 3 + uni-app, oferecendo gerenciamento de dispositivos, configuração de agentes e outras funcionalidades para o hardware inteligente xiaozhi ESP32.\n\n© 2025 xiaozhi-esp32-server {version}',
'settings.restartSuccess': 'Salvo, você pode reiniciar o app manualmente depois',
'settings.serverUrlSavedAndCacheCleared': 'URL do servidor salva e cache limpo',
'settings.resetToDefaultAndCacheCleared': 'Restaurado ao padrão e cache limpo',
'settings.resetSuccess': 'Restauração bem-sucedida',
'settings.enterServerUrl': 'Por favor, insira a URL do servidor',
'settings.clearCacheFailed': 'Falha ao limpar o cache',
'settings.cacheManagement': 'Gerenciamento de Cache',
'settings.totalCacheSize': 'Tamanho Total do Cache',
'settings.appDataSize': 'Tamanho Total dos Dados do App',
'settings.cacheClear': 'Limpar Cache',
'settings.clearAllCache': 'Limpar todos os dados de cache',
'settings.clearCache': 'Limpar Cache',
'settings.modifyWillClearCache': 'Modificações irão limpar o cache',
'settings.appInfo': 'Informações do App',
'settings.aboutUs': 'Sobre Nós',
'settings.appVersion': 'Versão do App e Info da Equipe',
'settings.confirmClear': 'Confirmar Limpeza',
'settings.confirmClearMessage': 'Tem certeza que deseja limpar todo o cache? Isso excluirá todos os dados, incluindo o status de login, e exigirá novo login.',
'settings.cacheCleared': 'Cache limpo com sucesso, redirecionando para a página de login',
'settings.languageSettings': 'Configurações de Idioma',
'settings.language': 'Idioma',
'settings.selectLanguage': 'Selecionar Idioma',
'settings.languageChanged': 'Idioma alterado com sucesso',
// Messages
'message.loginSuccess': 'Login realizado com sucesso!',
'message.loginFail': 'Falha no login',
'message.registerSuccess': 'Cadastro realizado com sucesso',
'message.registerFail': 'Falha no cadastro',
'message.saveSuccess': 'Salvo com sucesso',
'message.saveFail': 'Falha ao salvar',
'message.deleteSuccess': 'Excluído com sucesso',
'message.deleteFail': 'Falha ao excluir',
'message.bindSuccess': 'Vinculação realizada com sucesso',
'message.bindFail': 'Falha na vinculação',
'message.unbindSuccess': 'Desvinculação realizada com sucesso',
'message.unbindFail': 'Falha na desvinculação',
'message.networkError': 'Erro de rede, por favor verifique sua conexão',
'message.serverError': 'Erro no servidor, por favor tente novamente mais tarde',
'message.invalidAddress': 'Endereço inválido, por favor verifique se o servidor está iniciado ou se a conexão de rede está normal',
'message.languageChanged': 'Idioma alterado',
'message.passwordError': 'Conta ou senha incorretos',
'message.phoneRegistered': 'Este número de telefone já está cadastrado',
// Agent Tools Page
'agent.tools.pageTitle': 'Ferramentas do Agente',
'agent.tools.unselected': 'Não selecionado',
'agent.tools.selected': 'Selecionado',
'agent.tools.noMorePlugins': 'Não há mais plugins',
'agent.tools.pleaseSelectPlugin': 'Por favor, selecione a função do plugin',
'agent.tools.builtInPlugins': 'Plugins Integrados',
'agent.tools.mcpAccessPoint': 'Ponto de Acesso MCP',
'agent.tools.copy': 'Copiar',
'agent.tools.noTools': 'Nenhuma ferramenta disponível',
'agent.tools.parameterConfig': 'Configuração de Parâmetros',
'agent.tools.noParamsNeeded': 'Nenhum parâmetro necessário',
'agent.tools.pleaseInput': 'Por favor, insira',
'agent.tools.inputOneItemPerLine': 'Insira um item por linha',
'agent.tools.pleaseInputValidJson': 'Por favor, insira um formato JSON válido',
'agent.tools.enableFunction': 'Ativar Função',
'agent.tools.toggleFunction': 'Ativar ou desativar esta função',
'agent.tools.jsonFormatError': 'Erro no formato JSON',
'agent.tools.noMcpAddressToCopy': 'Nenhum endereço MCP para copiar',
'agent.tools.mcpAddressCopied': 'Endereço MCP copiado para a área de transferência',
'agent.tools.copyFailed': 'Falha ao copiar, por favor tente novamente',
'agent.tools.defaultValue': 'Valor padrão',
'agent.tools.notSelected': 'Não selecionado',
'agent.tools.clickToConfigure': 'Clique para configurar',
'agent.tools.mcpEndpoint': 'Endpoint MCP',
'agent.tools.eachLineOneItem': 'Insira um item por linha',
// Device Config page
'deviceConfig.pageTitle': 'Configuração do Dispositivo',
'deviceConfig.wifiConfig': 'Configuração WiFi',
'deviceConfig.ultrasonicConfig': 'Configuração Ultrassônica',
'deviceConfig.selectConfigMethod': 'Selecionar Método de Configuração',
'deviceConfig.networkConfig': 'Configuração de Rede',
'deviceConfig.selectedNetwork': 'Rede Selecionada',
'deviceConfig.signal': 'Sinal',
'deviceConfig.openNetwork': 'Rede Aberta',
'deviceConfig.encryptedNetwork': 'Rede Criptografada',
'deviceConfig.password': 'Senha',
'deviceConfig.pleaseEnterPassword': 'Por favor, insira a senha do WiFi',
'deviceConfig.startConfig': 'Iniciar Configuração',
'deviceConfig.connectToXiaozhiHotspot': 'Por favor, conecte-se ao hotspot xiaozhi primeiro',
'deviceConfig.detecting': 'Detectando...',
'deviceConfig.reDetect': 'Detectar Novamente',
'deviceConfig.alreadyConnected': 'Conectado ao hotspot xiaozhi',
'deviceConfig.refreshStatus': 'Atualizar Status',
'deviceConfig.wifiNetworks': 'Redes WiFi',
'deviceConfig.selectWifiNetwork': 'Selecionar Rede WiFi',
'deviceConfig.refreshScan': 'Atualizar Busca',
'deviceConfig.noWifiNetworks': 'Nenhuma rede WiFi disponível',
'deviceConfig.clickToRefreshScan': 'Por favor, clique em Atualizar Busca',
'deviceConfig.signalStrong': 'Sinal Forte',
'deviceConfig.signalGood': 'Sinal Bom',
'deviceConfig.signalFair': 'Sinal Regular',
'deviceConfig.signalWeak': 'Sinal Fraco',
'deviceConfig.channel': 'Canal',
'deviceConfig.about': 'aproximadamente',
'deviceConfig.seconds': 'segundos',
'deviceConfig.generating': 'Gerando...',
'deviceConfig.playing': 'Reproduzindo...',
'deviceConfig.generateAndPlaySoundWave': 'Gerar e Reproduzir Onda Sonora',
'deviceConfig.playSoundWave': 'Reproduzir Onda Sonora',
'deviceConfig.stopPlaying': 'Parar Reprodução',
'deviceConfig.autoLoopPlaySoundWave': 'Reproduzir Onda Sonora em Loop Automático',
'deviceConfig.configAudioFile': 'Arquivo de Áudio de Configuração',
'deviceConfig.duration': 'Duração',
'deviceConfig.ultrasonicConfigInstructions': 'Instruções de Configuração Ultrassônica',
'deviceConfig.ensureWifiNetworkSelectedAndPasswordEntered': 'Certifique-se de que a rede WiFi foi selecionada e a senha foi inserida',
'deviceConfig.clickGenerateAndPlaySoundWave': 'Clique em Gerar e Reproduzir Onda Sonora, o sistema codificará as informações de configuração em áudio',
'deviceConfig.bringPhoneCloseToXiaozhiDevice': 'Aproxime o celular do dispositivo xiaozhi (distância de 1-2 metros)',
'deviceConfig.duringAudioPlaybackXiaozhiWillReceive': 'Durante a reprodução do áudio, o xiaozhi receberá e decodificará as informações de configuração',
'deviceConfig.afterConfigSuccessDeviceWillConnect': 'Após a configuração bem-sucedida, o dispositivo se conectará automaticamente à rede WiFi',
'deviceConfig.usesAfskModulation': 'Utiliza tecnologia de modulação AFSK, transmitindo dados pelas frequências de 1800Hz e 1500Hz',
'deviceConfig.ensureModeratePhoneVolume': 'Por favor, certifique-se de que o volume do celular está moderado para evitar interferência de ruídos ambientais',
'deviceConfig.generatingUltrasonicConfigAudio': 'Gerando áudio de configuração ultrassônica',
'deviceConfig.configData': 'Dados de configuração',
'deviceConfig.dataBytesLength': 'Comprimento dos bytes de dados',
'deviceConfig.bitStreamLength': 'Comprimento do fluxo de bits',
'deviceConfig.base64Length': 'Comprimento Base64',
'deviceConfig.audioFileTooLarge': 'Arquivo de áudio muito grande, por favor reduza o tamanho do SSID ou da senha',
'deviceConfig.audioGenerationSuccess': 'Áudio gerado com sucesso',
'deviceConfig.samplePoints': 'Pontos de amostra',
'deviceConfig.soundWaveGenerationSuccess': 'Onda sonora gerada com sucesso',
'deviceConfig.audioGenerationFailed': 'Falha na geração do áudio',
'deviceConfig.soundWaveGenerationFailed': 'Falha na geração da onda sonora',
'deviceConfig.pleaseGenerateAudioFirst': 'Por favor, gere o áudio primeiro',
'deviceConfig.startPlayingUltrasonicConfigAudio': 'Iniciando reprodução do áudio de configuração ultrassônica',
'deviceConfig.ultrasonicAudioStartedPlaying': 'Reprodução do áudio ultrassônico iniciada',
'deviceConfig.startPlayingConfigSoundWave': 'Reprodução da onda sonora de configuração iniciada',
'deviceConfig.ultrasonicAudioPlaybackEnded': 'Reprodução do áudio ultrassônico finalizada',
'deviceConfig.audioPlaybackFailed': 'Falha na reprodução do áudio',
'deviceConfig.audioResourceBusy': 'Recurso de áudio ocupado, por favor tente novamente mais tarde',
'deviceConfig.audioFormatNotSupported': 'Formato de áudio não suportado, pode ser um problema de URI de dados',
'deviceConfig.audioFileError': 'Erro no arquivo de áudio',
'deviceConfig.cleaningUpAudioContext': 'Limpando contexto de áudio',
'deviceConfig.cleaningUpAudioContextFailed': 'Falha ao limpar contexto de áudio',
'deviceConfig.stoppedPlayingUltrasonicAudio': 'Reprodução do áudio ultrassônico interrompida',
'deviceConfig.stoppedPlaying': 'Reprodução interrompida',
'deviceConfig.configMethod': 'Método de Configuração',
'deviceConfig.enterWifiPassword': 'Por favor, insira a senha do WiFi',
'deviceConfig.xiaozhi': 'xiaozhi',
'deviceConfig.connectXiaozhiHotspot': 'Por favor, conecte-se ao hotspot xiaozhi',
'deviceConfig.wifiScanResponse': 'Resposta da busca WiFi',
'deviceConfig.scanSuccess': 'Busca bem-sucedida',
'deviceConfig.networks': 'redes',
'deviceConfig.wifiScanFailed': 'Falha na busca WiFi',
'deviceConfig.scanFailedCheckConnection': 'Falha na busca, por favor verifique a conexão',
'deviceConfig.checking': 'Verificando',
'deviceConfig.reCheck': 'Verificar Novamente',
'deviceConfig.connectedXiaozhiHotspot': 'Conectado ao hotspot xiaozhi',
'deviceConfig.wifiNetwork': 'Rede WiFi',
'deviceConfig.scanning': 'Buscando',
'deviceConfig.cancel': 'Cancelar',
'deviceConfig.clickRefreshScan': 'Por favor, clique em Atualizar Busca',
'deviceConfig.esp32ConnectionCheckFailed': 'Falha na verificação de conexão ESP32',
'deviceConfig.startWifiConfig': 'Iniciando configuração WiFi',
'deviceConfig.configSuccess': 'Configuração bem-sucedida',
'deviceConfig.deviceWillConnectTo': 'O dispositivo se conectará a',
'deviceConfig.deviceWillRestart': 'O dispositivo será reiniciado',
'deviceConfig.pleaseDisconnectXiaozhiHotspot': 'Por favor, desconecte-se do hotspot xiaozhi',
'deviceConfig.configFailed': 'Falha na configuração',
'deviceConfig.wifiConfigFailed': 'Falha na configuração WiFi',
'deviceConfig.pleaseCheckNetworkConnection': 'Por favor, verifique a conexão de rede',
'deviceConfig.startWifiConfigButton': 'Iniciar Configuração',
'deviceConfig.wifiConfigInstructions': 'Instruções de Configuração WiFi',
'deviceConfig.phoneConnectXiaozhiHotspot': 'Conecte o celular ao hotspot xiaozhi',
'deviceConfig.selectTargetWifiNetwork': 'Selecione a rede WiFi de destino',
'deviceConfig.enterWifiPasswordIfNeeded': 'Insira a senha do WiFi se necessário',
'deviceConfig.clickStartConfigAndWait': 'Clique em Iniciar Configuração e aguarde',
'deviceConfig.afterConfigSuccessDeviceWillRestart': 'Após a configuração bem-sucedida, o dispositivo reiniciará automaticamente',
'deviceConfig.audioPlaybackError': 'Erro na reprodução de áudio',
'deviceConfig.playbackFailed': 'Falha na reprodução',
}
+1 -1
View File
@@ -2,7 +2,7 @@ import { ref } from 'vue'
import { defineStore } from 'pinia'
// 支持的语言类型
export type Language = 'zh_CN' | 'en' | 'zh_TW' | 'de' | 'vi'
export type Language = 'zh_CN' | 'en' | 'zh_TW' | 'de' | 'vi' | 'pt_BR'
export interface LangStore {
currentLang: Language