Merge pull request #2969 from xinnan-tech/i18n-pt_BR

I18n pt br
This commit is contained in:
欣南科技
2026-02-24 08:05:45 +08:00
committed by GitHub
19 changed files with 2200 additions and 19 deletions
+1
View File
@@ -21,6 +21,7 @@
<a href="./README_en.md"><img alt="README in English" src="https://img.shields.io/badge/English-DFE0E5"></a>
<a href="./README_vi.md"><img alt="Tiếng Việt" src="https://img.shields.io/badge/Tiếng Việt-DFE0E5"></a>
<a href="./README_de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-DFE0E5"></a>
<a href="./README_pt_BR.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-DFE0E5"></a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">
<img alt="GitHub Contributors" src="https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker" />
</a>
+2 -1
View File
@@ -21,6 +21,7 @@ Unterstützt MQTT+UDP-Protokoll, Websocket-Protokoll, MCP-Endpunkte und Stimmabd
<a href="./README_en.md"><img alt="README in English" src="https://img.shields.io/badge/English-DFE0E5"></a>
<a href="./README_vi.md"><img alt="Tiếng Việt" src="https://img.shields.io/badge/Tiếng Việt-DFE0E5"></a>
<a href="./README_de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-DBEDFA"></a>
<a href="./README_pt_BR.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-DFE0E5"></a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">
<img alt="GitHub Contributors" src="https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker" />
</a>
@@ -258,7 +259,7 @@ Wenn Sie ein Softwareentwickler sind, finden Sie hier einen [Offenen Brief an En
---
## Produktökosystem 👬
Xiaozhi ist ein Ökosystem. Wenn Sie dieses Produkt verwenden, können Sie sich auch andere [hervorragende Projekte](https://github.com/78/xiaozhi-esp32?tab=readme-ov-file#related-open-source-projects) in diesem Ökosystem ansehen
Xiaozhi ist ein Ökosystem. Wenn Sie dieses Produkt verwenden, können Sie sich auch andere [hervorragende Projekte](https://github.com/78/xiaozhi-esp32/blob/main/README_zh.md#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE) in diesem Ökosystem ansehen
---
+14 -14
View File
@@ -21,6 +21,7 @@ Support for MQTT+UDP protocol, Websocket protocol, MCP access point, voiceprint
<a href="./README_en.md"><img alt="README in English" src="https://img.shields.io/badge/English-DBEDFA"></a>
<a href="./README_vi.md"><img alt="Tiếng Việt" src="https://img.shields.io/badge/Tiếng Việt-DFE0E5"></a>
<a href="./README_de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-DFE0E5"></a>
<a href="./README_pt_BR.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-DFE0E5"></a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">
<img alt="GitHub Contributors" src="https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker" />
</a>
@@ -182,8 +183,9 @@ This project provides two deployment methods. Please choose based on your specif
| Deployment Method | Features | Applicable Scenarios | Deployment Docs | Configuration Requirements | Video Tutorials |
|---------|------|---------|---------|---------|---------|
| **Simplified Installation** | Intelligent dialogue, single agent management | Low-configuration environments, data stored in config files, no database required | [①Docker Version](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E5%8F%AA%E8%BF%90%E8%A1%8Cserver) / [②Source Code Deployment](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E5%8F%AA%E8%BF%90%E8%A1%8Cserver)| 2 cores 4GB if using `FunASR`, 2 cores 2GB if all APIs | - |
| **Full Module Installation** | Intelligent dialogue, multi-user management, multi-agent management, intelligent console interface operation | Complete functionality experience, data stored in database |[①Docker Version](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [②Source Code Deployment](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [③Source Code Deployment Auto-Update Tutorial](./docs/dev-ops-integration.md) | 4 cores 8GB if using `FunASR`, 2 cores 4GB if all APIs| [Local Source Code Startup Video Tutorial](https://www.bilibili.com/video/BV1wBJhz4Ewe) |
| **Full Module Installation** | Intelligent dialogue, multi-user management, multi-agent management, intelligent console interface operation | Complete functionality experience, data stored in database |[①Docker Version](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [②Source Code Deployment](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [③Source Code Deployment Auto-Update Tutorial](./docs/dev-ops-integration.md) | 4 cores 8GB if using `FunASR`, 2 cores 4GB if all APIs| [Local Source Code Startup Video Tutorial](https://www.bilibili.com/video/BV1wBJhz4Ewe) |
For frequently asked questions and related tutorials, please refer to [this link](./docs/FAQ.md)
> 💡 Note: Below is a test platform deployed with the latest code. You can burn and test if needed. Concurrent users: 6, data will be cleared daily.
@@ -215,14 +217,15 @@ Websocket Interface Address: wss://2662r3426b.vicp.fun/xiaozhi/v1/
| Intent(Intent Recognition) | function_call(Function calling) | function_call(Function calling) |
| Memory(Memory function) | mem_local_short(Local short-term memory) | mem_local_short(Local short-term memory) |
If you are concerned about the latency of each component, please refer to the [Xiaozhi Component Performance Test Report](https://github.com/xinnan-tech/xiaozhi-performance-research), and test in your own environment following the test methods in the report.
#### 🔧 Testing Tools
This project provides the following testing tools to help you verify the system and choose suitable models:
| Tool Name | Location | Usage Method | Function Description |
|:---:|:---|:---:|:---:|
| Audio Interaction Test Tool | main》xiaozhi-server》test》test_page.html | Open directly with Google Chrome | Tests audio playback and reception functions, verifies if Python-side audio processing is normal |
| Model Response Test Tool 1 | main》xiaozhi-server》performance_tester.py | Execute `python performance_tester.py` | Tests response speed of three core modules: ASR(speech recognition), LLM(large model), TTS(speech synthesis) |
| Model Response Test Tool 2 | main》xiaozhi-server》performance_tester_vllm.py | Execute `python performance_tester_vllm.py` | Tests VLLM(vision model) response speed |
| Model Response Test Tool | main》xiaozhi-server》performance_tester.py | Execute `python performance_tester.py` | Tests response speed of three core modules: ASR(speech recognition), LLM(large model), VLLM(vision model), TTS(speech synthesis) |
> 💡 Note: When testing model speed, only models with configured keys will be tested.
@@ -240,8 +243,8 @@ This project provides the following testing tools to help you verify the system
| Intent Recognition | Supports LLM intent recognition, Function Call function calling, provides plugin-based intent processing mechanism |
| Memory System | Supports local short-term memory, mem0ai interface memory, PowerMem intelligent memory, with memory summarization functionality |
| Knowledge Base | Supports RAGFlow knowledge base, enabling LLM to judge whether to schedule the knowledge base after receiving the user's question, and then answer the question |
| Command Delivery | Supports MCP command delivery to ESP32 devices via MQTT protocol from Smart Console |
| Tool Calling | Supports client IOT protocol, client MCP protocol, server MCP protocol, MCP endpoint protocol, custom tool functions |
| Command Delivery | Supports MCP command delivery to ESP32 devices via MQTT protocol from Smart Console |
| Management Backend | Provides Web management interface, supports user management, system configuration and device management; Supports Simplified Chinese, Traditional Chinese and English display |
| Testing Tools | Provides performance testing tools, vision model testing tools, and audio interaction testing tools |
| Deployment Support | Supports Docker deployment and local deployment, provides complete configuration file management |
@@ -249,20 +252,14 @@ This project provides the following testing tools to help you verify the system
### Under Development 🚧
To learn about specific development plan progress, [click here](https://github.com/users/xinnan-tech/projects/3)
To learn about specific development plan progress, [click here](https://github.com/users/xinnan-tech/projects/3). For frequently asked questions and related tutorials, please refer to [this link](./docs/FAQ.md)
If you are a software developer, here is an [Open Letter to Developers](docs/contributor_open_letter.md). Welcome to join!
---
## Product Ecosystem 👬
Xiaozhi is an ecosystem. When using this product, you can also check out other [excellent projects](https://github.com/78/xiaozhi-esp32?tab=readme-ov-file#related-open-source-projects) in this ecosystem
| Project Name | Project Address | Project Description |
|:---------------------|:--------|:--------|
| Xiaozhi Android Client | [xiaozhi-android-client](https://github.com/TOM88812/xiaozhi-android-client) | An Android and iOS voice dialogue application based on xiaozhi-server, supporting real-time voice interaction and text dialogue.<br/>Currently a Flutter version, connecting iOS and Android platforms. |
| Xiaozhi Desktop Client | [py-xiaozhi](https://github.com/Huang-junsen/py-xiaozhi) | This project provides a Python-based AI client for beginners, allowing users to experience Xiaozhi AI functionality through code even without physical hardware conditions. |
| Xiaozhi Java Server | [xiaozhi-esp32-server-java](https://github.com/joey-zhou/xiaozhi-esp32-server-java) | Xiaozhi open-source backend service Java version is a Java-based open-source project.<br/>It includes frontend and backend services, aiming to provide users with a complete backend service solution. |
Xiaozhi is an ecosystem. When using this product, you can also check out other [excellent projects](https://github.com/78/xiaozhi-esp32/blob/main/README_zh.md#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE) in this ecosystem
---
@@ -276,8 +273,10 @@ Xiaozhi is an ecosystem. When using this product, you can also check out other [
| Dify interface calls | Dify | - |
| FastGPT interface calls | FastGPT | - |
| Coze interface calls | Coze | - |
| Xinference interface calls | Xinference | - |
| HomeAssistant interface calls | HomeAssistant | - |
In fact, any LLM that supports OpenAI interface calls can be integrated and used, including Xinference and HomeAssistant interfaces.
In fact, any LLM that supports OpenAI interface calls can be integrated and used.
---
@@ -296,7 +295,7 @@ In fact, any VLLM that supports OpenAI interface calls can be integrated and use
| Usage Method | Supported Platforms | Free Platforms |
|:---:|:---:|:---:|
| Interface calls | EdgeTTS, iFLYTEK, Volcano Engine, Tencent Cloud, Alibaba Cloud and Bailian, CosyVoiceSiliconflow, TTS302AI, CozeCnTTS, GizwitsTTS, ACGNTTS, OpenAITTS, Lingxi Streaming TTS, MinimaxTTS | Lingxi Streaming TTS, EdgeTTS, CosyVoiceSiliconflow(partial) |
| Local services | FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3, MinimaxTTS | FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3, MinimaxTTS |
| Local services | FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3, Index-TTS, PaddleSpeech | Index-TTS, PaddleSpeech, FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3 |
---
@@ -342,6 +341,7 @@ In fact, any VLLM that supports OpenAI interface calls can be integrated and use
|:------:|:-------------:|:----:|:-------:|:---------------------:|
| Intent | intent_llm | Interface calls | Based on LLM pricing | Recognizes intent through large models, strong generalization |
| Intent | function_call | Interface calls | Based on LLM pricing | Completes intent through large model function calling, fast speed, good effect |
| Intent | nointent | No intent mode | Free | Does not perform intent recognition, directly returns dialogue result |
---
+376
View File
@@ -0,0 +1,376 @@
[![Banners](docs/images/banner1.png)](https://github.com/xinnan-tech/xiaozhi-esp32-server)
<h1 align="center">Serviço Backend Xiaozhi xiaozhi-esp32-server</h1>
<p align="center">
Este projeto é baseado na teoria e tecnologia de inteligência simbiótica humano-máquina para desenvolver sistemas inteligentes de hardware e software para terminais<br/>fornecendo serviços de backend para o projeto de hardware inteligente de código aberto
<a href="https://github.com/78/xiaozhi-esp32">xiaozhi-esp32</a><br/>
Implementado usando Python, Java e Vue de acordo com o <a href="https://ccnphfhqs21z.feishu.cn/wiki/M0XiwldO9iJwHikpXD5cEx71nKh">Protocolo de Comunicação Xiaozhi</a><br/>
Suporte ao protocolo MQTT+UDP, protocolo WebSocket, ponto de acesso MCP, reconhecimento de impressão vocal e base de conhecimento
</p>
<p align="center">
<a href="./docs/FAQ.md">Perguntas Frequentes</a>
· <a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/issues">Reportar Problemas</a>
· <a href="./README.md#%E9%83%A8%E7%BD%B2%E6%96%87%E6%A1%A3">Documentação de Implantação</a>
· <a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">Notas de Lançamento</a>
</p>
<p align="center">
<a href="./README.md"><img alt="简体中文版自述文件" src="https://img.shields.io/badge/简体中文-DFE0E5"></a>
<a href="./README_en.md"><img alt="README in English" src="https://img.shields.io/badge/English-DFE0E5"></a>
<a href="./README_vi.md"><img alt="Tiếng Việt" src="https://img.shields.io/badge/Tiếng Việt-DFE0E5"></a>
<a href="./README_de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-DFE0E5"></a>
<a href="./README_pt_BR.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-DBEDFA"></a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">
<img alt="GitHub Contributors" src="https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker" />
</a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/LICENSE">
<img alt="GitHub pull requests" src="https://img.shields.io/badge/license-MIT-white?labelColor=black" />
</a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server">
<img alt="stars" src="https://img.shields.io/github/stars/xinnan-tech/xiaozhi-esp32-server?color=ffcb47&labelColor=black" />
</a>
</p>
<p align="center">
Liderado pela Equipe do Professor Siyuan Liu (Universidade de Tecnologia do Sul da China)
</br>
刘思源教授团队主导研发(华南理工大学)
</br>
<img src="./docs/images/hnlg.jpg" alt="Universidade de Tecnologia do Sul da China (华南理工大学)" width="50%">
</p>
---
## Público-Alvo 👥
Este projeto requer dispositivos de hardware ESP32 para funcionar. Se você adquiriu hardware relacionado ao ESP32, conectou-se com sucesso ao serviço backend implantado pelo Brother Xia e deseja construir seu próprio serviço backend `xiaozhi-esp32` de forma independente, então este projeto é perfeito para você.
Quer ver os efeitos de uso? Clique nos vídeos abaixo 🎥
<table>
<tr>
<td>
<a href="https://www.bilibili.com/video/BV1FMFyejExX" target="_blank">
<picture>
<img alt="Experiência de velocidade de resposta" src="docs/images/demo9.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1vchQzaEse" target="_blank">
<picture>
<img alt="Segredo da otimização de velocidade" src="docs/images/demo6.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1C1tCzUEZh" target="_blank">
<picture>
<img alt="Cenário médico complexo" src="docs/images/demo1.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1zUW5zJEkq" target="_blank">
<picture>
<img alt="Envio de comandos MQTT" src="docs/images/demo4.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1Exu3zqEDe" target="_blank">
<picture>
<img alt="Reconhecimento de impressão vocal" src="docs/images/demo14.png" />
</picture>
</a>
</td>
</tr>
<tr>
<td>
<a href="https://www.bilibili.com/video/BV1pNXWYGEx1" target="_blank">
<picture>
<img alt="Controle de interruptores de eletrodomésticos" src="docs/images/demo5.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1ZQKUzYExM" target="_blank">
<picture>
<img alt="Ponto de acesso MCP" src="docs/images/demo13.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1TJ7WzzEo6" target="_blank">
<picture>
<img alt="Tarefas com múltiplos comandos" src="docs/images/demo11.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1VC96Y5EMH" target="_blank">
<picture>
<img alt="Reproduzir música" src="docs/images/demo7.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1Z8XuYZEAS" target="_blank">
<picture>
<img alt="Plugin de clima" src="docs/images/demo8.png" />
</picture>
</a>
</td>
</tr>
<tr>
<td>
<a href="https://www.bilibili.com/video/BV12J7WzBEaH" target="_blank">
<picture>
<img alt="Interrupção em tempo real" src="docs/images/demo10.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1Co76z7EvK" target="_blank">
<picture>
<img alt="Fotografar e identificar objetos" src="docs/images/demo12.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV1CDKWemEU6" target="_blank">
<picture>
<img alt="Timbre de voz personalizado" src="docs/images/demo2.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV12yA2egEaC" target="_blank">
<picture>
<img alt="Comunicação em cantonês" src="docs/images/demo3.png" />
</picture>
</a>
</td>
<td>
<a href="https://www.bilibili.com/video/BV17LXWYvENb" target="_blank">
<picture>
<img alt="Transmissão de notícias" src="docs/images/demo0.png" />
</picture>
</a>
</td>
</tr>
</table>
---
## Avisos ⚠️
1. Este projeto é um software de código aberto. Este software não possui parceria comercial com nenhum provedor de serviços de API de terceiros (incluindo, mas não se limitando a reconhecimento de fala, modelos de linguagem, síntese de voz e outras plataformas) com os quais se conecta, e não fornece nenhuma forma de garantia quanto à qualidade de serviço ou segurança financeira desses provedores. Recomenda-se que os usuários priorizem provedores de serviço com licenças comerciais relevantes e leiam cuidadosamente seus termos de serviço e políticas de privacidade. Este software não armazena nenhuma chave de conta, não participa de fluxos de fundos e não assume o risco de perda de fundos recarregados.
2. A funcionalidade deste projeto não está completa e não passou por avaliação de segurança de rede. Por favor, não o utilize em ambientes de produção. Se você implantar este projeto para fins de aprendizado em um ambiente de rede pública, certifique-se de que as medidas de proteção necessárias estejam em vigor.
---
## Documentação de Implantação
![Banners](docs/images/banner2.png)
Este projeto oferece dois métodos de implantação. Por favor, escolha de acordo com suas necessidades específicas:
#### 🚀 Seleção do Método de Implantação
| Método de Implantação | Funcionalidades | Cenários Aplicáveis | Documentação de Implantação | Requisitos de Configuração | Tutoriais em Vídeo |
|---------|------|---------|---------|---------|---------|
| **Instalação Simplificada** | Diálogo inteligente, gerenciamento de agente único | Ambientes de baixa configuração, dados armazenados em arquivos de configuração, sem necessidade de banco de dados | [①Versão Docker](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E5%8F%AA%E8%BF%90%E8%A1%8Cserver) / [②Implantação via Código-Fonte](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E5%8F%AA%E8%BF%90%E8%A1%8Cserver)| 2 núcleos 4GB se usar `FunASR`, 2 núcleos 2GB se todas APIs | - |
| **Instalação de Módulo Completo** | Diálogo inteligente, gerenciamento multiusuário, gerenciamento de múltiplos agentes, operação de interface do console inteligente | Experiência com funcionalidade completa, dados armazenados em banco de dados |[①Versão Docker](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%B8%80docker%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [②Implantação via Código-Fonte](./docs/Deployment_all.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E6%9C%AC%E5%9C%B0%E6%BA%90%E7%A0%81%E8%BF%90%E8%A1%8C%E5%85%A8%E6%A8%A1%E5%9D%97) / [③Tutorial de Atualização Automática via Código-Fonte](./docs/dev-ops-integration.md) | 4 núcleos 8GB se usar `FunASR`, 2 núcleos 4GB se todas APIs| [Tutorial em Vídeo de Inicialização via Código-Fonte Local](https://www.bilibili.com/video/BV1wBJhz4Ewe) |
Perguntas frequentes e tutoriais relacionados podem ser consultados [neste link](./docs/FAQ.md)
> 💡 Nota: Abaixo está uma plataforma de teste implantada com o código mais recente. Você pode gravar e testar se necessário. Usuários simultâneos: 6, os dados serão limpos diariamente.
```
Endereço do Console de Controle Inteligente: https://2662r3426b.vicp.fun
Endereço do Console de Controle Inteligente (H5): https://2662r3426b.vicp.fun/h5/index.html
Ferramenta de Teste de Serviço: https://2662r3426b.vicp.fun/test/
Endereço da Interface OTA: https://2662r3426b.vicp.fun/xiaozhi/ota/
Endereço da Interface WebSocket: wss://2662r3426b.vicp.fun/xiaozhi/v1/
```
#### 🚩 Descrição e Recomendações de Configuração
> [!Note]
> Este projeto oferece dois esquemas de configuração:
>
> 1. `Configurações Gratuitas Nível Básico`: Adequado para uso pessoal e doméstico, todos os componentes utilizam soluções gratuitas, sem necessidade de pagamento adicional.
>
> 2. `Configuração de Streaming`: Adequado para demonstrações, treinamentos, cenários com mais de 2 usuários simultâneos, etc. Utiliza tecnologia de processamento em streaming para velocidade de resposta mais rápida e melhor experiência.
>
> A partir da versão `0.5.2`, o projeto suporta configuração de streaming. Em comparação com versões anteriores, a velocidade de resposta é melhorada em aproximadamente `2,5 segundos`, melhorando significativamente a experiência do usuário.
| Nome do Módulo | Configurações Gratuitas Nível Básico | Configuração de Streaming |
|:---:|:---:|:---:|
| ASR(Reconhecimento de Fala) | FunASR(Local) | 👍XunfeiStreamASR(Xunfei Streaming) |
| LLM(Modelo de Linguagem) | glm-4-flash(Zhipu) | 👍qwen-flash(Alibaba Bailian) |
| VLLM(Modelo de Visão) | glm-4v-flash(Zhipu) | 👍qwen2.5-vl-3b-instructh(Alibaba Bailian) |
| TTS(Síntese de Voz) | ✅LinkeraiTTS(Lingxi streaming) | 👍HuoshanDoubleStreamTTS(Volcano Streaming) |
| Intent(Reconhecimento de Intenção) | function_call(Chamada de função) | function_call(Chamada de função) |
| Memory(Função de Memória) | mem_local_short(Memória local de curto prazo) | mem_local_short(Memória local de curto prazo) |
Se você está preocupado com o tempo de resposta de cada componente, consulte o [Relatório de Teste de Desempenho dos Componentes Xiaozhi](https://github.com/xinnan-tech/xiaozhi-performance-research), e teste em seu próprio ambiente seguindo os métodos de teste do relatório.
#### 🔧 Ferramentas de Teste
Este projeto fornece as seguintes ferramentas de teste para ajudá-lo a verificar o sistema e escolher modelos adequados:
| Nome da Ferramenta | Localização | Método de Uso | Descrição da Função |
|:---:|:---|:---:|:---:|
| Ferramenta de Teste de Interação por Áudio | main》xiaozhi-server》test》test_page.html | Abrir diretamente com Google Chrome | Testa as funções de reprodução e recepção de áudio, verifica se o processamento de áudio no lado Python está normal |
| Ferramenta de Teste de Resposta de Modelo | main》xiaozhi-server》performance_tester.py | Execute `python performance_tester.py` | Testa a velocidade de resposta dos três módulos principais: ASR(reconhecimento de fala), LLM(modelo de linguagem), VLLM(modelo de visão), TTS(síntese de voz) |
> 💡 Nota: Ao testar a velocidade dos modelos, apenas os modelos com chaves configuradas serão testados.
---
## Lista de Funcionalidades ✨
### Implementado ✅
![请参考-全模块安装架构图](docs/images/deploy2.png)
| Módulo de Funcionalidade | Descrição |
|:---:|:---|
| Arquitetura Principal | Baseado em [gateway MQTT+UDP](https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docs/mqtt-gateway-integration.md), servidores WebSocket e HTTP, fornece sistema completo de gerenciamento de console e autenticação |
| Interação por Voz | Suporta ASR em streaming (reconhecimento de fala), TTS em streaming (síntese de voz), VAD (detecção de atividade vocal), suporta reconhecimento multilíngue e processamento de voz |
| Reconhecimento de Impressão Vocal | Suporta registro, gerenciamento e reconhecimento de impressão vocal de múltiplos usuários, processa em paralelo com o ASR, reconhecimento de identidade do falante em tempo real e repassa ao LLM para respostas personalizadas |
| Diálogo Inteligente | Suporta múltiplos LLM (modelos de linguagem de grande porte), implementa diálogo inteligente |
| Percepção Visual | Suporta múltiplos VLLM (modelos de visão de grande porte), implementa interação multimodal |
| Reconhecimento de Intenção | Suporta reconhecimento de intenção por LLM, Function Call (chamada de função), fornece mecanismo de processamento de intenção baseado em plugins |
| Sistema de Memória | Suporta memória local de curto prazo, memória via interface mem0ai, memória inteligente PowerMem, com funcionalidade de resumo de memória |
| Base de Conhecimento | Suporta base de conhecimento RAGFlow, permitindo que o LLM julgue se deve acionar a base de conhecimento após receber a pergunta do usuário, e então responda à pergunta |
| Chamada de Ferramentas | Suporta protocolo IOT do cliente, protocolo MCP do cliente, protocolo MCP do servidor, protocolo de endpoint MCP, funções de ferramentas personalizadas |
| Envio de Comandos | Suporta envio de comandos MCP para dispositivos ESP32 via protocolo MQTT a partir do Console Inteligente |
| Backend de Gerenciamento | Fornece interface de gerenciamento Web, suporta gerenciamento de usuários, configuração do sistema e gerenciamento de dispositivos; Suporta exibição em Chinês Simplificado, Chinês Tradicional e Inglês |
| Ferramentas de Teste | Fornece ferramentas de teste de desempenho, ferramentas de teste de modelo de visão e ferramentas de teste de interação por áudio |
| Suporte à Implantação | Suporta implantação via Docker e implantação local, fornece gerenciamento completo de arquivos de configuração |
| Sistema de Plugins | Suporta extensões de plugins funcionais, desenvolvimento de plugins personalizados e carregamento dinâmico de plugins |
### Em Desenvolvimento 🚧
Para conhecer o progresso específico do plano de desenvolvimento, [clique aqui](https://github.com/users/xinnan-tech/projects/3). Perguntas frequentes e tutoriais relacionados podem ser consultados [neste link](./docs/FAQ.md)
Se você é um desenvolvedor de software, aqui está uma [Carta Aberta aos Desenvolvedores](docs/contributor_open_letter.md). Seja bem-vindo a participar!
---
## Ecossistema do Produto 👬
Xiaozhi é um ecossistema. Ao utilizar este produto, você também pode conferir outros [projetos excelentes](https://github.com/78/xiaozhi-esp32/blob/main/README_zh.md#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE) neste ecossistema
---
## Lista de Plataformas/Componentes Suportados 📋
### LLM Modelos de Linguagem
| Método de Uso | Plataformas Suportadas | Plataformas Gratuitas |
|:---:|:---:|:---:|
| Chamadas via interface OpenAI | Alibaba Bailian, Volcano Engine, DeepSeek, Zhipu, Gemini, iFLYTEK | Zhipu, Gemini |
| Chamadas via interface Ollama | Ollama | - |
| Chamadas via interface Dify | Dify | - |
| Chamadas via interface FastGPT | FastGPT | - |
| Chamadas via interface Coze | Coze | - |
| Chamadas via interface Xinference | Xinference | - |
| Chamadas via interface HomeAssistant | HomeAssistant | - |
Na verdade, qualquer LLM que suporte chamadas via interface openai pode ser integrado e utilizado.
---
### VLLM Modelos de Visão
| Método de Uso | Plataformas Suportadas | Plataformas Gratuitas |
|:---:|:---:|:---:|
| Chamadas via interface OpenAI | Alibaba Bailian, Zhipu ChatGLMVLLM | Zhipu ChatGLMVLLM |
Na verdade, qualquer VLLM que suporte chamadas via interface OpenAI pode ser integrado e utilizado.
---
### TTS Síntese de Voz
| Método de Uso | Plataformas Suportadas | Plataformas Gratuitas |
|:---:|:---:|:---:|
| Chamadas via interface | EdgeTTS, iFLYTEK, Volcano Engine, Tencent Cloud, Alibaba Cloud e Bailian, CosyVoiceSiliconflow, TTS302AI, CozeCnTTS, GizwitsTTS, ACGNTTS, OpenAITTS, Lingxi Streaming TTS, MinimaxTTS | Lingxi Streaming TTS, EdgeTTS, CosyVoiceSiliconflow(parcial) |
| Serviços locais | FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3, Index-TTS, PaddleSpeech | Index-TTS, PaddleSpeech, FishSpeech, GPT_SOVITS_V2, GPT_SOVITS_V3 |
---
### VAD Detecção de Atividade Vocal
| Tipo | Nome da Plataforma | Método de Uso | Modelo de Preço | Observações |
|:---:|:---------:|:----:|:----:|:--:|
| VAD | SileroVAD | Uso local | Gratuito | |
---
### ASR Reconhecimento de Fala
| Método de Uso | Plataformas Suportadas | Plataformas Gratuitas |
|:---:|:---:|:---:|
| Uso local | FunASR, SherpaASR | FunASR, SherpaASR |
| Chamadas via interface | FunASRServer, Volcano Engine, iFLYTEK, Tencent Cloud, Alibaba Cloud, Baidu Cloud, OpenAI ASR | FunASRServer |
---
### Reconhecimento de Impressão Vocal
| Método de Uso | Plataformas Suportadas | Plataformas Gratuitas |
|:---:|:---:|:---:|
| Uso local | 3D-Speaker | 3D-Speaker |
---
### Armazenamento de Memória
| Tipo | Nome da Plataforma | Método de Uso | Modelo de Preço | Observações |
|:------:|:---------------:|:----:|:---------:|:--:|
| Memória | mem0ai | Chamadas via interface | Cota de 1000 vezes/mês | |
| Memória | [powermem](./docs/powermem-integration.md) | Resumo local | Depende do LLM e BD | OceanBase de código aberto, suporta busca inteligente |
| Memória | mem_local_short | Resumo local | Gratuito | |
| Memória | nomem | Modo sem memória | Gratuito | |
---
### Reconhecimento de Intenção
| Tipo | Nome da Plataforma | Método de Uso | Modelo de Preço | Observações |
|:------:|:-------------:|:----:|:-------:|:---------------------:|
| Intenção | intent_llm | Chamadas via interface | Baseado no preço do LLM | Reconhece intenção através de modelos de linguagem, forte generalização |
| Intenção | function_call | Chamadas via interface | Baseado no preço do LLM | Completa a intenção através de chamada de função do modelo de linguagem, velocidade rápida, bom resultado |
| Intenção | nointent | Modo sem intenção | Gratuito | Não realiza reconhecimento de intenção, retorna diretamente o resultado do diálogo |
---
### RAG Geração Aumentada por Recuperação
| Tipo | Nome da Plataforma | Método de Uso | Modelo de Preço | Observações |
|:------:|:-------------:|:----:|:-------:|:---------------------:|
| RAG | ragflow | Chamadas via interface | Cobrado com base nos tokens consumidos para fatiamento e segmentação de palavras | Utiliza o recurso de geração aumentada por recuperação do RagFlow para fornecer respostas de diálogo mais precisas |
---
## Agradecimentos 🙏
| Logo | Projeto/Empresa | Descrição |
|:---:|:---:|:---|
| <img src="./docs/images/logo_bailing.png" width="160"> | [Robô de Diálogo por Voz Bailing](https://github.com/wwbin2017/bailing) | Este projeto foi inspirado pelo [Robô de Diálogo por Voz Bailing](https://github.com/wwbin2017/bailing) e implementado com base nele |
| <img src="./docs/images/logo_tenclass.png" width="160"> | [Tenclass](https://www.tenclass.com/) | Agradecimentos à [Tenclass](https://www.tenclass.com/) por formular protocolos de comunicação padrão, soluções de compatibilidade multidispositivo e demonstrações práticas de cenários de alta concorrência para o ecossistema Xiaozhi; fornecendo suporte completo de documentação técnica para este projeto |
| <img src="./docs/images/logo_xuanfeng.png" width="160"> | [Xuanfeng Technology (玄凤科技)](https://github.com/Eric0308) | Agradecimentos à [Xuanfeng Technology](https://github.com/Eric0308) por contribuir com o framework de chamada de função, protocolo de comunicação MCP e implementação do mecanismo de chamada baseado em plugins. Através de um sistema padronizado de agendamento de instruções e capacidades de expansão dinâmica, melhora significativamente a eficiência de interação e extensibilidade funcional dos dispositivos de frontend (IoT) |
| <img src="./docs/images/logo_junsen.png" width="160"> | [huangjunsen](https://github.com/huangjunsen0406) | Agradecimentos a [huangjunsen](https://github.com/huangjunsen0406) por contribuir com o módulo `Console de Controle Inteligente Mobile`, que permite controle eficiente e interação em tempo real em dispositivos móveis, melhorando significativamente a conveniência operacional e a eficiência de gerenciamento do sistema em cenários móveis. |
| <img src="./docs/images/logo_huiyuan.png" width="160"> | [Huiyuan Design (汇远设计)](http://ui.kwd988.net/) | Agradecimentos à [Huiyuan Design](http://ui.kwd988.net/) por fornecer soluções visuais profissionais para este projeto, utilizando sua experiência prática de design atendendo mais de mil empresas para potencializar a experiência do usuário deste produto |
| <img src="./docs/images/logo_qinren.png" width="160"> | [Xi'an Qinren Information Technology (西安勤人信息科技)](https://www.029app.com/) | Agradecimentos à [Xi'an Qinren Information Technology](https://www.029app.com/) por aprofundar o sistema visual deste projeto, garantindo consistência e extensibilidade do estilo de design geral em aplicações de múltiplos cenários |
| <img src="./docs/images/logo_contributors.png" width="160"> | [Contribuidores de Código](https://github.com/xinnan-tech/xiaozhi-esp32-server/graphs/contributors) | Agradecimentos a [todos os contribuidores de código](https://github.com/xinnan-tech/xiaozhi-esp32-server/graphs/contributors), seus esforços tornaram o projeto mais robusto e poderoso. |
<a href="https://star-history.com/#xinnan-tech/xiaozhi-esp32-server&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=xinnan-tech/xiaozhi-esp32-server&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=xinnan-tech/xiaozhi-esp32-server&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=xinnan-tech/xiaozhi-esp32-server&type=Date" />
</picture>
</a>
+2 -1
View File
@@ -21,6 +21,7 @@ Hỗ trợ giao thức MQTT+UDP, giao thức Websocket, điểm truy cập MCP,
<a href="./README_en.md"><img alt="README in English" src="https://img.shields.io/badge/English-DFE0E5"></a>
<a href="./README_vi.md"><img alt="Tiếng Việt" src="https://img.shields.io/badge/Tiếng Việt-DBEDFA"></a>
<a href="./README_de.md"><img alt="Deutsch" src="https://img.shields.io/badge/Deutsch-DFE0E5"></a>
<a href="./README_pt_BR.md"><img alt="Português (Brasil)" src="https://img.shields.io/badge/Português (Brasil)-DFE0E5"></a>
<a href="https://github.com/xinnan-tech/xiaozhi-esp32-server/releases">
<img alt="GitHub Contributors" src="https://img.shields.io/github/v/release/xinnan-tech/xiaozhi-esp32-server?logo=docker" />
</a>
@@ -259,7 +260,7 @@ Nếu bạn là một nhà phát triển phần mềm, đây có một [Lá thư
---
## Hệ sinh thái sản phẩm 👬
Xiaozhi là một hệ sinh thái, khi bạn sử dụng sản phẩm này, bạn cũng có thể xem các [dự án xuất sắc](https://github.com/78/xiaozhi-esp32?tab=readme-ov-file#related-open-source-projects) khác trong hệ sinh thái này
Xiaozhi là một hệ sinh thái, khi bạn sử dụng sản phẩm này, bạn cũng có thể xem các [dự án xuất sắc](https://github.com/78/xiaozhi-esp32/blob/main/README_zh.md#%E7%9B%B8%E5%85%B3%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE) khác trong hệ sinh thái này
---
+1 -1
View File
@@ -130,7 +130,7 @@ export default {
'chatHistory.loading': 'Loading...',
'chatHistory.noMoreData': 'No more data',
'chatHistory.noChatRecords': 'No chat records',
'chatRecordsDescription': 'Conversation records with agents will be displayed here',
'chatHistory.chatRecordsDescription': 'Conversation records with agents will be displayed here',
// Chat History Detail Page
'chatHistory.pageTitle': 'Chat Detail',
'chatHistory.assistantName': 'Intelligent Assistant',
+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',
'chatHistory.chatRecordsDescription': 'Os registros de conversas com agentes serão exibidos aqui',
// Chat History Detail Page
'chatHistory.pageTitle': 'Detalhe da Conversa',
'chatHistory.assistantName': 'Assistente Inteligente',
'chatHistory.userName': 'Usuário',
'chatHistory.aiAssistantName': 'Assistente IA',
'chatHistory.loadFailed': 'Falha ao carregar histórico de conversas',
'chatHistory.parameterError': 'Erro de parâmetro da página',
'chatHistory.invalidAudioId': 'ID de áudio inválido',
'chatHistory.audioPlayFailed': 'Falha na reprodução de áudio',
'chatHistory.playAudioFailed': 'Falha ao reproduzir áudio',
// Device management page
'device.pageTitle': 'Gerenciamento de Dispositivos',
'device.noDevices': 'Nenhum dispositivo disponível',
'device.macAddress': 'Endereço MAC',
'device.firmwareVersion': 'Versão do Firmware',
'device.lastConnected': 'Última Conversa',
'device.otaUpdate': 'Atualização OTA',
'device.unbind': 'Desvincular',
'device.confirmUnbind': 'Confirmar',
'device.bindDevice': 'Vincular Novo Dispositivo',
'device.deviceType': 'Tipo de Dispositivo',
'device.loading': 'Carregando...',
'device.neverConnected': 'Nunca conectado',
'device.justNow': 'Agora mesmo',
'device.minutesAgo': '{minutes} minutos atrás',
'device.hoursAgo': '{hours} horas atrás',
'device.daysAgo': '{days} dias atrás',
'device.otaAutoUpdateEnabled': 'Atualização automática OTA ativada',
'device.otaAutoUpdateDisabled': 'Atualização automática OTA desativada',
'device.operationFailed': 'Operação falhou, por favor tente novamente',
'device.deviceUnbound': 'Dispositivo desvinculado',
'device.unbindFailed': 'Falha ao desvincular, por favor tente novamente',
'device.unbindDevice': 'Desvincular Dispositivo',
'device.confirmUnbindDevice': 'Tem certeza que deseja desvincular o dispositivo "{macAddress}"?',
'device.cancel': 'Cancelar',
'device.noDevice': 'Nenhum Dispositivo',
'device.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
'device.deviceBindSuccess': 'Dispositivo vinculado com sucesso!',
'device.bindFailed': 'Falha ao vincular, por favor verifique se o código de verificação está correto',
'device.enterDeviceCode': 'Por favor, insira o código de verificação do dispositivo',
'device.bindNow': 'Vincular Agora',
'device.lastConnection': 'Última Conexão',
'device.clickToBindFirstDevice': 'Clique no botão + no canto inferior direito para vincular seu primeiro dispositivo',
// Common
'common.success': 'Sucesso',
'common.fail': 'Falhou',
'common.loading': 'Carregando...',
'common.confirm': 'Confirmar',
'common.cancel': 'Cancelar',
'common.delete': 'Excluir',
'common.edit': 'Editar',
'common.add': 'Adicionar',
'common.pleaseSelect': 'Por favor, selecione',
'common.unknownError': 'Erro desconhecido',
'common.networkError': 'Erro de rede',
// Retrieve Password page
'retrievePassword.title': 'Redefinir Senha',
'retrievePassword.subtitle': 'Recupere a senha da sua conta pelo número de celular',
'retrievePassword.mobileRequired': 'Por favor, insira o número de celular',
'retrievePassword.inputCorrectMobile': 'Por favor, insira um número de celular válido',
'retrievePassword.captchaRequired': 'Por favor, insira o código de verificação gráfico',
'retrievePassword.mobileCaptchaRequired': 'Por favor, insira o código de verificação por SMS',
'retrievePassword.newPasswordRequired': 'Por favor, insira a nova senha',
'retrievePassword.confirmNewPasswordRequired': 'Por favor, confirme a nova senha',
'retrievePassword.passwordsNotMatch': 'As senhas não coincidem',
'retrievePassword.mobilePlaceholder': 'Por favor, insira o número de celular',
'retrievePassword.captchaPlaceholder': 'Por favor, insira o código de verificação gráfico',
'retrievePassword.mobileCaptchaPlaceholder': 'Por favor, insira o código de verificação por SMS',
'retrievePassword.newPasswordPlaceholder': 'Por favor, insira a nova senha',
'retrievePassword.confirmNewPasswordPlaceholder': 'Por favor, confirme a nova senha',
'retrievePassword.getMobileCaptcha': 'Obter Código',
'retrievePassword.captchaSendSuccess': 'Código de verificação enviado com sucesso',
'retrievePassword.passwordUpdateSuccess': 'Senha redefinida com sucesso',
'retrievePassword.resetButton': 'Redefinir Senha',
'retrievePassword.goToLogin': 'Voltar ao Login',
// SM2 encryption related error messages
'sm2.publicKeyNotConfigured': 'Chave pública SM2 não configurada, por favor entre em contato com o administrador',
'sm2.encryptionFailed': 'Falha na criptografia da senha',
'sm2.keyGenerationFailed': 'Falha na geração do par de chaves',
'sm2.invalidPublicKey': 'Formato de chave pública inválido',
'sm2.encryptionError': 'Ocorreu um erro durante a criptografia',
'sm2.publicKeyRetry': 'Tentando obter a chave pública novamente...',
'sm2.publicKeyRetryFailed': 'Falha na nova tentativa de obter a chave pública',
// Voiceprint page
'voiceprint.noSelectedAgent': 'Nenhum agente selecionado',
'voiceprint.pleaseSelectAgent': 'Por favor, selecione um agente primeiro',
'voiceprint.fetchHistoryFailed': 'Falha ao buscar histórico de conversas',
'voiceprint.clickToSelectVector': 'Clique para selecionar vetor de impressão vocal',
'voiceprint.pleaseInputName': 'Por favor, insira o nome',
'voiceprint.pleaseSelectVector': 'Por favor, selecione o vetor de impressão vocal',
'voiceprint.addSuccess': 'Adicionado com sucesso',
'voiceprint.addFailed': 'Falha ao adicionar locutor',
'voiceprint.editSuccess': 'Editado com sucesso',
'voiceprint.editFailed': 'Falha ao editar locutor',
'voiceprint.deleteConfirmMsg': 'Tem certeza que deseja excluir este locutor?',
'voiceprint.deleteConfirmTitle': 'Confirmar Exclusão',
'voiceprint.deleteSuccess': 'Excluído com sucesso',
'voiceprint.loading': 'Carregando...',
'voiceprint.delete': 'Excluir',
'voiceprint.emptyTitle': 'Nenhum dado de impressão vocal',
'voiceprint.emptyDesc': 'Clique no botão + no canto inferior direito para adicionar seu primeiro locutor',
'voiceprint.addSpeaker': 'Adicionar Locutor',
'voiceprint.voiceVector': 'Vetor de Impressão Vocal',
'voiceprint.name': 'Nome',
'voiceprint.description': 'Descrição',
'voiceprint.pleaseInputDescription': 'Por favor, insira a descrição',
'voiceprint.cancel': 'Cancelar',
'voiceprint.save': 'Salvar',
'voiceprint.editSpeaker': 'Editar Locutor',
'voiceprint.selectVector': 'Selecionar Vetor de Impressão Vocal',
'voiceprint.voiceprintInterfaceNotConfigured': 'Interface de impressão vocal não configurada',
// Settings page
'settings.pageTitle': 'Configurações',
'settings.navigationTitle': 'Configurações',
'settings.networkSettings': 'Configurações de Rede',
'settings.serverApiUrl': 'URL da API do Servidor',
'settings.validServerUrl': 'Por favor, insira um endereço de servidor válido (começando com http ou https e terminando com /xiaozhi)',
'settings.saveSettings': 'Salvar Configurações',
'settings.resetDefault': 'Restaurar Padrão',
'settings.restartApp': 'Reiniciar App',
'settings.restartNow': 'Reiniciar Agora',
'settings.restartLater': 'Depois',
// About us
'settings.aboutApp': 'Sobre o Console XiaoZhi',
'settings.aboutContent': 'Console XiaoZhi\n\nUm aplicativo móvel de gerenciamento multiplataforma construído com Vue.js 3 + uni-app, oferecendo gerenciamento de dispositivos, configuração de agentes e outras funcionalidades para o hardware inteligente xiaozhi ESP32.\n\n© 2025 xiaozhi-esp32-server {version}',
'settings.restartSuccess': 'Salvo, você pode reiniciar o app manualmente depois',
'settings.serverUrlSavedAndCacheCleared': 'URL do servidor salva e cache limpo',
'settings.resetToDefaultAndCacheCleared': 'Restaurado ao padrão e cache limpo',
'settings.resetSuccess': 'Restauração bem-sucedida',
'settings.enterServerUrl': 'Por favor, insira a URL do servidor',
'settings.clearCacheFailed': 'Falha ao limpar o cache',
'settings.cacheManagement': 'Gerenciamento de Cache',
'settings.totalCacheSize': 'Tamanho Total do Cache',
'settings.appDataSize': 'Tamanho Total dos Dados do App',
'settings.cacheClear': 'Limpar Cache',
'settings.clearAllCache': 'Limpar todos os dados de cache',
'settings.clearCache': 'Limpar Cache',
'settings.modifyWillClearCache': 'Modificações irão limpar o cache',
'settings.appInfo': 'Informações do App',
'settings.aboutUs': 'Sobre Nós',
'settings.appVersion': 'Versão do App e Info da Equipe',
'settings.confirmClear': 'Confirmar Limpeza',
'settings.confirmClearMessage': 'Tem certeza que deseja limpar todo o cache? Isso excluirá todos os dados, incluindo o status de login, e exigirá novo login.',
'settings.cacheCleared': 'Cache limpo com sucesso, redirecionando para a página de login',
'settings.languageSettings': 'Configurações de Idioma',
'settings.language': 'Idioma',
'settings.selectLanguage': 'Selecionar Idioma',
'settings.languageChanged': 'Idioma alterado com sucesso',
// Messages
'message.loginSuccess': 'Login realizado com sucesso!',
'message.loginFail': 'Falha no login',
'message.registerSuccess': 'Cadastro realizado com sucesso',
'message.registerFail': 'Falha no cadastro',
'message.saveSuccess': 'Salvo com sucesso',
'message.saveFail': 'Falha ao salvar',
'message.deleteSuccess': 'Excluído com sucesso',
'message.deleteFail': 'Falha ao excluir',
'message.bindSuccess': 'Vinculação realizada com sucesso',
'message.bindFail': 'Falha na vinculação',
'message.unbindSuccess': 'Desvinculação realizada com sucesso',
'message.unbindFail': 'Falha na desvinculação',
'message.networkError': 'Erro de rede, por favor verifique sua conexão',
'message.serverError': 'Erro no servidor, por favor tente novamente mais tarde',
'message.invalidAddress': '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
@@ -254,6 +254,8 @@ export default {
return this.$t("language.de");
case "vi":
return this.$t("language.vi");
case "pt_BR":
return this.$t("language.ptBR");
default:
return this.$t("language.zhCN");
}
@@ -272,6 +274,8 @@ export default {
return require("@/assets/xiaozhi-ai_de.png");
case "vi":
return require("@/assets/xiaozhi-ai_vi.png");
case "pt_BR":
return require("@/assets/xiaozhi-ai_en.png");
default:
return require("@/assets/xiaozhi-ai.png");
}
@@ -303,6 +307,10 @@ export default {
label: this.$t("language.vi"),
value: "vi",
},
{
label: this.$t("language.ptBR"),
value: "pt_BR",
},
],
},
{
+1
View File
@@ -663,6 +663,7 @@ export default {
'language.en': 'English',
'language.de': 'Deutsch',
'language.vi': 'Tiếng Việt',
'language.ptBR': 'Português (Brasil)',
// Home page text
'home.addAgent': 'Agent hinzufügen',
+1
View File
@@ -663,6 +663,7 @@ export default {
'language.en': 'English',
'language.de': 'Deutsch',
'language.vi': 'Tiếng Việt',
'language.ptBR': 'Português (Brasil)',
// Home page text
'home.addAgent': 'Add Agent',
+6 -1
View File
@@ -5,6 +5,7 @@ import zhTW from './zh_TW';
import en from './en';
import de from './de';
import vi from './vi';
import ptBR from './pt_BR';
Vue.use(VueI18n);
@@ -27,6 +28,9 @@ const getDefaultLanguage = () => {
if (browserLang.indexOf('vi') === 0) {
return 'vi';
}
if (browserLang === 'pt-BR' || browserLang === 'pt') {
return 'pt_BR';
}
return 'en';
};
@@ -38,7 +42,8 @@ const i18n = new VueI18n({
'zh_TW': zhTW,
'en': en,
'de': de,
'vi': vi
'vi': vi,
'pt_BR': ptBR
}
});
File diff suppressed because it is too large Load Diff
+1
View File
@@ -663,6 +663,7 @@ export default {
'language.en': 'English',
'language.de': 'Deutsch',
'language.vi': 'Tiếng Việt',
'language.ptBR': 'Português (Brasil)',
// Home page text
'home.addAgent': 'Thêm tác nhân',
+1
View File
@@ -663,6 +663,7 @@ export default {
'language.en': 'English',
'language.de': 'Deutsch',
'language.vi': 'Tiếng Việt',
'language.ptBR': 'Português (Brasil)',
// 首页文本
'home.addAgent': '添加智能体',
+1
View File
@@ -663,6 +663,7 @@ export default {
'language.en': 'English',
'language.de': 'Deutsch',
'language.vi': 'Tiếng Việt',
'language.ptBR': 'Português (Brasil)',
// 首頁文本
'home.addAgent': '添加智能體',
+5
View File
@@ -55,6 +55,9 @@
<el-dropdown-item @click.native="changeLanguage('vi')">
{{ $t("language.vi") }}
</el-dropdown-item>
<el-dropdown-item @click.native="changeLanguage('pt_BR')">
{{ $t("language.ptBR") }}
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
@@ -188,6 +191,8 @@ export default {
return this.$t("language.de");
case "vi":
return this.$t("language.vi");
case "pt_BR":
return this.$t("language.ptBR");
default:
return this.$t("language.zhCN");
}
@@ -137,6 +137,8 @@ export default {
return require("@/assets/xiaozhi-ai_de.png");
case "vi":
return require("@/assets/xiaozhi-ai_vi.png");
case "pt_BR":
return require("@/assets/xiaozhi-ai_en.png");
default:
return require("@/assets/xiaozhi-ai.png");
}