Merge remote-tracking branch pr/1242 into stage/batch-v0.50.238

This commit is contained in:
Hermes Agent
2026-04-29 15:11:25 +00:00
+635
View File
@@ -3959,6 +3959,641 @@ const LOCALES = {
composer_disabled_empty: '\u8acb\u8f38\u5165\u8a0a\u606f\u5f8c\u50b3\u9001',
},
pt: {
_lang: 'pt',
_label: 'Português',
_speech: 'pt-BR',
// boot.js
cancelling: 'Cancelando…',
cancel_failed: 'Falha ao cancelar: ',
mic_denied: 'Acesso ao microfone negado. Verifique as permissões do navegador.',
mic_no_speech: 'Nenhuma fala detectada. Tente novamente.',
mic_network: 'Reconhecimento de fala indisponível.',
mic_error: 'Erro no input de voz: ',
session_imported: 'Sessão importada',
import_failed: 'Falha na importação: ',
import_invalid_json: 'JSON inválido',
image_pasted: 'Imagem colada: ',
// messages.js
edit_message: 'Editar mensagem',
regenerate: 'Regenerar resposta',
copy: 'Copiar',
copied: 'Copiado!',
copy_failed: 'Falha ao copiar',
you: 'Você',
thinking: 'Pensando',
expand_all: 'Expandir tudo',
collapse_all: 'Recolher tudo',
edit_failed: 'Falha ao editar: ',
regen_failed: 'Falha ao regenerar: ',
reconnect_active: 'Uma resposta ainda está sendo gerada. Recarregar quando estiver pronto?',
reconnect_finished: 'Uma resposta estava em andamento quando você saiu. As mensagens podem ter atualizado.',
// approval card
approval_heading: 'Aprovação necessária',
approval_desc_prefix: 'Comando perigoso detectado',
approval_btn_once: 'Permitir uma vez',
approval_btn_once_title: 'Permitir este comando (Enter)',
approval_btn_session: 'Permitir sessão',
approval_btn_session_title: 'Permitir para esta sessão de conversa',
approval_btn_always: 'Sempre permitir',
approval_btn_always_title: 'Sempre permitir este padrão de comando',
approval_btn_deny: 'Negar',
approval_btn_deny_title: 'Negar — não executar este comando',
approval_responding: 'Respondendo…',
clarify_heading: 'Esclarecimento necessário',
clarify_hint: 'Escolha uma opção ou digite sua resposta abaixo.',
clarify_other: 'Outro',
clarify_send: 'Enviar',
clarify_input_placeholder: 'Digite sua resposta…',
clarify_responding: 'Respondendo…',
untitled: 'Sem título',
n_messages: (n) => `${n} mensagens`,
load_older_messages: '↑ Role para cima ou clique para carregar mensagens mais antigas',
queued_label: 'Envia após a resposta',
queued_count: (n) => n === 1 ? '1 na fila' : `${n} na fila`,
queued_cancel: 'Cancelar mensagem na fila',
model_unavailable: ' (indisponível)',
model_unavailable_title: 'Este modelo não está mais na sua lista de provedores',
provider_mismatch_warning: (m,p)=>`"${m}" pode não funcionar com seu provedor configurado (${p}). Enviar assim mesmo, ou execute \`hermes model\` no terminal para trocar.`,
provider_mismatch_label: 'Provedor incompatível',
model_not_found_label: 'Modelo não encontrado',
model_custom_label: 'ID de modelo customizado',
model_custom_placeholder: 'ex: openai/gpt-5.4',
model_search_placeholder: 'Buscar modelos…',
model_search_no_results: 'Nenhum modelo encontrado',
// commands.js
cmd_clear: 'Limpar mensagens da conversa',
cmd_compress: 'Comprimir manualmente o contexto (uso: /compress [tópico])',
cmd_compact_alias: 'Alias legado para /compress',
cmd_model: 'Trocar modelo (ex: /model gpt-4o)',
cmd_workspace: 'Trocar workspace por nome',
cmd_new: 'Iniciar nova sessão de chat',
cmd_usage: 'Alternar exibição de uso de tokens',
cmd_theme: 'Trocar aparência (tema: system/dark/light, skin: default/ares/mono/slate/poseidon/sisyphus/charizard)',
cmd_personality: 'Trocar personalidade do agente',
cmd_skills: 'Listar skills disponíveis do Hermes',
available_commands: 'Comandos disponíveis:',
type_slash: 'Digite / para ver comandos',
conversation_cleared: 'Conversa limpa',
command_label: 'Comando',
context_compaction_label: 'Compactação de contexto',
preserved_task_list_label: 'Lista de tarefas preservada',
reference_only_label: 'Apenas referência',
model_usage: 'Uso: /model <nome>',
no_model_match: 'Nenhum modelo correspondendo "',
switched_to: 'Trocado para ',
workspace_usage: 'Uso: /workspace <nome>',
no_workspace_match: 'Nenhum workspace correspondendo "',
switched_workspace: 'Trocado para workspace: ',
workspace_switch_failed: 'Falha ao trocar workspace: ',
new_session: 'Nova sessão criada',
compressing: 'Solicitando compressão de contexto...',
compress_running_label: 'Comprimindo',
compress_complete_label: 'Compressão completa',
auto_compress_label: 'Compressão automática',
compress_failed_label: 'Falha na compressão',
focus_label: 'Foco',
token_usage_on: 'Uso de tokens ligado',
token_usage_off: 'Uso de tokens desligado',
theme_usage: 'Uso: /theme ',
theme_set: 'Tema: ',
no_active_session: 'Nenhuma sessão ativa',
cmd_queue: 'Enfileirar mensagem para o próximo turno',
cmd_interrupt: 'Cancelar turno atual e enviar nova mensagem',
cmd_steer: 'Injetar correção no meio do turno sem interromper',
cmd_queue_no_msg: 'Uso: /queue <mensagem>',
cmd_queue_not_busy: 'Nenhuma tarefa ativa — apenas envie normalmente',
cmd_queue_confirm: 'Mensagem enfileirada',
cmd_interrupt_no_msg: 'Uso: /interrupt <mensagem>',
cmd_interrupt_confirm: 'Interrompido — enviando nova mensagem',
cmd_steer_no_msg: 'Uso: /steer <mensagem>',
cmd_steer_fallback: 'Steer indisponível — enfileirado para próximo turno',
cmd_steer_delivered: 'Steer entregue — agente verá no próximo resultado',
steer_leftover_queued: 'Steer enfileirado para próximo turno',
busy_steer_fallback: 'Steer indisponível — enfileirado para próximo turno',
busy_interrupt_confirm: 'Interrompido — enviando nova mensagem',
settings_label_busy_input_mode: 'Modo de input ocupado',
settings_desc_busy_input_mode: 'Controla o que acontece ao enviar mensagem com agente rodando. Fila espera; Interromper cancela; Steer injeta correção.',
settings_busy_input_mode_queue: 'Enfileirar follow-up',
settings_busy_input_mode_interrupt: 'Interromper turno atual',
settings_busy_input_mode_steer: 'Steer (correção no meio do turno)',
slash_skill_badge: 'Skill',
slash_skill_desc: 'Invocar esta skill',
cmd_stop: 'Parar resposta atual',
cmd_title: 'Obter ou definir título da sessão',
cmd_retry: 'Reenviar última mensagem',
cmd_undo: 'Remover última troca',
cmd_btw: 'Fazer pergunta lateral (efêmera)',
cmd_btw_usage: '/btw <pergunta> — fazer pergunta lateral',
cmd_background: 'Rodar prompt em background',
cmd_background_usage: '/background <prompt> — rodar em paralelo',
btw_asking: 'Fazendo pergunta lateral...',
btw_label: 'Pergunta lateral — não no histórico',
btw_done: 'Pergunta lateral respondida',
btw_no_answer: 'Nenhuma resposta recebida.',
btw_failed: 'Pergunta lateral falhou: ',
bg_running: 'Rodando em background...',
bg_complete: 'Tarefa de background completa',
bg_label: 'Resultado de background:',
bg_no_answer: '(sem resposta)',
bg_failed: 'Tarefa de background falhou: ',
undo_exchange: 'Desfazer última troca',
cmd_status: 'Mostrar info da sessão',
cmd_voice: 'Alternar input de microfone',
stream_stopped: 'Resposta parada.',
no_active_task: 'Nenhuma tarefa ativa para parar.',
cancel_unavailable: 'Cancelar indisponível.',
retry_failed: 'Retry falhou: ',
undo_failed: 'Undo falhou: ',
undid_n_messages: 'Removido',
undid_messages_suffix: 'mensagem(s).',
status_heading: 'Status da Sessão',
status_session_id: 'ID da Sessão',
status_title: 'Título',
status_model: 'Modelo',
status_workspace: 'Workspace',
status_personality: 'Personalidade',
status_messages: 'Mensagens',
status_agent_running: 'Agente rodando',
status_profile: 'Perfil',
status_started: 'Iniciado',
status_tokens: 'Tokens',
status_no_tokens: 'Nenhum token usado',
status_unknown: 'Desconhecido',
status_yes: 'Sim',
status_no: 'Não',
status_load_failed: 'Falha ao carregar status: ',
title_current: 'Título atual',
title_change_hint: 'Use `/title <novo nome>` para renomear.',
title_set: 'Título definido como',
cmd_webui_only_session: 'Comando indisponível para sessões CLI.',
cmd_voice_use_mic: 'Clique no botão de mic no composer.',
usage_heading: 'Uso de Tokens',
usage_default_model: 'padrão',
usage_unknown: 'desconhecido',
usage_input_tokens: 'Tokens de input',
usage_output_tokens: 'Tokens de output',
usage_total: 'Total de tokens',
usage_estimated_cost: 'Custo estimado',
usage_settings_tip: 'Nota: estimativas são aproximadas.',
usage_load_failed: 'Falha ao carregar uso: ',
usage_personality_none: 'nenhuma',
no_personalities: 'Nenhuma personalidade encontrada (adicione em ~/.hermes/personalities/)',
available_personalities: 'Personalidades disponíveis:',
personality_switch_hint: '\n\nUse `/personality <nome>` para trocar, ou `/personality none` para limpar.',
personalities_load_failed: 'Falha ao carregar personalidades',
personality_cleared: 'Personalidade limpa',
personality_set: 'Personalidade: ',
failed_colon: 'Falhou: ',
// ui.js
no_workspace: 'Nenhum workspace',
workspace_empty_no_path: 'Nenhum workspace selecionado. Configure em Configurações → Workspace.',
workspace_empty_dir: 'Este workspace está vazio.',
dialog_confirm_title: 'Confirmar ação',
dialog_prompt_title: 'Digite um valor',
dialog_confirm_btn: 'Confirmar',
// workspace.js
unsaved_confirm: 'Você tem mudanças não salvas. Descartar e navegar?',
discard: 'Descartar',
save: 'Salvar',
edit: 'Editar',
clear: 'Limpar',
create: 'Criar',
remove: 'Remover',
save_title: 'Salvar mudanças',
edit_title: 'Editar este arquivo',
saved: 'Salvo',
save_failed: 'Falha ao salvar: ',
image_load_failed: 'Não foi possível carregar imagem',
file_open_failed: 'Não foi possível abrir arquivo',
downloading: (name) => `Baixando ${name}`,
double_click_rename: 'Duplo clique para renomear',
renamed_to: 'Renomeado para ',
rename_failed: 'Falha ao renomear: ',
delete_title: 'Excluir',
delete_confirm: (name) => `Excluir ${name}?`,
deleted: 'Excluído ',
delete_failed: 'Falha ao excluir: ',
new_file_prompt: 'Nome do novo arquivo (ex: notes.md):',
project_name_prompt: 'Nome do projeto:',
created: 'Criado ',
create_failed: 'Falha ao criar: ',
new_folder_prompt: 'Nome da nova pasta:',
folder_created: 'Pasta criada ',
folder_create_failed: 'Falha ao criar pasta: ',
workspace_auto_create_folder: 'Criar pasta se não existir',
folder_add_as_space_btn: 'Adicionar como Space',
folder_add_as_space_msg: 'Adicionar esta pasta como novo space?',
folder_add_as_space_title: 'Adicionar como Space?',
remove_title: 'Remover',
empty_dir: '(vazio)',
upload_failed: 'Falha ao upload: ',
all_uploads_failed: (n) => `Todos ${n} upload(s) falharam`,
session_pin: 'Fixar conversa',
session_unpin: 'Desfixar conversa',
session_pin_desc: 'Manter esta conversa no topo',
session_unpin_desc: 'Remover dos fixados',
session_pin_failed: 'Falha ao fixar: ',
session_move_project: 'Mover para projeto',
session_move_project_desc_has: 'Mudar projeto desta conversa',
session_move_project_desc_none: 'Atribuir projeto a esta conversa',
session_archive: 'Arquivar conversa',
session_restore: 'Restaurar conversa',
session_archive_desc: 'Esconder conversa até mostrar arquivados',
session_restore_desc: 'Trazer conversa de volta à lista principal',
session_archived: 'Sessão arquivada',
session_restored: 'Sessão restaurada',
session_archive_failed: 'Falha ao arquivar: ',
session_duplicate: 'Duplicar conversa',
session_duplicate_desc: 'Criar cópia com mesmo workspace e modelo',
session_duplicated: 'Sessão duplicada',
session_duplicate_failed: 'Falha ao duplicar: ',
session_delete: 'Excluir conversa',
session_delete_desc: 'Remover permanentemente esta conversa',
// settings panel
settings_heading_title: 'Control Center',
settings_heading_subtitle: 'Preferências, ferramentas de conversa e controles do sistema.',
settings_section_conversation_title: 'Conversa',
settings_section_appearance_title: 'Aparência',
settings_section_appearance_meta: 'Tema, cores de destaque e estilo visual.',
settings_section_preferences_title: 'Preferências',
settings_section_preferences_meta: 'Padrões e comportamento UI do Hermes Web UI.',
settings_section_system_title: 'Sistema',
settings_section_system_meta: 'Versão da instância e controles de acesso.',
settings_check_now: 'Verificar agora',
settings_checking: 'Verificando…',
settings_up_to_date: 'Atualizado ✓',
settings_updates_available: '{count} atualização(ões) disponível(is)',
settings_updates_disabled: 'Verificação de updates desativada',
settings_update_check_failed: 'Falha ao verificar updates',
settings_label_workspace_panel_open: 'Manter painel workspace aberto por padrão',
settings_desc_workspace_panel_open: 'Quando ativo, o painel workspace abre automaticamente com cada nova sessão.',
open_in_browser: 'Abrir no navegador',
settings_dropdown_conversation: 'Conversa',
settings_dropdown_appearance: 'Aparência',
settings_dropdown_preferences: 'Preferências',
settings_dropdown_providers: 'Provedores',
settings_dropdown_system: 'Sistema',
settings_tab_conversation: 'Conversa',
settings_tab_appearance: 'Aparência',
settings_tab_preferences: 'Preferências',
settings_tab_system: 'Sistema',
settings_title: 'Configurações',
settings_save_btn: 'Salvar Configurações',
settings_label_model: 'Modelo Padrão',
settings_label_send_key: 'Tecla de Envio',
settings_label_theme: 'Tema',
settings_label_skin: 'Skin',
settings_label_font_size: 'Tamanho da fonte',
font_size_small: 'Pequeno',
font_size_default: 'Padrão',
font_size_large: 'Grande',
settings_label_language: 'Idioma',
settings_label_token_usage: 'Mostrar uso de tokens',
settings_label_sidebar_density: 'Densidade da sidebar',
cmd_reasoning: 'Alternar visibilidade do pensamento (mostrar/ocultar)',
settings_label_cli_sessions: 'Mostrar sessões do agente',
settings_label_sync_insights: 'Sincronizar para insights',
settings_label_check_updates: 'Verificar atualizações',
settings_label_bot_name: 'Nome do Assistente',
settings_label_password: 'Senha de Acesso',
settings_saved: 'Configurações salvas',
settings_save_failed: 'Falha ao salvar: ',
settings_load_failed: 'Falha ao carregar configurações: ',
settings_saved_pw: 'Configurações salvas — senha ativada e navegador permanece logado',
settings_saved_pw_updated: 'Configurações salvas — senha atualizada',
// login page
login_title: 'Entrar',
login_subtitle: 'Digite sua senha para continuar',
login_placeholder: 'Senha',
login_btn: 'Entrar',
login_invalid_pw: 'Senha inválida',
login_conn_failed: 'Falha na conexão',
// Sidebar & Tabs
tab_chat: 'Chat',
tab_tasks: 'Tarefas',
tab_skills: 'Skills',
tab_memory: 'Memória',
tab_workspaces: 'Spaces',
tab_profiles: 'Perfis',
tab_todos: 'Todos',
tab_settings: 'Configurações',
new_conversation: 'Nova conversa',
filter_conversations: 'Filtrar conversas...',
session_time_unknown: 'Desconhecido',
session_time_minutes_ago: (n) => `${n}m`,
session_time_hours_ago: (n) => `${n}h`,
session_time_days_ago: (n) => `${n}d`,
session_time_last_week: '1s',
session_time_bucket_today: 'Hoje',
session_time_bucket_yesterday: 'Ontem',
session_time_bucket_this_week: 'Esta semana',
session_time_bucket_last_week: 'Semana passada',
session_time_bucket_older: 'Antigo',
scheduled_jobs: 'Tarefas agendadas',
new_job: 'Nova tarefa',
loading: 'Carregando...',
search_skills: 'Buscar skills...',
new_skill: 'Nova skill',
personal_memory: 'Memória pessoal',
current_task_list: 'Lista de tarefas atual',
workspace_desc: 'Adicionar e trocar workspaces para suas sessões.',
session_meta_messages: (n) => `${n} msg${n === 1 ? '' : 's'}`,
new_profile: 'Novo perfil',
transcript: 'Transcrição',
download_transcript: 'Baixar como Markdown',
import: 'Importar',
// Settings detail
settings_label_sound: 'Som de notificação',
settings_desc_sound: 'Tocar som quando assistente finalizar resposta.',
settings_label_notifications: 'Notificações do navegador',
settings_desc_notifications: 'Mostrar notificação quando resposta completar com app em background.',
settings_desc_token_usage: 'Exibe contagem de tokens abaixo de cada resposta. Também com /usage.',
settings_sidebar_density_compact: 'Compacto',
settings_sidebar_density_detailed: 'Detalhado',
settings_desc_sidebar_density: 'Controla quanto metadado a lista de sessões mostra na sidebar.',
settings_label_auto_title_refresh: 'Atualização adaptativa de título',
settings_auto_title_refresh_off: 'Desligado',
settings_auto_title_refresh_5: 'A cada 5 trocas',
settings_auto_title_refresh_10: 'A cada 10 trocas',
settings_auto_title_refresh_20: 'A cada 20 trocas',
settings_desc_auto_title_refresh: 'Re-gera título da sessão baseado na última troca.',
settings_desc_cli_sessions: 'Mescla sessões do Hermes CLI na lista. Clique para importar.',
settings_desc_sync_insights: 'Espelha uso de tokens para state.db.',
settings_desc_check_updates: 'Mostrar banner quando versões mais novas estiverem disponíveis.',
settings_desc_bot_name: 'Nome de exibição do assistente. Padrão: Hermes.',
settings_desc_password: 'Digite nova senha para definir ou trocar. Deixe em branco para manter.',
password_placeholder: 'Digite nova senha…',
disable_auth: 'Desativar Auth',
sign_out: 'Sair',
// Providers panel
providers_tab_title: 'Provedores',
providers_section_title: 'Provedores',
providers_section_meta: 'Gerenciar API keys. Mudanças fazem efeito imediatamente.',
providers_status_configured: 'API key configurada',
providers_status_not_configured: 'Sem API key',
providers_status_oauth: 'OAuth',
providers_status_api_key: 'API key',
providers_status_not_configured_label: 'Não configurado',
providers_oauth_hint: 'Autenticado via OAuth. Sem API key necessária.',
providers_oauth_config_yaml_hint: 'Token configurado via config.yaml. Para atualizar, edite config.yaml ou rode hermes auth.',
providers_oauth_not_configured_hint: 'Não autenticado. Rode hermes auth no terminal.',
providers_save: 'Salvar',
providers_remove: 'Remover',
providers_saving: 'Salvando…',
providers_removing: 'Removendo…',
providers_enter_key: 'Por favor digite uma API key',
providers_empty: 'Nenhum provedor configurável encontrado.',
providers_key_updated: 'API key salva',
providers_key_removed: 'API key removida',
providers_key_placeholder_new: 'sk-...',
providers_key_placeholder_replace: 'Digite nova key para substituir…',
cancel: 'Cancelar',
create_job: 'Criar tarefa',
save_skill: 'Salvar skill',
editing: 'Editando',
// Empty state
empty_title: 'Como posso ajudar?',
empty_subtitle: 'Pergunte qualquer coisa, rode comandos, explore arquivos ou gerencie tarefas.',
suggest_files: 'Quais arquivos estão neste workspace?',
suggest_schedule: 'O que tenho na agenda hoje?',
suggest_plan: 'Me ajude a planejar um pequeno projeto.',
// onboarding
onboarding_badge: 'PRIMEIRO ACESSO',
onboarding_title: 'Bem-vindo ao Hermes Web UI',
onboarding_lead: 'Uma configuração rápida vai verificar Hermes, salvar provedor, escolher workspace e modelo, e opcionalmente proteger com senha.',
onboarding_back: 'Voltar',
onboarding_continue: 'Continuar',
onboarding_skip: 'Pular configuração',
onboarding_skipped: 'Configuração pulada — usando config existente.',
onboarding_open: 'Abrir Hermes',
onboarding_step_system_title: 'Verificação do sistema',
onboarding_step_system_desc: 'Verificar Hermes Agent e visibilidade da config.',
onboarding_step_setup_title: 'Configuração do provedor',
onboarding_step_setup_desc: 'Salvar config mínima do provedor Hermes.',
onboarding_step_workspace_title: 'Workspace + modelo',
onboarding_step_workspace_desc: 'Escolher padrões para novas sessões e chat.',
onboarding_step_password_title: 'Senha opcional',
onboarding_step_password_desc: 'Proteger Web UI antes de compartilhar.',
onboarding_step_finish_title: 'Finalizar',
onboarding_step_finish_desc: 'Revisar e entrar no app.',
onboarding_notice_system_ready: 'Hermes Agent parece acessível pela Web UI.',
onboarding_notice_system_unavailable: 'Hermes Agent não está totalmente disponível. Bootstrap pode instalar, mas setup do provedor pode requerer terminal.',
onboarding_check_agent: 'Hermes Agent',
onboarding_check_agent_ready: 'Detectado e importável',
onboarding_check_agent_missing: 'Ausente ou parcialmente importável',
onboarding_check_password: 'Senha',
onboarding_check_password_enabled: 'Já ativada',
onboarding_check_password_disabled: 'Não ativada ainda',
onboarding_check_provider: 'Config do provedor',
onboarding_check_provider_ready: 'Pronto para conversar',
onboarding_check_provider_partial: 'Salvo mas incompleto',
onboarding_check_provider_pending: 'Precisa verificação',
onboarding_config_file: 'Arquivo de config:',
onboarding_env_file: 'Arquivo .env:',
onboarding_unknown: 'Desconhecido',
onboarding_current_provider: 'Config atual:',
onboarding_missing_imports: 'Imports ausentes:',
onboarding_notice_setup_required: 'Escolha caminho simples de provedor aqui. OAuth avançado ainda pertence ao Hermes CLI.',
onboarding_notice_setup_already_ready: 'Setup de provedor Hermes já detectado. Pode manter ou substituir.',
onboarding_oauth_provider_ready_title: 'Provedor já autenticado',
onboarding_oauth_provider_ready_body: 'Esta instância usa provedor OAuth (<strong>{provider}</strong>) configurado via CLI. Sem API key necessária.',
onboarding_oauth_provider_not_ready_title: 'Provedor OAuth não autenticado',
onboarding_oauth_provider_not_ready_body: 'Esta instância usa <strong>{provider}</strong> com OAuth. Rode `hermes auth` no terminal.',
onboarding_oauth_switch_hint: 'Ou escolha provedor diferente abaixo para trocar para API-key:',
onboarding_notice_workspace: 'Estes valores reusam as mesmas APIs de settings do app normal.',
onboarding_workspace_label: 'Workspace',
onboarding_workspace_or_path: 'Ou digite path do workspace',
onboarding_workspace_placeholder: '/home/voce/workspace',
onboarding_provider_label: 'Modo de setup',
onboarding_quick_setup_badge: 'setup rápido',
provider_category_easy_start: 'Início fácil',
provider_category_self_hosted: 'Open / self-hosted',
provider_category_specialized: 'Especializado',
onboarding_api_key_label: 'API key',
onboarding_api_key_placeholder: 'Deixe em branco para manter key existente',
onboarding_api_key_help_prefix: 'Salvo como segredo no .env do Hermes usando',
onboarding_base_url_label: 'Base URL',
onboarding_base_url_placeholder: 'https://seu-endpoint.exemplo/v1',
onboarding_base_url_help: 'Use para endpoints OpenAI-compatible, self-hosted, LiteLLM, Ollama, LM Studio, vLLM.',
onboarding_model_label: 'Modelo padrão',
onboarding_workspace_help: 'Escolha modelo que Hermes deve usar para novos chats.',
onboarding_custom_model_placeholder: 'nome-do-seu-modelo',
onboarding_custom_model_help: 'Para endpoints customizados, digite ID exato que seu servidor espera.',
onboarding_notice_password_enabled: 'Senha já configurada. Digite nova apenas se quiser substituir.',
onboarding_notice_password_recommended: 'Opcional mas recomendado se expor UI além de localhost.',
onboarding_password_label: 'Senha (opcional)',
onboarding_password_placeholder: 'Deixe em branco para pular',
onboarding_password_help: 'Senhas são salvas via settings API e hasheadas no servidor.',
onboarding_notice_finish: 'Pode reabrir Configurações depois para mudar qualquer coisa.',
onboarding_not_set: 'Não definido',
onboarding_password_will_enable: 'Será ativada',
onboarding_password_will_replace: 'Será substituída',
onboarding_password_keep_existing: 'Manter senha atual',
onboarding_password_remains_disabled: 'Permanecerá desativada',
onboarding_password_skipped: 'Pulado por enquanto',
onboarding_finish_help: 'Finalizar guarda <code>onboarding_completed</code> em settings e leva ao app normal.',
onboarding_error_choose_workspace: 'Escolha workspace antes de continuar.',
onboarding_error_choose_model: 'Escolha modelo antes de continuar.',
onboarding_error_provider_required: 'Escolha modo de setup antes de continuar.',
onboarding_error_base_url_required: 'Base URL é necessária para endpoints customizados.',
onboarding_error_workspace_required: 'Workspace é necessário.',
onboarding_error_model_required: 'Modelo é necessário.',
onboarding_complete: 'Configuração completa',
// panel/runtime i18n
error_prefix: 'Erro: ',
not_available: 'N/D',
never: 'nunca',
add: 'Adicionar',
add_failed: 'Falha ao adicionar: ',
remove_failed: 'Falha ao remover: ',
switch_failed: 'Falha ao trocar: ',
name_required: 'Nome é necessário',
content_required: 'Conteúdo é necessário',
view: 'Ver',
dismiss: 'Dispensar',
disable: 'Desativar',
cron_no_jobs: 'Nenhuma tarefa agendada encontrada.',
cron_status_off: 'desligado',
cron_status_paused: 'pausado',
cron_status_error: 'erro',
cron_status_active: 'ativo',
cron_status_running: 'rodando…',
cron_status_needs_attention: 'precisa atenção',
cron_attention_desc: 'Esta tarefa não tem próxima execução. Scheduler pode não ter calculado.',
cron_attention_croniter_hint: 'Gateway pode não ter pacote croniter. Reinicie com cron support.',
cron_attention_resume: 'Retomar e recalcular',
cron_attention_run_once: 'Rodar uma vez agora',
cron_attention_copy_diagnostics: 'Copiar diagnóstico',
cron_diagnostics_copied: 'Diagnóstico copiado',
cron_next: 'Próxima',
cron_last: 'Última',
cron_run_now: 'Rodar agora',
cron_pause: 'Pausar',
cron_resume: 'Retomar',
cron_job_name_placeholder: 'Nome da tarefa',
cron_schedule_placeholder: 'Agendamento',
cron_prompt_placeholder: 'Prompt',
cron_last_output: 'Último output',
cron_all_runs: 'Todas execuções',
cron_hide_runs: 'Esconder execuções',
cron_no_runs_yet: '(sem execuções ainda)',
cron_schedule_required_example: 'Agendamento necessário (ex: "0 9 * * *" ou "every 1h")',
cron_schedule_required: 'Agendamento é necessário',
cron_prompt_required: 'Prompt é necessário',
cron_job_created: 'Tarefa criada',
cron_job_triggered: 'Tarefa acionada',
cron_job_paused: 'Tarefa pausada',
cron_job_resumed: 'Tarefa retomada',
cron_job_updated: 'Tarefa atualizada',
cron_delete_confirm_title: 'Excluir tarefa cron',
cron_delete_confirm_message: 'Isso não pode ser desfeito.',
cron_job_deleted: 'Tarefa excluída',
cron_completion_status: (name, status) => `Cron "${name}" ${status}`,
status_failed: 'falhou',
status_completed: 'completou',
todos_no_active: 'Nenhuma lista de tarefas ativa nesta sessão.',
clear_conversation_title: 'Limpar conversa',
clear_conversation_message: 'Limpar todas mensagens? Isso não pode ser desfeito.',
clear_failed: 'Falha ao limpar: ',
skills_no_match: 'Nenhuma skill corresponde.',
linked_files: 'Arquivos vinculados',
skill_load_failed: 'Não foi possível carregar skill: ',
skill_file_load_failed: 'Não foi possível carregar arquivo: ',
skills_empty_title: 'Selecione uma skill',
skills_empty_sub: 'Escolha skill da sidebar para ver conteúdo, ou crie nova.',
skills_edit: 'Editar',
skills_delete: 'Excluir',
skills_back_to: 'Voltar para {0}',
tasks_empty_title: 'Selecione tarefa agendada',
tasks_empty_sub: 'Escolha tarefa da sidebar para ver detalhes e execuções.',
workspaces_empty_title: 'Selecione um space',
workspaces_empty_sub: 'Escolha space da sidebar para ver arquivos e settings.',
profiles_empty_title: 'Selecione um perfil',
profiles_empty_sub: 'Escolha perfil da sidebar para ver e editar settings.',
memory_notes_label: 'memória (notas)',
memory_saved: 'Memória salva',
my_notes: 'Minhas Notas',
user_profile: 'Perfil do Usuário',
no_notes_yet: 'Nenhuma nota ainda.',
no_profile_yet: 'Nenhum perfil definido.',
// skill form
skill_name: 'Nome',
skill_category: 'Categoria',
skill_category_placeholder: 'Opcional, ex: devops',
skill_content: 'Conteúdo SKILL.md',
skill_content_placeholder: 'YAML frontmatter + markdown body',
skill_rename_not_supported: 'Renomear skill não suportado. Crie nova e exclua antiga.',
skill_metadata: 'Metadados',
// cron form
cron_name_label: 'Nome',
cron_name_placeholder: 'Opcional',
cron_schedule_label: 'Agendamento',
cron_schedule_hint: "Expressão Cron ou shorthand como 'every 1h'.",
cron_prompt_label: 'Prompt',
cron_deliver_label: 'Entregar output para',
cron_deliver_local: 'Local (salvar output apenas)',
cron_deliver_origin: 'Origem (mesmo chat)',
cron_deliver_telegram: 'Telegram',
cron_deliver_discord: 'Discord',
cron_skills_label: 'Skills',
cron_skills_placeholder: 'Adicionar skills (opcional)…',
cron_skills_edit_hint: 'Lista de skills não editável após criação.',
// workspace form
workspace_name_label: 'Nome',
workspace_name_placeholder: 'Nome amigável opcional',
workspace_path_label: 'Path',
workspace_path_required: 'Path é necessário',
workspace_path_readonly: 'Path não pode mudar. Apenas renomear.',
workspace_new_title: 'Novo space',
workspace_rename_title: 'Renomear space',
// profile form
profile_name_label: 'Nome',
profile_name_required: 'Nome é necessário',
profile_name_placeholder: 'ex: Trabalho, Pessoal',
profile_provider_label: 'Provedor',
profile_model_label: 'Modelo',
profile_model_required: 'Modelo é necessário',
profile_base_url_label: 'Base URL',
profile_base_url_placeholder: 'Opcional, ex: http://localhost:11434',
profile_api_key_label: 'API key',
profile_api_key_placeholder: 'Opcional',
manage_profiles: 'Gerenciar perfis',
profiles_load_failed: 'Falha ao carregar perfis',
profiles_busy_switch: 'Não pode trocar perfis com agente rodando',
profile_switched_new_conversation: (name) => `Trocado para perfil: ${name} — nova conversa iniciada`,
profile_switched: (name) => `Trocado para perfil: ${name}`,
profile_delete_confirm: (name) => `Excluir perfil "${name}"?`,
profile_deleted: 'Perfil excluído',
profile_delete_failed: 'Falha ao excluir perfil: ',
profile_create_failed: 'Falha ao criar perfil: ',
profile_update_failed: 'Falha ao atualizar perfil: ',
profile_already_exists: 'Perfil já existe',
// workspace switch dialog
workspace_switch_prompt_title: 'Trocar workspace',
workspace_switch_prompt_message: 'Digite path absoluto do workspace para adicionar e trocar.',
workspace_switch_prompt_confirm: 'Trocar',
workspace_switch_prompt_placeholder: '/Users/voce/projeto',
workspace_not_added: 'Workspace não adicionado',
workspace_already_saved: 'Workspace já salvo — escolha da lista',
workspace_busy_switch: 'Não pode trocar workspace com agente rodando',
discard_file_edits_title: 'Descartar edições de arquivo?',
discard_file_edits_message: 'Trocar workspace descarta edições não salvas no preview.',
workspace_switched_to: (name) => `Trocado para ${name}`,
workspace_use: 'Usar',
workspace_use_title: 'Usar nesta conversa',
workspace_add_title: 'Adicionar workspace',
// Approval card
approval_skip: 'Pular',
approval_skip_title: 'Pular este prompt de aprovação',
approval_skip_all: 'Pular todos',
approval_skip_all_title: 'Pular todos prompts de aprovação nesta sessão'
},
ko: {
_lang: 'ko',
_label: '한국어',