mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
548dc15acd
* feat(models): unify provider metadata around backend catalog - Move shared provider metadata and alias normalization into backend-owned provider catalog - Expose display, fetch, auth, and default model metadata through /api/models provider_options - Replace frontend static provider registry with catalog-driven selection, validation, grouping, and fallback rendering - Treat provider default api_base as placeholder and effective fetch/test base while keep submitted api_base separate from derived defaults - Add model page retry handling, touched locale updates, and provider metadata assertions in backend tests * fix(models): canonicalize backend provider aliases and common models * fix(models): restore deepseek common model recommendations
878 lines
46 KiB
JSON
878 lines
46 KiB
JSON
{
|
|
"navigation": {
|
|
"chat": "Chat",
|
|
"model_group": "Modelos",
|
|
"models": "Modelos",
|
|
"credentials": "Credenciais",
|
|
"agent_group": "Agente",
|
|
"hub": "Hub",
|
|
"skills": "Skills",
|
|
"tools": "Ferramentas",
|
|
"services": "Serviços",
|
|
"channels_group": "Canais",
|
|
"show_more_channels": "Mais",
|
|
"show_less_channels": "Menos",
|
|
"config": "Configuração",
|
|
"logs": "Logs"
|
|
},
|
|
"launcherLogin": {
|
|
"title": "Entrar",
|
|
"description": "Digite a senha do dashboard para continuar.",
|
|
"passwordLabel": "Senha",
|
|
"passwordPlaceholder": "Digite a senha",
|
|
"submit": "Entrar",
|
|
"errorInvalid": "Senha incorreta. Tente novamente.",
|
|
"errorNetwork": "Erro de rede. Tente novamente."
|
|
},
|
|
"launcherSetup": {
|
|
"title": "Definir senha do dashboard",
|
|
"description": "Escolha uma senha para proteger o acesso a este dashboard. Você a usará toda vez que entrar.",
|
|
"passwordLabel": "Senha",
|
|
"passwordPlaceholder": "Pelo menos 8 caracteres",
|
|
"confirmLabel": "Confirmar senha",
|
|
"confirmPlaceholder": "Repita a senha",
|
|
"submit": "Definir senha",
|
|
"errorMismatch": "As senhas não coincidem.",
|
|
"errorNetwork": "Erro de rede. Tente novamente."
|
|
},
|
|
"chat": {
|
|
"welcome": "Como posso te ajudar hoje?",
|
|
"welcomeDesc": "Pergunte sobre clima, configurações ou qualquer outra tarefa. Estou aqui para ajudar.",
|
|
"placeholder": "Inicie uma nova mensagem...",
|
|
"disabledPlaceholder": {
|
|
"gatewayUnknown": "Não é possível conversar: o status do Gateway ainda está sendo verificado. Aguarde e atualize a página ou reinicie o Launcher se necessário.",
|
|
"gatewayStarting": "Não é possível conversar: o Gateway está iniciando. Aguarde a inicialização concluir e tente novamente.",
|
|
"gatewayRestarting": "Não é possível conversar: o Gateway está reiniciando. Aguarde o reinício terminar.",
|
|
"gatewayStopping": "Não é possível conversar: o Gateway está parando. Aguarde até que pare e inicie o Gateway novamente.",
|
|
"gatewayStopped": "Não é possível conversar: o Gateway não está iniciado. Clique em Iniciar Gateway na barra superior e tente novamente.",
|
|
"gatewayError": "Não é possível conversar: o Gateway está em estado de erro. Verifique os logs e reinicie o Gateway ou o Launcher.",
|
|
"websocketConnecting": "Conectando ao serviço de chat... Aguarde.",
|
|
"websocketDisconnected": "Não é possível conversar: a conexão WebSocket está desconectada. Verifique a rede e o status do gateway, atualize a página ou reinicie o Launcher.",
|
|
"websocketError": "Não é possível conversar: a conexão WebSocket falhou. Verifique a rede e o status do gateway e tente novamente.",
|
|
"noDefaultModel": "Não é possível conversar: nenhum modelo padrão está selecionado. Defina um modelo padrão na página de Modelos."
|
|
},
|
|
"newChat": "Novo Chat",
|
|
"notConnected": "O Gateway não está rodando. Inicie-o para conversar.",
|
|
"thinking": {
|
|
"step1": "Pensando...",
|
|
"step2": "Analisando sua solicitação...",
|
|
"step3": "Preparando resposta...",
|
|
"step4": "Quase lá..."
|
|
},
|
|
"reasoningLabel": "Raciocínio",
|
|
"toolCallsLabel": "Chamadas de ferramentas",
|
|
"toolCallExplanationLabel": "Nota da chamada",
|
|
"toolCallFunctionLabel": "Resumo da chamada",
|
|
"toolCallArgumentsLabel": "Argumentos",
|
|
"showAssistantDetails": "Raciocínio e chamadas de ferramentas",
|
|
"assistantDetailVisibility": {
|
|
"none": "Não mostrar nenhum",
|
|
"thought": "Mostrar apenas raciocínio",
|
|
"toolCalls": "Mostrar apenas chamadas de ferramentas",
|
|
"all": "Mostrar ambos"
|
|
},
|
|
"toolLabel": "Ferramenta",
|
|
"codeLabel": "Código",
|
|
"copyMessage": "Copiar mensagem",
|
|
"copyCode": "Copiar código",
|
|
"copiedLabel": "Copiado",
|
|
"expandCode": "Expandir código",
|
|
"collapseCode": "Recolher código",
|
|
"history": "Histórico",
|
|
"noHistory": "Nenhum histórico de chat ainda",
|
|
"historyLoadFailed": "Falha ao carregar histórico de chat",
|
|
"historyOpenFailed": "Falha ao abrir este histórico de chat",
|
|
"loadingMore": "Carregando mais...",
|
|
"deleteSession": "Excluir sessão",
|
|
"messagesCount": "{{count}} mensagens",
|
|
"noModel": "Selecionar modelo",
|
|
"inputDisabled": {
|
|
"notConnected": "O Gateway não está rodando. Inicie-o para conversar.",
|
|
"noModel": "Nenhum modelo padrão configurado. Vá para a página de Modelos para definir um."
|
|
},
|
|
"sendMessage": "Enviar mensagem",
|
|
"sendHint": "Pressione Enter para enviar\nShift + Enter para nova linha",
|
|
"contextTitle": "Contexto",
|
|
"contextDetail": "Ver Detalhes",
|
|
"attachImage": "Adicionar imagens",
|
|
"removeImage": "Remover imagem",
|
|
"uploadedImage": "Imagem enviada",
|
|
"invalidImage": "\"{{name}}\" não é um arquivo de imagem suportado.",
|
|
"imageTooLarge": "\"{{name}}\" excede o limite de {{size}}.",
|
|
"imageReadFailed": "Falha ao ler \"{{name}}\".",
|
|
"empty": {
|
|
"noConfiguredModel": "Nenhum Modelo Configurado",
|
|
"noConfiguredModelDescription": "Você precisa configurar pelo menos um modelo de IA com uma API Key antes de iniciar o chat.",
|
|
"goToModels": "Ir para Modelos",
|
|
"noSelectedModel": "Nenhum Modelo Selecionado",
|
|
"noSelectedModelDescription": "Você tem modelos configurados, mas nenhum está definido como padrão. Selecione um modelo antes de iniciar o chat.",
|
|
"notRunning": "Gateway Não Está Rodando",
|
|
"notRunningDescription": "Inicie o serviço de gateway para começar a conversar. Use o botão Iniciar Gateway na barra superior."
|
|
},
|
|
"modelGroup": {
|
|
"apikey": "API Key",
|
|
"oauth": "OAuth",
|
|
"local": "Local"
|
|
}
|
|
},
|
|
"header": {
|
|
"logout": {
|
|
"tooltip": "Sair",
|
|
"confirm": "Sair",
|
|
"description": "Tem certeza de que deseja sair do dashboard?"
|
|
},
|
|
"gateway": {
|
|
"stopDialog": {
|
|
"title": "Parar o Serviço de Gateway?",
|
|
"description": "Tem certeza de que deseja parar o gateway? Isso desconectará suas sessões de chat ativas e interromperá a inferência.",
|
|
"confirm": "Parar Gateway"
|
|
},
|
|
"action": {
|
|
"start": "Iniciar Gateway",
|
|
"stop": "Parar Gateway",
|
|
"restart": "Reiniciar Gateway"
|
|
},
|
|
"status": {
|
|
"starting": "Iniciando Gateway...",
|
|
"restarting": "Reiniciando Gateway...",
|
|
"stopping": "Parando Gateway..."
|
|
},
|
|
"restartRequired": "Alterações de configuração requerem reiniciar o gateway para ter efeito."
|
|
}
|
|
},
|
|
"common": {
|
|
"cancel": "Cancelar",
|
|
"close": "Fechar",
|
|
"save": "Salvar",
|
|
"saving": "Salvando...",
|
|
"reset": "Redefinir",
|
|
"confirm": "Confirmar",
|
|
"fix": "Corrigir",
|
|
"saveChangesTitle": "Você tem alterações de configuração não salvas",
|
|
"restartRequiredTitle": "Reinício do gateway necessário",
|
|
"restartRequiredDesc": "A configuração mais recente de {{name}} foi salva. Reinicie o gateway para que tenha efeito."
|
|
},
|
|
"labels": {
|
|
"loading": "Carregando..."
|
|
},
|
|
"footer": {
|
|
"version": "Versão",
|
|
"commit": "Commit",
|
|
"build": "Build",
|
|
"version_unknown": "Desconhecido"
|
|
},
|
|
"credentials": {
|
|
"description": "Gerencie credenciais OAuth e baseadas em token para os provedores suportados.",
|
|
"loading": "Carregando credenciais...",
|
|
"providers": {
|
|
"openai": {
|
|
"description": "Suporta OAuth via navegador, device code e login por token."
|
|
},
|
|
"anthropic": {
|
|
"description": "Usa login por token para acesso ao Claude."
|
|
},
|
|
"antigravity": {
|
|
"description": "Usa OAuth via navegador para o Google Cloud Code Assist."
|
|
}
|
|
},
|
|
"status": {
|
|
"connected": "Conectado",
|
|
"needsRefresh": "Precisa atualizar",
|
|
"expired": "Expirado",
|
|
"notLoggedIn": "Não autenticado"
|
|
},
|
|
"actions": {
|
|
"browser": "OAuth via Navegador",
|
|
"deviceCode": "Device Code",
|
|
"stopLoading": "Parar Carregamento",
|
|
"saveToken": "Salvar",
|
|
"logout": "Sair"
|
|
},
|
|
"logoutDialog": {
|
|
"title": "Sair do provedor?",
|
|
"description": "Isso removerá sua credencial salva para {{provider}}."
|
|
},
|
|
"fields": {
|
|
"openaiToken": "Token OpenAI",
|
|
"anthropicToken": "Token Anthropic"
|
|
},
|
|
"labels": {
|
|
"account": "Conta",
|
|
"email": "Email",
|
|
"project": "Projeto"
|
|
},
|
|
"errors": {
|
|
"loadFailed": "Falha ao carregar credenciais",
|
|
"flowFailed": "Falha ao verificar fluxo de autenticação",
|
|
"loginFailed": "Falha no login",
|
|
"logoutFailed": "Falha ao sair",
|
|
"invalidBrowserResponse": "Resposta de login do navegador inválida",
|
|
"invalidDeviceResponse": "Resposta de device code inválida",
|
|
"popupBlocked": "Não foi possível abrir uma nova aba. Permita popups e tente novamente."
|
|
},
|
|
"flow": {
|
|
"current": "Status atual de autenticação",
|
|
"pending": "Aguardando autorização...",
|
|
"success": "Autenticação bem-sucedida",
|
|
"error": "Falha na autenticação",
|
|
"expired": "Sessão de autenticação expirada"
|
|
},
|
|
"device": {
|
|
"title": "Login por Device do OpenAI",
|
|
"description": "Abra a página de verificação e digite o código abaixo. Esta página será atualizada automaticamente.",
|
|
"code": "Código do Usuário",
|
|
"url": "URL de Verificação",
|
|
"polling": "Verificando status do login...",
|
|
"open": "Abrir Página de Verificação"
|
|
}
|
|
},
|
|
"models": {
|
|
"description": "Configure API Keys para provedores de IA. Apenas modelos configurados ficam disponíveis para o chat.",
|
|
"defaultChangeSuccess": "Modelo padrão atualizado.",
|
|
"unsavedPrompt": "Esta alteração ainda não foi salva. Salve para gravá-la na configuração do modelo.",
|
|
"restartHint": "Alterações na configuração de modelos só têm efeito após o gateway reiniciar.",
|
|
"loadError": "Falha ao carregar modelos",
|
|
"retry": "Tentar novamente",
|
|
"providerCatalogUnavailable": "O catálogo de providers do backend está indisponível. A seleção de novos providers fica desabilitada até a API de Modelos carregar com sucesso.",
|
|
"noDefaultHintPrefix": "Nenhum modelo padrão definido ainda. Clique em",
|
|
"noDefaultHintSuffix": "para definir um.",
|
|
"status": {
|
|
"available": "Disponível",
|
|
"unconfigured": "Não configurado",
|
|
"unreachable": "Serviço inacessível"
|
|
},
|
|
"badge": {
|
|
"default": "Padrão",
|
|
"virtual": "Virtual"
|
|
},
|
|
"action": {
|
|
"edit": "Editar API Key",
|
|
"setDefault": "Definir como padrão",
|
|
"delete": "Excluir modelo",
|
|
"setDefaultDisabled": {
|
|
"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"
|
|
},
|
|
"deleteDisabled": {
|
|
"isDefault": "Não é possível excluir o modelo padrão"
|
|
}
|
|
},
|
|
"defaultOnSave": {
|
|
"label": "Modelo Padrão",
|
|
"description": "Definir automaticamente este modelo como padrão após salvar.",
|
|
"unsupportedProvider": "Este provedor pode ser salvo na lista de modelos, mas não pode ser usado como modelo de chat padrão."
|
|
},
|
|
"add": {
|
|
"button": "Adicionar Modelo",
|
|
"title": "Adicionar Modelo Customizado",
|
|
"description": "Adicione um endpoint de modelo nativo ou compatível com OpenAI.",
|
|
"modelName": "Apelido do Modelo",
|
|
"modelNamePlaceholder": "ex: meu-gpt4",
|
|
"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.",
|
|
"errorRequired": "Este campo é obrigatório.",
|
|
"errorDuplicateModelName": "Apelido de modelo já existe. Use um nome diferente.",
|
|
"saveError": "Falha ao adicionar modelo",
|
|
"saveSuccess": "Modelo adicionado.",
|
|
"confirm": "Adicionar Modelo"
|
|
},
|
|
"delete": {
|
|
"title": "Excluir Modelo?",
|
|
"description": "\"{{name}}\" será removido permanentemente da sua lista de modelos. Esta ação não pode ser desfeita.",
|
|
"confirm": "Excluir"
|
|
},
|
|
"advanced": {
|
|
"toggle": "Opções avançadas"
|
|
},
|
|
"field": {
|
|
"provider": "Provider",
|
|
"providerPlaceholder": "Selecione um provider",
|
|
"providerHint": "Escolha um provider do catálogo do backend; o Identificador do Modelo será interpretado como o ID canônico desse provider.",
|
|
"providerInvalid": "O provider atual é inválido. Selecione um provider suportado.",
|
|
"selectProviderFirst": "Selecione um provider primeiro",
|
|
"apiBase": "URL Base da API",
|
|
"apiKey": "API Key",
|
|
"apiKeyPlaceholder": "Digite sua API Key",
|
|
"apiKeyPlaceholderSet": "Deixe em branco para manter a chave existente",
|
|
"proxy": "Proxy HTTP",
|
|
"proxyHint": "Opcional. ex: http://127.0.0.1:7890",
|
|
"authMethod": "Método de Autenticação",
|
|
"authMethodHint": "Método de autenticação: oauth, token. Deixe em branco para autenticação por API Key.",
|
|
"authMethodManagedHint": "O método de autenticação deste provider é gerenciado pelo sistema.",
|
|
"connectMode": "Modo de Conexão",
|
|
"connectModeHint": "Modo de conexão para providers baseados em CLI: stdio ou grpc.",
|
|
"workspace": "Caminho do Workspace",
|
|
"workspaceHint": "Diretório de trabalho para providers baseados em CLI (ex: GitHub Copilot).",
|
|
"requestTimeout": "Timeout da Requisição (s)",
|
|
"requestTimeoutHint": "Tempo máximo em segundos para aguardar uma resposta. 0 = usar padrão.",
|
|
"rpm": "Limite de Taxa (RPM)",
|
|
"rpmHint": "Máximo de requisições por minuto. 0 = sem limite.",
|
|
"thinkingLevel": "Nível de Pensamento",
|
|
"thinkingLevelHint": "Orçamento de pensamento estendido: off, low, medium, high, xhigh, adaptive.",
|
|
"maxTokensField": "Campo de Max Tokens",
|
|
"maxTokensFieldHint": "Sobrescreve o nome do campo de max tokens na requisição, ex: max_completion_tokens.",
|
|
"toolSchemaTransform": "Transformação de Schema de Ferramentas",
|
|
"toolSchemaTransformHint": "Transformação opcional de compatibilidade para schemas JSON de ferramentas. Deixe em branco para o comportamento nativo. Valor suportado: simple.",
|
|
"streamingEnabled": "Saída Streaming",
|
|
"streamingEnabledHint": "Permite que esta entrada de modelo tente requisições de provider streaming. O switch de streaming do canal atual também precisa estar habilitado.",
|
|
"extraBody": "Body Extra",
|
|
"extraBodyHint": "Campos JSON adicionais para injetar no body da requisição, ex: {\"reasoning_split\": true}.",
|
|
"customHeaders": "Headers Customizados",
|
|
"customHeadersHint": "Headers HTTP adicionais para injetar em cada requisição, ex: {\"X-Source\": \"coding-plan\"}.",
|
|
"invalidJson": "Formato JSON inválido"
|
|
},
|
|
"edit": {
|
|
"title": "Configurar {{name}}",
|
|
"apiKeyHint": "Já existe uma chave definida. Deixe em branco para mantê-la inalterada.",
|
|
"oauthNote": "Este provider usa OAuth — não é necessária API Key.",
|
|
"saveError": "Falha ao salvar",
|
|
"saveSuccess": "Configuração do modelo salva."
|
|
},
|
|
"fetch": {
|
|
"title": "Buscar Modelos Disponíveis",
|
|
"description": "Busque a lista de modelos do provider upstream.",
|
|
"providerLabel": "Provider:",
|
|
"needApiKey": "Digite primeiro uma API Key para buscar modelos.",
|
|
"fetching": "Buscando modelos...",
|
|
"retry": "Tentar novamente",
|
|
"filterPlaceholder": "Filtrar modelos...",
|
|
"found": "Encontrado {{count}} modelo",
|
|
"found_plural": "Encontrados {{count}} modelos",
|
|
"shown": "({{count}} exibidos)",
|
|
"selectAll": "Selecionar todos",
|
|
"deselectAll": "Desmarcar todos",
|
|
"fill": "Preencher {{count}} Modelo Selecionado",
|
|
"fill_plural": "Preencher {{count}} Modelos Selecionados",
|
|
"failed": "Falha ao buscar modelos"
|
|
},
|
|
"catalog": {
|
|
"button": "Catálogos Salvos",
|
|
"title": "Catálogos de Modelos Salvos",
|
|
"description": "Listas de modelos buscadas anteriormente, armazenadas por API key. Selecione modelos para adicionar à sua configuração.",
|
|
"loading": "Carregando catálogos...",
|
|
"empty": "Ainda não há catálogos salvos. Busque modelos de um provider para salvar um catálogo.",
|
|
"filterPlaceholder": "Filtrar modelos...",
|
|
"models": "modelos",
|
|
"fetchedAt": "Obtido em",
|
|
"delete": "Excluir catálogo",
|
|
"refresh": "Atualizar do upstream",
|
|
"found": "Encontrado {{count}} modelo",
|
|
"found_plural": "Encontrados {{count}} modelos",
|
|
"selectAll": "Selecionar todos",
|
|
"deselectAll": "Desmarcar todos",
|
|
"addSelected": "Adicionar {{count}} Selecionados",
|
|
"addSuccess": "{{count}} modelo(s) adicionados à configuração.",
|
|
"needApiKey": "Esses modelos exigem uma API key. Será necessário configurar as credenciais após a importação."
|
|
},
|
|
"test": {
|
|
"title": "Testar Conectividade do Modelo",
|
|
"description": "Verifique se o endpoint do modelo está acessível e configurado corretamente.",
|
|
"modelLabel": "Modelo:",
|
|
"identifierLabel": "Identificador:",
|
|
"endpointLabel": "Endpoint:",
|
|
"testConnection": "Testar Conexão",
|
|
"testing": "Testando conexão...",
|
|
"success": "Conexão bem-sucedida",
|
|
"responseTime": "Tempo de resposta: {{ms}}ms",
|
|
"failed": "Falha na conexão",
|
|
"status": "Status: {{status}}",
|
|
"testFailed": "Falha no teste",
|
|
"testAgain": "Testar novamente"
|
|
},
|
|
"validation": {
|
|
"whitespace": "O identificador do modelo não pode conter espaços",
|
|
"leadingSlash": "Não deve começar com /",
|
|
"consecutiveSlash": "Não deve conter // consecutivos",
|
|
"useProvider": "Usará \"{{provider}}\" como provider",
|
|
"defaultToOpenAI": "Nenhum provider especificado, o padrão será OpenAI",
|
|
"emptyModel": "O nome do modelo não pode estar vazio",
|
|
"shouldUse": "\"{{provider}}\" deve usar \"{{alias}}\"",
|
|
"didYouMean": "Você quis dizer \"{{closest}}\"?",
|
|
"unknownProvider": "Provider desconhecido \"{{provider}}\"",
|
|
"parsed": "provider={{provider}}, model={{model}}"
|
|
},
|
|
"combobox": {
|
|
"selectProvider": "Selecionar provider...",
|
|
"searchProvider": "Buscar provider...",
|
|
"noProvider": "Nenhum provider encontrado.",
|
|
"noCatalog": "Catálogo de providers indisponível.",
|
|
"local": "local"
|
|
}
|
|
},
|
|
"channels": {
|
|
"loadError": "Falha ao carregar canais",
|
|
"name": {
|
|
"telegram": "Telegram",
|
|
"discord": "Discord",
|
|
"slack": "Slack",
|
|
"feishu": "Feishu",
|
|
"dingtalk": "DingTalk",
|
|
"line": "LINE",
|
|
"qq": "QQ",
|
|
"onebot": "OneBot",
|
|
"wecom": "WeCom",
|
|
"whatsapp": "WhatsApp",
|
|
"whatsapp_native": "WhatsApp Nativo",
|
|
"pico": "Web",
|
|
"maixcam": "MaixCam",
|
|
"matrix": "Matrix",
|
|
"irc": "IRC",
|
|
"weixin": "WeChat"
|
|
},
|
|
"weixin": {
|
|
"bindTitle": "Vincular Conta do WeChat",
|
|
"bindDesc": "Escaneie o QR code com o WeChat para vincular sua conta pessoal.",
|
|
"bind": "Vincular WeChat",
|
|
"rebind": "Re-vincular",
|
|
"bound": "WeChat Vinculado",
|
|
"notBound": "Conta do WeChat ainda não vinculada.",
|
|
"generating": "Gerando QR code...",
|
|
"scanHint": "Abra o WeChat e escaneie o QR code",
|
|
"scanned": "Escaneado — confirme no WeChat",
|
|
"expired": "QR code expirado",
|
|
"retry": "Tentar Novamente",
|
|
"refresh": "Atualizar QR",
|
|
"errorGeneric": "Ocorreu um erro. Tente novamente."
|
|
},
|
|
"wecom": {
|
|
"bindTitle": "Vincular WeCom",
|
|
"bindDesc": "Escaneie o QR code com o WeCom para vincular seu AI Bot.",
|
|
"bind": "Vincular WeCom",
|
|
"rebind": "Re-vincular",
|
|
"bound": "WeCom Vinculado",
|
|
"notBound": "AI Bot do WeCom ainda não vinculado.",
|
|
"generating": "Gerando QR code...",
|
|
"scanHint": "Abra o WeCom e escaneie o QR code",
|
|
"scanned": "Escaneado, confirme no WeCom",
|
|
"expired": "QR code expirado",
|
|
"retry": "Tentar Novamente",
|
|
"refresh": "Atualizar QR",
|
|
"errorGeneric": "Ocorreu um erro. Tente novamente."
|
|
},
|
|
"field": {
|
|
"token": "Token do Bot",
|
|
"tokenPlaceholder": "Digite o token do bot",
|
|
"botToken": "Token do Bot",
|
|
"appToken": "App Token",
|
|
"appId": "App ID",
|
|
"appSecret": "App Secret",
|
|
"verificationToken": "Token de Verificação",
|
|
"encryptKey": "Chave de Criptografia",
|
|
"baseUrl": "URL Base da API",
|
|
"proxy": "Proxy HTTP",
|
|
"mentionOnly": "Apenas com Menção",
|
|
"typingEnabled": "Indicador de Digitação",
|
|
"placeholderEnabled": "Mensagem de Placeholder",
|
|
"placeholderText": "Texto do Placeholder",
|
|
"streamingEnabled": "Saída Streaming",
|
|
"streamingThrottleSeconds": "Intervalo de Atualização (s)",
|
|
"streamingMinGrowthChars": "Caracteres Mínimos de Crescimento",
|
|
"groupTriggerMentionOnly": "Apenas Menção em Grupo",
|
|
"groupTriggerPrefixes": "Prefixos de Trigger em Grupo",
|
|
"groupTriggerPrefixesPlaceholder": "ex: /, !, ?",
|
|
"randomReactionEmoji": "Emoji de Reação Aleatório",
|
|
"randomReactionEmojiPlaceholder": "ex: THUMBSUP, HEART, SMILE",
|
|
"isLark": "Lark (Internacional)",
|
|
"allowFrom": "Permitir De",
|
|
"allowFromPlaceholder": "ex: 123456, 789012",
|
|
"allowOrigins": "Origens Permitidas",
|
|
"allowOriginsPlaceholder": "ex: https://exemplo.com, http://localhost:5173",
|
|
"removeListItem": "Remover {{value}}",
|
|
"secretPlaceholder": "Digite o segredo",
|
|
"secretHintSet": "Já existe um valor definido. Deixe em branco para mantê-lo inalterado."
|
|
},
|
|
"page": {
|
|
"notFound": "Canal \"{{name}}\" não é suportado.",
|
|
"saveSuccess": "Configuração do canal salva.",
|
|
"saveError": "Falha ao salvar configuração do canal",
|
|
"savePrompt": "Esta alteração ainda não foi salva. Salve para gravá-la na configuração do canal.",
|
|
"docLink": "Documentação",
|
|
"enableLabel": "Habilitar canal",
|
|
"restartRequiredTitle": "Reinício do gateway necessário",
|
|
"restartRequiredDesc": "A configuração mais recente de {{name}} foi salva. Reinicie o gateway para que tenha efeito."
|
|
},
|
|
"form": {
|
|
"desc": {
|
|
"token": "Token de acesso do bot usado para conectar à API da plataforma.",
|
|
"botToken": "Token do bot usado para enviar e receber mensagens.",
|
|
"appToken": "App token usado para conexões em modo Socket.",
|
|
"appId": "ID único da aplicação usado para autenticação.",
|
|
"appSecret": "Segredo da aplicação usado para assinatura e autenticação.",
|
|
"verificationToken": "Token de verificação para callbacks de eventos.",
|
|
"encryptKey": "Chave de criptografia usada para descriptografar payloads de callback.",
|
|
"baseUrl": "URL base da API da plataforma. O endpoint oficial é usado por padrão.",
|
|
"proxy": "Endereço de proxy HTTP para acesso de rede de saída.",
|
|
"mentionOnly": "Responder apenas quando o bot for explicitamente mencionado em chats em grupo.",
|
|
"typingEnabled": "Exibir status de digitação enquanto o assistente está gerando uma resposta.",
|
|
"placeholderEnabled": "Habilitar mensagens de placeholder temporárias antes da resposta final ser enviada.",
|
|
"streamingEnabled": "Permite que este canal exiba output streaming do provider. O switch de streaming da entrada de modelo atual também precisa estar habilitado.",
|
|
"streamingThrottleSeconds": "Intervalo mínimo entre atualizações intermediárias de streaming. 0 significa usar o padrão. Respostas finais não são limitadas.",
|
|
"streamingMinGrowthChars": "Crescimento mínimo de texto antes de enviar outra atualização intermediária. 0 significa usar o padrão. Respostas finais não são limitadas.",
|
|
"groupTriggerMentionOnly": "Em chats em grupo, responder apenas quando o bot for mencionado.",
|
|
"groupTriggerPrefixes": "Prefixos customizados de trigger para chats em grupo. Adicione itens um a um ou cole vários valores de uma vez.",
|
|
"randomReactionEmoji": "PicoClaw adiciona reações de emoji às mensagens dos usuários para confirmar recebimento. Exemplo: \"THUMBSUP\", \"HEART\", \"SMILE\". Deixe vazio para usar o emoji \"Pin\" padrão.",
|
|
"isLark": "Usar o domínio internacional do Lark (open.larksuite.com) em vez do domínio do Feishu (open.feishu.cn).",
|
|
"allowFrom": "IDs de usuário ou grupo permitidos. Adicione itens um a um ou cole vários valores de uma vez.",
|
|
"allowOrigins": "Domínios de origem permitidos. Adicione itens um a um ou cole vários valores de uma vez.",
|
|
"wsUrl": "URL do serviço WebSocket.",
|
|
"reconnectInterval": "Intervalo de reconexão após desconexão (segundos).",
|
|
"bridgeUrl": "URL do serviço de bridge.",
|
|
"sessionStorePath": "Caminho local para armazenamento de sessões.",
|
|
"useNative": "Se deve usar modo de cliente nativo.",
|
|
"host": "Endereço do host do serviço.",
|
|
"port": "Porta do serviço.",
|
|
"homeserver": "URL do homeserver Matrix.",
|
|
"userId": "ID de usuário da conta.",
|
|
"deviceId": "ID do dispositivo.",
|
|
"joinOnInvite": "Entrar automaticamente em salas quando convidado.",
|
|
"clientId": "Client ID usado para autenticação na plataforma.",
|
|
"corpId": "Corp ID corporativo.",
|
|
"agentId": "Agent ID da aplicação corporativa.",
|
|
"webhookUrl": "URL completa do webhook.",
|
|
"webhookHost": "Host de escuta do webhook.",
|
|
"webhookPort": "Porta de escuta do webhook.",
|
|
"webhookPath": "Caminho de rota do webhook.",
|
|
"replyTimeout": "Timeout de resposta em segundos.",
|
|
"maxSteps": "Número máximo de passos de processamento.",
|
|
"welcomeMessage": "Conteúdo da mensagem de boas-vindas para novas sessões.",
|
|
"allowTokenQuery": "Permitir token nos parâmetros de query da URL.",
|
|
"pingInterval": "Intervalo de heartbeat da conexão em segundos.",
|
|
"readTimeout": "Timeout de leitura em segundos.",
|
|
"writeTimeout": "Timeout de escrita em segundos.",
|
|
"maxConnections": "Número máximo de conexões concorrentes.",
|
|
"server": "Endereço do servidor IRC.",
|
|
"tls": "Se deve habilitar TLS.",
|
|
"nick": "Apelido do bot.",
|
|
"user": "Nome de usuário do IRC.",
|
|
"realName": "Nome real exibido.",
|
|
"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}}."
|
|
}
|
|
},
|
|
"validation": {
|
|
"requiredField": "Este campo é obrigatório."
|
|
}
|
|
},
|
|
"pages": {
|
|
"agent": {
|
|
"load_error": "Falha ao carregar informações de suporte do agente.",
|
|
"skills": {
|
|
"empty": "Nenhuma skill disponível no momento.",
|
|
"install_success": "{{name}} instalada.",
|
|
"install_error": "Falha ao instalar skill.",
|
|
"search_placeholder": "Pesquisar por nome, descrição ou registry",
|
|
"source_label": "Tipo",
|
|
"sort_label": "Ordenar",
|
|
"import": "Importar Skill",
|
|
"import_success": "Skill importada.",
|
|
"import_error": "Falha ao importar skill.",
|
|
"import_invalid_type": "Apenas arquivos de skill em Markdown ou ZIP são suportados.",
|
|
"import_invalid_size": "O arquivo de skill deve ter 1 MB ou menos.",
|
|
"import_constraints": "Importe um arquivo de skill em Markdown ou ZIP de até 1 MB",
|
|
"view": "Visualizar",
|
|
"delete": "Excluir",
|
|
"delete_title": "Excluir Skill?",
|
|
"delete_description": "\"{{name}}\" será removida das skills do workspace.",
|
|
"delete_confirm": "Excluir",
|
|
"delete_success": "Skill excluída.",
|
|
"delete_error": "Falha ao excluir skill.",
|
|
"viewer_title": "Conteúdo da Skill",
|
|
"viewer_description": "Leia aqui o conteúdo efetivo atual de SKILL.md.",
|
|
"load_detail_error": "Falha ao carregar conteúdo da skill.",
|
|
"no_description": "Nenhuma descrição fornecida.",
|
|
"no_results": "Nenhuma skill corresponde aos filtros atuais.",
|
|
"dropzone_title": "Importar para o Workspace",
|
|
"dropzone_description": "Arraste um arquivo de skill aqui ou escolha um do disco.",
|
|
"dropzone_label": "Solte um arquivo de skill aqui",
|
|
"dropzone_active": "Solte para importar esta skill",
|
|
"dropzone_release": "A skill será normalizada e salva no diretório de skills do workspace.",
|
|
"marketplace_title": "Descobrir Skills",
|
|
"marketplace_description": "Pesquise nos registries de skills e instale skills úteis neste workspace",
|
|
"marketplace_search_placeholder": "Pesquise capacidades como github, docker, database...",
|
|
"marketplace_search_action": "Pesquisar",
|
|
"marketplace_search_status": "Status da Pesquisa",
|
|
"marketplace_install_status": "Status da Instalação",
|
|
"marketplace_notice_title": "Aviso de Segurança",
|
|
"marketplace_notice_body": "Skills do registry são conteúdo de terceiros. Revise o autor, URL da página, instruções e qualquer código ou credencial requerida antes de instalar.",
|
|
"marketplace_status_disabled": "Desabilitado. Habilite a ferramenta correspondente na página de Ferramentas primeiro.",
|
|
"marketplace_status_enable_hint": "Habilite a ferramenta relacionada na página de Ferramentas primeiro.",
|
|
"marketplace_search_error": "Falha ao pesquisar registries.",
|
|
"marketplace_loading_results": "Pesquisando skills...",
|
|
"marketplace_loading_more": "Carregando mais skills...",
|
|
"marketplace_results_title": "{{count}} resultados para “{{query}}”",
|
|
"marketplace_results_hint": "Resultados do registry instalam no workspace atual.",
|
|
"marketplace_install_action": "Instalar",
|
|
"marketplace_installed": "Instalada",
|
|
"marketplace_view_installed": "Ver Local",
|
|
"marketplace_installed_hint": "Já disponível neste workspace como “{{name}}”.",
|
|
"marketplace_empty_results": "Nenhuma skill instalável encontrada para “{{query}}”.",
|
|
"marketplace_idle": "Pesquise por uma capacidade para descobrir skills instaláveis nos registries configurados.",
|
|
"marketplace_unavailable": "Pesquisa de registries indisponível no momento. Verifique a configuração das ferramentas de Skills.",
|
|
"sort": {
|
|
"name_asc": "Nome (A-Z)",
|
|
"name_desc": "Nome (Z-A)",
|
|
"source": "Tipo"
|
|
},
|
|
"origin": {
|
|
"all": "Todos os Tipos",
|
|
"builtin": "Embutida",
|
|
"third_party": "Terceiros",
|
|
"manual": "Manual"
|
|
},
|
|
"summary": {
|
|
"total": "Total de Skills"
|
|
},
|
|
"detail_tabs": {
|
|
"preview": "Visualização",
|
|
"raw": "Bruto",
|
|
"meta": "Metadados"
|
|
},
|
|
"metadata": {
|
|
"name": "Nome",
|
|
"description": "Descrição",
|
|
"registry": "Registry",
|
|
"url": "URL",
|
|
"version": "Versão Instalada",
|
|
"lines": "Quantidade de Linhas",
|
|
"characters": "Quantidade de Caracteres"
|
|
},
|
|
"marketplace_installDisabled": {
|
|
"installing": "Instalando...",
|
|
"installed": "Já instalada",
|
|
"cannotInstall": "Não é possível instalar: ferramenta relacionada não está habilitada"
|
|
}
|
|
},
|
|
"tools": {
|
|
"search_placeholder": "Pesquisar ferramentas...",
|
|
"no_results": "Nenhuma ferramenta corresponde aos seus critérios.",
|
|
"filter": {
|
|
"all": "Todos os Status",
|
|
"enabled": "Habilitada",
|
|
"disabled": "Desabilitada",
|
|
"blocked": "Bloqueada"
|
|
},
|
|
"empty": "Nenhuma ferramenta disponível.",
|
|
"enable_success": "Ferramenta habilitada.",
|
|
"disable_success": "Ferramenta desabilitada.",
|
|
"toggle_error": "Falha ao atualizar estado da ferramenta.",
|
|
"library_title": "Biblioteca de Ferramentas",
|
|
"library_description": "Navegue e gerencie o conjunto de ferramentas disponíveis para seus agentes de IA.",
|
|
"web_search": {
|
|
"title": "Pesquisa Web",
|
|
"description": "Fornece capacidade de pesquisa web aos agentes para encontrar informações atualizadas do mundo real. Roteia automaticamente para o provedor ativo ideal.",
|
|
"unsaved_prompt": "Esta alteração ainda não foi salva. Salve para gravá-la na configuração de Pesquisa Web.",
|
|
"global_settings": "Geral",
|
|
"providers_config": "Integrações",
|
|
"load_error": "Falha ao carregar configuração de pesquisa web.",
|
|
"save": "Salvar Alterações",
|
|
"open_settings": "Abrir Configurações",
|
|
"save_success": "Configurações salvas com sucesso.",
|
|
"save_error": "Falha ao salvar configurações.",
|
|
"provider": "Provedor Principal",
|
|
"provider_description": "Selecione o provedor padrão a ser usado quando a ferramenta de pesquisa web atender a uma requisição.",
|
|
"proxy": "Proxy HTTPS",
|
|
"proxy_description": "Proxy HTTP/S global opcional para requisições web subjacentes.",
|
|
"prefer_native": "Preferir Pesquisa Nativa",
|
|
"prefer_native_hint": "Quando habilitado, o modelo pode usar sua capacidade de pesquisa nativa em vez da lista de provedores configurados.",
|
|
"provider_hint": "Habilite este provedor e preencha as configurações de conexão necessárias.",
|
|
"max_results": "Máx. de Resultados",
|
|
"base_url": "URL Base",
|
|
"base_url_placeholder": "Sobrescrita opcional do endpoint",
|
|
"api_key": "API Key / Token",
|
|
"api_key_placeholder": "Digite a API Key, deixe em branco para manter a chave original",
|
|
"none": "Indisponível"
|
|
},
|
|
"status": {
|
|
"enabled": "Habilitada",
|
|
"disabled": "Desabilitada",
|
|
"blocked": "Bloqueada"
|
|
},
|
|
"categories": {
|
|
"automation": "Automação",
|
|
"filesystem": "Sistema de Arquivos",
|
|
"web": "Web",
|
|
"communication": "Comunicação",
|
|
"skills": "Skills",
|
|
"agents": "Agentes",
|
|
"hardware": "Hardware",
|
|
"discovery": "Descoberta"
|
|
},
|
|
"reasons": {
|
|
"requires_linux": "Esta ferramenta só funciona em hosts Linux com os arquivos de dispositivo necessários expostos.",
|
|
"requires_serial_platform": "Esta ferramenta atualmente suporta hosts Linux, macOS e Windows com portas seriais acessíveis.",
|
|
"requires_skills": "Habilite `tools.skills` antes que esta ferramenta de skill-registry possa ser usada.",
|
|
"requires_subagent": "Habilite `tools.subagent` antes que a ferramenta de spawn possa delegar trabalho.",
|
|
"requires_mcp_discovery": "Habilite `tools.mcp.discovery` antes que as ferramentas de descoberta MCP fiquem disponíveis.",
|
|
"requires_web_search_provider": "Configure ao menos um provedor externo de pesquisa web pronto para uso."
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"load_error": "Falha ao carregar configuração. Atualize a página e tente novamente.",
|
|
"workspace": "Diretório do Workspace",
|
|
"workspace_hint": "Diretório base para operações de arquivo do agente.",
|
|
"restrict_workspace": "Restringir ao Workspace",
|
|
"restrict_workspace_hint": "Permitir operações de arquivo apenas dentro do workspace.",
|
|
"split_on_marker": "Modo Tagarela",
|
|
"split_on_marker_hint": "Dividir mensagens longas em várias curtas, como em uma conversa real.",
|
|
"tool_feedback_enabled": "Feedback de Ferramentas",
|
|
"tool_feedback_enabled_hint": "Enviar uma breve nota de execução no chat atual antes de cada ferramenta rodar.",
|
|
"tool_feedback_separate_messages": "Mensagens de Feedback Separadas",
|
|
"tool_feedback_separate_messages_hint": "Manter cada atualização de feedback de ferramenta como uma mensagem própria no chat em vez de reusar uma única mensagem de placeholder/progresso.",
|
|
"tool_feedback_max_args_length": "Tamanho do Preview de Args da Ferramenta",
|
|
"tool_feedback_max_args_length_hint": "Número máximo de caracteres exibidos em cada preview de argumento da ferramenta. Defina 0 para usar o padrão.",
|
|
"exec_enabled": "Permitir Comandos",
|
|
"exec_enabled_hint": "Habilita ou desabilita execução de comandos para o app. Quando desabilitado, nenhuma requisição de comando rodará.",
|
|
"allow_remote": "Permitir Comandos Remotos",
|
|
"allow_remote_hint": "Quando habilitado, sessões remotas ou contextos não locais também podem executar comandos. Quando desabilitado, a execução de comandos fica limitada a contextos locais seguros.",
|
|
"enable_deny_patterns": "Habilitar Lista Negra",
|
|
"enable_deny_patterns_hint": "Quando habilitado, o app bloqueia comandos que correspondam aos seus padrões perigosos embutidos e à lista negra customizada abaixo.",
|
|
"exec_timeout_seconds": "Timeout de Comando (segundos)",
|
|
"exec_timeout_seconds_hint": "Tempo máximo de execução para requisições de comando. Defina 0 para usar o timeout padrão.",
|
|
"custom_deny_patterns": "Lista Negra de Comandos",
|
|
"custom_deny_patterns_hint": "Adicione regras extras de bloqueio de comando, uma expressão regular por linha. Um comando que casar com qualquer regra aqui será bloqueado.",
|
|
"custom_allow_patterns": "Lista Branca de Comandos",
|
|
"custom_allow_patterns_hint": "Adicione regras extras de permissão de comando, uma expressão regular por linha. Um comando que casar com qualquer regra aqui pula a verificação da lista negra, mas outros limites de segurança ainda se aplicam.",
|
|
"custom_patterns_placeholder": "^rm\\s+-rf\\b\n^git\\s+push\\b",
|
|
"pattern_detector_title": "Ferramenta de Detecção de Padrões",
|
|
"pattern_detector_hint": "Digite um comando para testar se ele casa com algum padrão da lista negra ou branca.",
|
|
"pattern_detector_input_placeholder": "Digite um comando para testar, ex: rm -rf /tmp",
|
|
"pattern_detector_test_button": "Testar",
|
|
"pattern_detector_result_allowed": "Permitido (corresponde à lista branca)",
|
|
"pattern_detector_result_blocked": "Bloqueado (corresponde à lista negra)",
|
|
"pattern_detector_result_no_match": "Sem correspondência (usará as regras padrão)",
|
|
"allow_shell_execution": "Permitir Comandos Agendados",
|
|
"allow_shell_execution_hint": "Permitir que tarefas agendadas executem comandos por padrão. Quando desabilitado, usuários precisam passar command_confirm=true para agendar uma tarefa de comando.",
|
|
"cron_exec_timeout": "Timeout de Comando Agendado (minutos)",
|
|
"cron_exec_timeout_hint": "Tempo máximo de execução para comandos agendados. Defina 0 para desabilitar o timeout.",
|
|
"max_tokens": "Max Tokens",
|
|
"max_tokens_hint": "Limite superior de tokens por resposta do modelo.",
|
|
"context_window": "Janela de Contexto",
|
|
"context_window_hint": "Capacidade do contexto de entrada do modelo em tokens. Deixe vazio para usar o padrão (4x max tokens).",
|
|
"max_tool_iterations": "Máx. de Iterações de Ferramenta",
|
|
"max_tool_iterations_hint": "Loops máximos de chamadas de ferramenta em uma única tarefa.",
|
|
"summarize_threshold": "Limite para Resumir Mensagens",
|
|
"summarize_threshold_hint": "Iniciar resumo após este número de mensagens.",
|
|
"summarize_token_percent": "Percentual de Token para Resumir",
|
|
"summarize_token_percent_hint": "Usado quando o resumo da conversa é acionado.",
|
|
"session_scope": "Escopo da Sessão",
|
|
"session_scope_hint": "Como o contexto do chat é isolado entre peers/canais.",
|
|
"session_scope_per_channel_peer": "Por Canal + Peer",
|
|
"session_scope_per_channel_peer_desc": "Contexto separado para cada usuário em cada canal.",
|
|
"session_scope_per_channel": "Por Canal",
|
|
"session_scope_per_channel_desc": "Um contexto compartilhado por canal.",
|
|
"session_scope_per_peer": "Por Peer",
|
|
"session_scope_per_peer_desc": "Um contexto por usuário entre canais.",
|
|
"session_scope_global": "Global",
|
|
"session_scope_global_desc": "Todas as mensagens compartilham um contexto global.",
|
|
"heartbeat_enabled": "Heartbeat",
|
|
"heartbeat_enabled_hint": "Enviar mensagens de heartbeat periódicas.",
|
|
"heartbeat_interval": "Intervalo do Heartbeat (minutos)",
|
|
"heartbeat_interval_hint": "Intervalo em minutos entre sinais de heartbeat.",
|
|
"devices_enabled": "Habilitar Dispositivos",
|
|
"devices_enabled_hint": "Habilitar integrações com dispositivos de hardware.",
|
|
"monitor_usb": "Monitorar USB",
|
|
"monitor_usb_hint": "Observar eventos de plug/unplug USB quando dispositivos estiverem habilitados.",
|
|
"autostart_label": "Iniciar no Login",
|
|
"autostart_hint": "Iniciar o PicoClaw Web automaticamente quando você fizer login.",
|
|
"autostart_unsupported": "Iniciar no login não é suportado nesta plataforma.",
|
|
"autostart_load_error": "Falha ao carregar status de iniciar no login.",
|
|
"server_port": "Porta do Serviço",
|
|
"server_port_hint": "Porta HTTP usada pelo PicoClaw Web.",
|
|
"launcher_section_hint": "Alterações nesta seção entram em vigor após o launcher reiniciar.",
|
|
"gateway_restart_hint": "Alterações nesta seção entram em vigor após o gateway reiniciar.",
|
|
"dashboard_password": "Senha de Login",
|
|
"dashboard_password_hint": "Defina uma nova senha de login.",
|
|
"dashboard_password_placeholder": "Pelo menos 8 caracteres",
|
|
"dashboard_password_confirm": "Confirmar Nova Senha",
|
|
"dashboard_password_confirm_hint": "Digite a nova senha de login novamente.",
|
|
"dashboard_password_confirm_placeholder": "Repita a senha",
|
|
"dashboard_password_required": "Digite e confirme a nova senha de login.",
|
|
"dashboard_password_mismatch": "As senhas de login não coincidem.",
|
|
"dashboard_password_min_length": "A senha de login deve ter pelo menos 8 caracteres.",
|
|
"lan_access": "Habilitar Acesso pela LAN",
|
|
"lan_access_hint": "Permitir acesso de outros dispositivos na sua rede local.",
|
|
"allowed_cidrs": "CIDRs de Rede Permitidos",
|
|
"allowed_cidrs_hint": "Apenas clientes destes intervalos CIDR podem acessar o serviço. Um por linha ou separados por vírgula. Deixe vazio para permitir todos.",
|
|
"allowed_cidrs_placeholder": "192.168.1.0/24\n10.0.0.0/8",
|
|
"evolution_section_hint": "Permite que o agente aprenda com turnos concluídos e prepare melhorias de skills.",
|
|
"evolution_enabled": "Habilitar Evolução",
|
|
"evolution_enabled_hint": "Registrar dados de aprendizado para turnos concluídos. Os modos Draft e Apply também podem gerar atualizações de skills.",
|
|
"evolution_mode": "Modo de Evolução",
|
|
"evolution_mode_hint": "Observe apenas registra dados, Draft prepara skills candidatas, Apply pode gravar drafts aceitos nas skills do workspace.",
|
|
"evolution_mode_observe": "Observe",
|
|
"evolution_mode_draft": "Draft",
|
|
"evolution_mode_apply": "Apply",
|
|
"evolution_state_dir": "Diretório de Estado",
|
|
"evolution_state_dir_hint": "Diretório opcional para o estado de evolução. Deixe vazio para usar o padrão do workspace.",
|
|
"evolution_min_task_count": "Contagem Mínima de Tarefas",
|
|
"evolution_min_task_count_hint": "Número mínimo de tarefas relacionadas antes que um padrão possa produzir um draft.",
|
|
"evolution_min_success_ratio": "Taxa Mínima de Sucesso",
|
|
"evolution_min_success_ratio_hint": "Taxa de sucesso exigida para tarefas agrupadas. Use um valor maior que 0 e até 1.",
|
|
"evolution_cold_path_trigger": "Acionador Cold Path",
|
|
"evolution_cold_path_trigger_hint": "Escolha quando a geração de drafts roda para registros de aprendizado elegíveis.",
|
|
"evolution_cold_path_after_turn": "Após cada turno",
|
|
"evolution_cold_path_scheduled": "Agendado",
|
|
"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.",
|
|
"sections": {
|
|
"agent": "Agente",
|
|
"runtime": "Runtime",
|
|
"evolution": "Evolução",
|
|
"exec": "Execução de Comandos",
|
|
"cron": "Tarefas Agendadas",
|
|
"launcher": "Launcher",
|
|
"devices": "Dispositivos"
|
|
},
|
|
"open_raw": "Configuração Bruta",
|
|
"back_to_visual": "Configuração Visual",
|
|
"raw_json_title": "Configuração JSON Bruta",
|
|
"json_placeholder": "Digite uma configuração JSON válida...",
|
|
"save_success": "Configuração salva com sucesso.",
|
|
"save_error": "Falha ao salvar configuração.",
|
|
"reset_confirm_title": "Redefinir Alterações",
|
|
"reset_confirm_desc": "Tem certeza de que deseja redefinir suas alterações não salvas para o último estado salvo?",
|
|
"reset_success": "Alterações foram redefinidas para o último estado salvo.",
|
|
"invalid_json": "Formato JSON inválido.",
|
|
"format_success": "JSON formatado com sucesso.",
|
|
"format_error": "Formato JSON inválido.",
|
|
"format": "Formatar",
|
|
"unsaved_changes": "Você tem alterações não salvas."
|
|
},
|
|
"logs": {
|
|
"log_level_error": "Falha ao atualizar nível de log.",
|
|
"clear": "Limpar logs",
|
|
"empty": "Aguardando logs..."
|
|
}
|
|
},
|
|
"tour": {
|
|
"skip": "Pular tour",
|
|
"prev": "Anterior",
|
|
"next": "Próximo",
|
|
"finish": "Concluir",
|
|
"welcome": {
|
|
"title": "Bem-vindo ao PicoClaw",
|
|
"description": "PicoClaw é uma plataforma poderosa de assistente de IA. Vamos levar alguns segundos para te ajudar a concluir a configuração básica."
|
|
},
|
|
"models": {
|
|
"title": "Configurar Modelos",
|
|
"description": "Clique no menu \"Modelos\" à esquerda para configurar API Keys dos provedores de IA. Apenas modelos configurados podem ser usados no chat."
|
|
},
|
|
"gateway": {
|
|
"title": "Iniciar Gateway",
|
|
"description": "Após configurar modelos, clique no botão \"Iniciar Gateway\" no topo para começar a conversar com a IA."
|
|
},
|
|
"docs": {
|
|
"title": "Ver Documentação",
|
|
"description": "Precisa de mais ajuda? Clique no botão de documentação no canto superior direito para ver guias detalhados e documentação de configuração."
|
|
}
|
|
}
|
|
}
|