diff --git a/web/frontend/src/i18n/locales/en.json b/web/frontend/src/i18n/locales/en.json index 98799020..7415077c 100644 --- a/web/frontend/src/i18n/locales/en.json +++ b/web/frontend/src/i18n/locales/en.json @@ -274,7 +274,7 @@ "modelNameHint": "A short name used to identify this model in conversations.", "modelId": "Model Identifier", "modelIdPlaceholder": "e.g. gpt-4o or openai/gpt-4o", - "modelIdHint": "If Provider is not specified, values such as openai/gpt-4o are interpreted using the provider/model format. If Provider is specified, this field is treated as the canonical model ID and is not parsed for a provider prefix.", + "modelIdHint": "This field is treated as the canonical model ID for the selected provider. If the identifier itself contains a slash (for example openai/gpt-5.4), it is preserved as-is and not split again.", "errorRequired": "This field is required.", "errorDuplicateModelName": "Model alias already exists. Please use a different name.", "saveError": "Failed to add model", diff --git a/web/frontend/src/i18n/locales/pt-br.json b/web/frontend/src/i18n/locales/pt-br.json index bb17eea0..d89022ae 100644 --- a/web/frontend/src/i18n/locales/pt-br.json +++ b/web/frontend/src/i18n/locales/pt-br.json @@ -253,7 +253,8 @@ "setting": "Definindo como padrão...", "unavailable": "Não é possível definir um modelo indisponível como padrão", "isDefault": "Já é o modelo padrão", - "isVirtual": "Não é possível definir um modelo virtual como padrão" + "isVirtual": "Não é possível definir um modelo virtual como padrão", + "unsupportedProvider": "Este provedor não pode ser usado como modelo de chat padrão." }, "deleteDisabled": { "isDefault": "Não é possível excluir o modelo padrão" @@ -273,7 +274,7 @@ "modelNameHint": "Um nome curto usado para identificar este modelo nas conversas.", "modelId": "Identificador do Modelo", "modelIdPlaceholder": "ex: gpt-4o ou openai/gpt-4o", - "modelIdHint": "Se Provider não estiver especificado, valores como openai/gpt-4o são interpretados no formato provider/modelo. Se Provider estiver especificado, este campo é tratado como o ID canônico do modelo e não é parseado em busca de prefixo de provider.", + "modelIdHint": "Este campo é tratado como o ID canônico do modelo para o provedor selecionado. Se o próprio identificador contiver uma barra, como openai/gpt-5.4, ele será preservado como está e não será dividido novamente.", "errorRequired": "Este campo é obrigatório.", "errorDuplicateModelName": "Apelido de modelo já existe. Use um nome diferente.", "saveError": "Falha ao adicionar modelo", @@ -422,7 +423,8 @@ "maixcam": "MaixCam", "matrix": "Matrix", "irc": "IRC", - "weixin": "WeChat" + "weixin": "WeChat", + "mqtt": "MQTT" }, "weixin": { "bindTitle": "Vincular Conta do WeChat", @@ -553,9 +555,33 @@ "channels": "Canais IRC para entrar.", "requestCaps": "Lista de capabilities IRC requisitada na conexão.", "maxBase64FileSizeMiB": "Tamanho máximo em MiB para converter arquivos locais em base64 antes do upload. 0 significa ilimitado. Aplica-se apenas a arquivos locais, não a uploads via URL.", - "genericField": "Usado para configurar {{field}}." + "genericField": "Usado para configurar {{field}}.", + "broker": "Endereço do broker MQTT.", + "mqttAgentId": "Identificador único desta instância, usado para montar o caminho do topic.", + "topicPrefix": "Prefixo do topic. O padrão é /picoclaw.", + "mqttUsername": "Nome de usuário de autenticação do broker (opcional).", + "mqttPassword": "Senha de autenticação do broker (opcional).", + "mqttClientId": "ID do cliente MQTT. Deixe em branco para gerar automaticamente.", + "keepAlive": "Intervalo de keepalive em segundos. O padrão é 60.", + "qos": "Nível de qualidade de serviço da mensagem: 0 = no máximo uma vez, 1 = pelo menos uma vez, 2 = exatamente uma vez." } }, + "mqtt": { + "protocolTitle": "Referência do Protocolo", + "protocolDesc": "Os clientes enviam e recebem mensagens usando o seguinte formato de topic e payload.", + "uplink": "Uplink (Cliente → Agent)", + "downlink": "Downlink (Agent → Cliente)", + "topicParams": "Parâmetros do Topic", + "fieldText": "text", + "uplinkTextDesc": "Instrução em linguagem natural enviada pelo usuário (obrigatória).", + "downlinkTextDesc": "Texto de resposta do agente. No modo streaming, concatene várias mensagens na ordem para obter a resposta completa.", + "topicPrefixDesc": "Prefixo do topic, correspondente à configuração acima.", + "agentIdDesc": "Agent ID, correspondente à configuração acima.", + "clientIdDesc": "Identificador definido pelo cliente. Recomendação: gerar um UUID na primeira execução e persistir o valor para que o mesmo dispositivo sempre use o mesmo ID.", + "clientIdPlaceholder": "Gerado automaticamente se ficar em branco", + "secretSet": "Já configurado. Deixe em branco para manter sem alterações.", + "secretEmpty": "Não configurado" + }, "validation": { "requiredField": "Este campo é obrigatório." } @@ -823,10 +849,41 @@ "evolution_cold_path_manual": "Desligado", "evolution_cold_path_times": "Horários Agendados", "evolution_cold_path_times_hint": "Horários para o processamento cold-path agendado. Insira um valor HH:MM por linha.", + "mcp_section_hint": "Configure servidores MCP sem editar manualmente o config.json.", + "mcp_enabled": "Habilitar MCP", + "mcp_enabled_hint": "Ativa ou desativa a integração com servidores MCP.", + "mcp_discovery_enabled": "Habilitar Descoberta MCP", + "mcp_discovery_enabled_hint": "Permite que as ferramentas de descoberta MCP pesquisem os servidores MCP registrados.", + "mcp_discovery_ttl": "TTL de desbloqueio das ferramentas descobertas", + "mcp_discovery_ttl_hint": "Quantos ciclos de TTL de execução de ferramenta as ferramentas descobertas permanecem disponíveis após a busca.", + "mcp_discovery_max_results": "Máx. de Resultados da Descoberta", + "mcp_discovery_max_results_hint": "Número máximo de correspondências MCP retornadas por consulta.", + "mcp_discovery_use_bm25": "Usar Ordenação BM25", + "mcp_discovery_use_bm25_hint": "Usa pontuação lexical BM25 nos resultados da descoberta MCP.", + "mcp_discovery_use_regex": "Habilitar Busca por Regex", + "mcp_discovery_use_regex_hint": "Permite correspondência baseada em regex na descoberta MCP.", + "mcp_servers": "Servidores MCP", + "mcp_servers_hint": "Adicione, edite ou remova servidores MCP.", + "mcp_server_new": "Novo servidor MCP", + "mcp_server_add": "Adicionar servidor", + "mcp_server_remove": "Remover", + "mcp_server_enabled": "Habilitado", + "mcp_server_discovery_mode": "Modo de descoberta", + "mcp_server_discovery_mode_inherit": "Seguir modo global de descoberta", + "mcp_server_discovery_mode_deferred": "Descoberta adiada", + "mcp_server_discovery_mode_eager": "Registro imediato", + "mcp_server_name_placeholder": "Nome do servidor (ex.: github)", + "mcp_server_url_placeholder": "URL do servidor (ex.: https://example.com/mcp)", + "mcp_server_command_placeholder": "Comando (ex.: npx)", + "mcp_server_env_file_placeholder": "Caminho do arquivo de ambiente (opcional)", + "mcp_server_args_placeholder": "Args, um por linha", + "mcp_server_env_placeholder": "Objeto JSON de variáveis de ambiente", + "mcp_server_headers_placeholder": "Objeto JSON de headers", "sections": { "agent": "Agente", "runtime": "Runtime", "evolution": "Evolução", + "mcp": "MCP", "exec": "Execução de Comandos", "cron": "Tarefas Agendadas", "launcher": "Launcher", diff --git a/web/frontend/src/i18n/locales/zh.json b/web/frontend/src/i18n/locales/zh.json index 5dde72e1..4e81ddf8 100644 --- a/web/frontend/src/i18n/locales/zh.json +++ b/web/frontend/src/i18n/locales/zh.json @@ -254,7 +254,7 @@ "unavailable": "无法将不可用的模型设为默认", "isDefault": "该模型已是默认模型", "isVirtual": "无法将虚拟模型设为默认", - "unsupportedProvider": "该 Provider 仅用于 ASR,不能设为默认聊天模型" + "unsupportedProvider": "该服务商不能设为默认聊天模型。" }, "deleteDisabled": { "isDefault": "无法删除默认模型" @@ -263,8 +263,7 @@ "defaultOnSave": { "label": "默认模型", "description": "保存后自动将该模型设置为默认模型。", - "unsupportedProvider": "该 Provider 可以保存在 model_list 中,但不能作为默认聊天模型使用。", - "clearOnSave": "保存这个仅用于 ASR 的模型后,会清除当前的默认聊天模型设置。" + "unsupportedProvider": "该服务商可以保存在模型列表中,但不能作为默认聊天模型使用。" }, "add": { "button": "添加模型", @@ -344,10 +343,12 @@ "retry": "重试", "filterPlaceholder": "筛选模型...", "found": "已找到 {{count}} 个模型", + "found_plural": "已找到 {{count}} 个模型", "shown": "(显示 {{count}} 个)", "selectAll": "全选", "deselectAll": "取消全选", "fill": "填充 {{count}} 个选中的模型", + "fill_plural": "填充 {{count}} 个选中的模型", "failed": "获取模型失败" }, "catalog": { @@ -362,6 +363,7 @@ "delete": "删除目录", "refresh": "从上游刷新", "found": "共 {{count}} 个模型", + "found_plural": "共 {{count}} 个模型", "selectAll": "全选", "deselectAll": "取消全选", "addSelected": "添加 {{count}} 个选中模型", @@ -400,9 +402,7 @@ "searchProvider": "搜索服务商...", "noProvider": "未找到服务商。", "noCatalog": "Provider catalog 暂不可用。", - "local": "本地", - "custom": "自定义服务商...", - "customPlaceholder": "输入服务商名称..." + "local": "本地" } }, "channels": {