{
  "forms": {
    "upload_dir_error": "Erro ao criar o diretório de upload",
    "file_create_error": "Erro ao criar o arquivo",
    "multipart_stream_error": "Erro no stream multipart",
    "file_write_error": "Erro ao escrever o arquivo",
    "required": "Este campo é obrigatório",
    "too_short": "Muito curto (mín {})",
    "too_long": "Muito longo (máx {})",
    "email_invalid": "Formato de endereço de e-mail inválido",
    "url_invalid": "Por favor, insira uma URL válida",
    "phone_invalid": "Número de telefone inválido (dígitos, +, espaços, hífens, 7-15 dígitos)",
    "hash_error": "Erro de hash: {}",
    "password_empty": "A senha não pode estar vazia",
    "filter_invalid_value": "O filtro static/media recebeu um valor inválido ({}) em vez de um caminho de arquivo.",
    "number_invalid": "Número inválido",
    "number_required": "Obrigatório",
    "integer_required": "Deve ser um número inteiro",
    "decimal_required": "Deve estar no formato decimal",
    "min_value": "Mín {} requerido",
    "max_value": "Máx {} excedido",
    "precision_max": "Precisão máxima {} dígitos após a vírgula",
    "precision_min": "Precisão mínima {} dígitos após a vírgula",
    "color_invalid": "Cor inválida (formato: #RRGGBB ou #RGB)",
    "color_no_hash": "A cor deve começar com #",
    "color_bad_hex": "Contém caracteres não hexadecimais",
    "slug_invalid": "Slug inválido",
    "slug_no_dash": "O slug não deve começar ou terminar com um hífen",
    "uuid_invalid": "Formato UUID inválido (esperado: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
    "json_invalid": "JSON inválido: {}",
    "ipv4_only": "Apenas endereços IPv4 são aceitos",
    "ipv6_only": "Apenas endereços IPv6 são aceitos",
    "ip_invalid": "Endereço IP inválido",
    "date_invalid": "Formato de data inválido",
    "date_too_old": "Muito antigo (mín: {})",
    "date_too_far": "Muito distante (máx: {})",
    "time_invalid": "Formato de hora inválido",
    "file_required": "Por favor selecione pelo menos um arquivo",
    "file_extension_blocked": "Arquivo '{}' não permitido. Extensões: {}",
    "finalize_error": "Erro ao finalizar o campo '{}': {}",
    "template_missing": "Template ausente: {}",
    "render_js_error": "Erro ao renderizar JS: {}",
    "tera_not_configured": "Tera não configurado",
    "config_not_found": "Configuração não encontrada nas extensões",
    "hint_slug": "Formato: letras-números-hífens",
    "hint_uuid": "Formato: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "hint_json": "Formato JSON válido requerido",
    "hint_ip_v4": "Formato IPv4: 192.168.1.1",
    "hint_ip_v6": "Formato IPv6: 2001:0db8:85a3::8a2e:0370:7334",
    "hint_ip": "Formato IPv4 ou IPv6",
    "validation_overflow": "Stack overflow detectado: recursão infinita na validação",
    "choice_invalid": "Opção inválida",
    "choice_invalid_value": "Opção inválida: {}",
    "select_required": "Por favor selecione uma opção",
    "checkbox_required": "Por favor selecione pelo menos uma opção",
    "multipart_error": "Erro multipart",
    "body_error": "Erro ao ler o body",
    "aegis_query_error": "Falha ao analisar query string: {}",
    "aegis_urlencoded_error": "Falha ao analisar o body urlencoded: {}",
    "aegis_json_error": "Falha ao analisar o body JSON: {}",
    "auth_required": "Autenticação requerida",
    "role_insufficient": "Função insuficiente",
    "time_too_old": "Muito cedo (mín: {})",
    "time_too_far": "Muito tarde (máx: {})",
    "datetime_too_old": "Muito cedo (mín: {})",
    "datetime_too_far": "Muito tarde (máx: {})",
    "duration_invalid": "Duração inválida (esperado número de segundos)",
    "duration_too_short": "Duração mínima: {} segundos",
    "duration_too_long": "Duração máxima: {} segundos",
    "file_max_count": "Máximo de {} arquivos permitido",
    "file_too_large": "Arquivo '{}' muito grande ({}MB > {}MB máx)",
    "file_invalid_image": "O arquivo '{}' não é uma imagem válida",
    "image_too_wide": "A imagem '{}' é muito larga ({}px > {}px)",
    "image_too_tall": "A imagem '{}' é muito alta ({}px > {}px)",
    "boolean_required": "Você deve aceitar este campo",
    "slug_unicode_invalid": "Apenas letras, números, hífens e underscores são permitidos",
    "unique_field_taken": "Este {} já está em uso.",
    "unique_value_taken": "O valor do campo '{}' já está em uso.",
    "unique_constraint_violated": "Uma restrição de unicidade foi violada.",
    "db_error": "Erro de banco de dados: {}",
    "text_field_too_large": "Campo de texto muito grande (max 1 MB)",
    "upload_too_large": "Upload muito grande (max {}MB)"
  },
  "csrf": {
    "missing": "Token CSRF ausente",
    "invalid": "Token CSRF inválido",
    "invalid_or_missing": "Token CSRF inválido ou ausente",
    "forbidden": "Token CSRF inválido",
    "session_write_error": "Erro ao gravar a sessão"
  },
  "error": {
    "source": "Fonte: {}",
    "AppError": "Erro de aplicação",
    "build": "Erro de build: {}",
    "internal": "Erro interno",
    "forbidden": "Acesso proibido",
    "not_found": "Recurso não encontrado",
    "validation": "Erro de validação: {}",
    "database": "Erro de banco de dados: {}",
    "io": "Erro IO: {}",
    "template": "Erro de template: {}",
    "custom": "Erro personalizado: {}",
    "title": {
      "not_found": "Página não encontrada",
      "forbidden": "Acesso proibido",
      "validation": "Erro de validação",
      "database": "Erro de banco de dados",
      "template": "Erro de renderização de template",
      "internal": "Erro interno do servidor"
    },
    "path_not_found": "O caminho solicitado '{}' não foi encontrado",
    "internal_occurred": "Ocorreu um erro interno",
    "context_occurred": "Erro AppError ocorrido"
  },
  "title": {
    "template": "Erro de template em '{}'"
  },
  "build": {
    "validation_failed": "Falha na validação do build: {}",
    "check_failed": "Build falhou com {} erro(s) de verificação",
    "template_failed": "Falha no carregamento do template: {}",
    "db_missing": "Conexão com banco de dados necessária quando o recurso 'orm' está habilitado",
    "component_not_ready": "O componente '{}' não está pronto"
  },
  "middleware": {
    "host_invalid": "Host inválido: '{}' (Hosts permitidos: {})",
    "host_debug": "Host inválido: '{}'. Adicione-o a RUNIQUE_ALLOWED_HOSTS.",
    "bad_request": "Requisição inválida"
  },
  "html": {
    "404_title": "404",
    "404_text": "Página não encontrada",
    "500_title": "500",
    "500_text": "Erro interno do servidor",
    "500_notice": "Nossa equipe foi notificada e está trabalhando no problema.",
    "429_title": "429",
    "429_text": "Muitas requisições. Por favor aguarde um momento antes de tentar novamente.",
    "back_home": "Voltar ao início",
    "critical_error_title": "Erro crítico",
    "critical_error_text": "O sistema de tratamento de erros encontrou um erro.",
    "critical_error_contact": "Esta situação nunca deveria ocorrer. Por favor, contate o administrador do sistema."
  },
  "debug": {
    "stack_trace_title": "Rastreamento detalhado de erros",
    "stack_trace_tip": "O erro mais alto (nível 0) é geralmente a causa raiz. Os erros seguintes mostram como o erro se propagou no código."
  },
  "flash": {
    "welcome": "Bem-vindo {}, sua conta foi criada!",
    "fix_errors": "Por favor, corrija os erros",
    "success_demo": "Esta é uma mensagem de sucesso.",
    "info_demo": "Esta é uma mensagem de informação.",
    "warning_demo": "Esta é uma mensagem de aviso.",
    "error_demo": "Esta é uma mensagem de erro."
  },
  "log": {
    "db_connecting": "Conectando ao banco de dados {}...",
    "db_connected": "Banco de dados conectado com sucesso ({})",
    "db_failed": "Falha na conexão com o banco de dados",
    "db_engine": "Motor: {}",
    "template_render_error": "Erro de renderização do template",
    "error_handler": "Erro crítico ocorrido",
    "error_handled": "Erro tratado",
    "files_count": "adicionar arquivos JS ao formulário",
    "js_file_skip": "Arquivo JS ignorado",
    "already_initialized": "Logger já inicializado"
  },
  "cli": {
    "creating_project": "Criando projeto '{}'...",
    "admin_detected": "Admin detectado → iniciando o daemon",
    "add_admin_hint": "Adicione .with_admin(...) no seu builder para ativar o painel de administração.",
    "daemon_error": "[Daemon] Erro: {}",
    "cargo_run_failed": "O servidor da aplicação não iniciou corretamente (cargo run)",
    "file_not_found": "Arquivo não encontrado: {}\\nCertifique-se de estar na raiz do seu projeto Runique.",
    "admin_not_found": "Arquivo admin não encontrado: {}\\nCrie src/admin.rs com a macro admin!{{}}.",
    "name_empty": "O nome do projeto não pode estar vazio",
    "name_invalid": "O nome do projeto deve conter apenas letras, números, _ ou -",
    "name_dash": "O nome do projeto não pode começar com -",
    "folder_exists": "A pasta '{}' já existe",
    "cargo_run_expect": "Falha ao iniciar cargo run",
    "project_created": "Projeto '{}' criado com sucesso!",
    "getting_started": "Para começar:",
    "cd_hint": "cd {}",
    "cargo_run_hint": "cargo run"
  },
  "daemon": {
    "modification_detected": "Modificação detectada → regenerando...",
    "unable_read": "Impossível ler: {}",
    "parse_error": "Erro de análise: {}",
    "no_resource": "Nenhum recurso em admin!{{}} — nada a gerar",
    "with_admin_disabled": "with_admin desativado → daemon parado",
    "operational": "Daemon operacional → src/admin/generated.rs",
    "generation_error": "Erro de geração: {}",
    "watcher_error": "Erro do watcher: {}",
    "unable_create": "Impossível criar o watcher: {}",
    "unable_watch": "Impossível monitorar {} : {}"
  },
  "macro": {
    "named_fields_only": "Apenas structs com campos nomeados",
    "structs_only": "Funciona apenas em structs",
    "forms_field_required": "A struct '{}' deve ter um campo 'Forms'",
    "field_no_name": "Campo sem nome",
    "model_form_named_only": "DeriveModelForm: apenas structs com campos nomeados",
    "model_form_structs_only": "DeriveModelForm: apenas structs"
  },
  "parser": {
    "string_expected": "Literal de string esperado, encontrado: {}",
    "string_eof": "Literal de string esperado, fim do arquivo",
    "array_expected": "Array [...] esperado para permissões, encontrado: {}",
    "array_eof": "Array [...] esperado para permissões, fim do arquivo",
    "role_required": "Pelo menos uma função necessária em permissions: [...]",
    "punct_expected": "'{}' esperado, encontrado: {}",
    "punct_eof": "'{}' esperado, fim do arquivo",
    "title_required": "admin!: 'title' é obrigatório",
    "permissions_required": "admin!: 'permissions' é obrigatório",
    "list_display_exclude_exclusive": "admin!: 'list_display' e 'list_exclude' são mutuamente exclusivos"
  },
  "TemplateMessage": {
    "debug_info_title": "Informações de debug",
    "debug_field_title": "Título",
    "debug_field_count": "Contagem de campos",
    "debug_error_count": "Erros",
    "debug_main_message": "Mensagem principal",
    "debug_root_cause": "Causa raiz",
    "debug_details": "Detalhes adicionais",
    "debug_request_info": "Informações da requisição",
    "debug_http_method": "Método HTTP",
    "debug_path": "Caminho",
    "debug_query_params": "Parâmetros de consulta",
    "debug_http_headers": "Cabeçalhos HTTP",
    "debug_template_info": "Informações do template",
    "debug_template_name": "Nome do template",
    "debug_error_line": "Linha do erro",
    "debug_template_source": "Código fonte do template",
    "debug_available_templates": "Templates disponíveis",
    "debug_stack_trace_title": "Rastreamento de erro detalhado",
    "debug_stack_trace_tip": "O erro mais alto (nível 0) é geralmente a causa raiz. Erros subsequentes mostram como o erro se propagou no código.",
    "debug_environment": "Ambiente",
    "debug_debug_mode": "Modo debug",
    "debug_enabled": "Ativado",
    "debug_disabled": "Desativado",
    "debug_rust_version": "Versão do Rust",
    "debug_app_version": "Versão do App",
    "debug_status_code": "Código de status",
    "debug_header_name": "Nome",
    "debug_header_value": "Valor"
  },
  "admin": {
    "group": "Grupo",
    "groups": "Grupos",
    "resource": "Recurso",
    "resources": "Recursos",
    "can_create": "Criar",
    "can_read": "Ler",
    "can_update": "Modificar",
    "can_delete": "Excluir",
    "can_update_own": "Modificar",
    "can_delete_own": "Excluir",
    "name": "Nome",
    "username": "Nome de usuário",
    "email": "Email",
    "staff": "Staff",
    "superuser": "Superusuário",
    "active": "Ativo",
    "user": {
      "username_too_short": "O nome de usuário é muito curto (min 3 car.)",
      "invalid_email": "Formato de endereço de e-mail inválido"
    },

    "login": {
      "title": "Entrar",
      "subtitle": "Faça login para acessar o painel de administração",
      "label_username": "Nome de usuário",
      "label_password": "Senha",
      "btn_submit": "Entrar",
      "error_session": "Erro ao abrir a sessão.",
      "error_credentials": "Credenciais incorretas ou direitos insuficientes.",
      "error_locked": "Muitas tentativas. Conta temporariamente bloqueada. Tente novamente em {} segundos."
    },
    "logout": {
      "success": "Desconectado com sucesso."
    },
    "access": {
      "no_auth_handler": "Nenhum manipulador de autenticação configurado. Chame .auth(MyAuth) em AdminConfig.",
      "insufficient_rights": "Direitos insuficientes para acessar a administração"
    },
    "dashboard": {
      "title": "Painel",
      "subtitle": "Visão geral da aplicação",
      "card_resources": "Recursos",
      "th_resource": "Recurso",
      "th_key": "Chave",
      "th_permissions": "Permissões",
      "th_actions": "Ações",
      "btn_list": "Lista",
      "btn_create": "Criar",
      "empty_title": "Nenhum recurso registrado",
      "empty_desc": "Declare seus recursos em src/admin.rs com a macro admin!{{}} e depois execute runique start"
    },
    "list": {
      "breadcrumb_admin": "Administração",
      "entries_count_one": "entrada",
      "entries_count_many": "entradas",
      "btn_create": "Criar",
      "th_id": "id",
      "th_actions": "Ações",
      "bool_true": "Sim",
      "bool_false": "Não",
      "btn_detail": "Detalhe",
      "btn_edit": "Editar",
      "btn_delete": "Excluir",
      "confirm_delete": "Realmente excluir?",
      "empty_title": "Nenhuma entrada",
      "empty_desc": "Comece criando um item.",
      "btn_create_first": "Criar o primeiro",
      "search_placeholder": "Pesquisar..."
    },
    "create": {
      "title": "Criar",
      "breadcrumb": "Criar",
      "card_info": "Informações",
      "no_fields": "Nenhum campo disponível no momento.",
      "btn_cancel": "Cancelar",
      "btn_submit": "Criar",
      "success": "Entrada criada com sucesso!"
    },
    "edit": {
      "title": "Editar",
      "breadcrumb": "Editar",
      "card_info": "Informações",
      "no_fields": "Nenhum campo disponível no momento.",
      "btn_cancel": "Cancelar",
      "btn_submit": "Salvar",
      "success": "Entrada atualizada com sucesso!"
    },
    "detail": {
      "title": "Detalhe",
      "breadcrumb": "Detalhe",
      "entry_label": "Entrada",
      "btn_list": "← Lista",
      "btn_edit": "Editar",
      "btn_delete": "Excluir",
      "confirm_delete": "Excluir esta entrada?"
    },
    "reset_password": {
      "btn": "Redefinir senha",
      "success_email": "Reset link sent to {}.",
      "success_link": "Reset link (mailer not configured): {}",
      "error_no_email": "No email field found for this user.",
      "error_send": "Error sending email: {}",
      "email_subject": "Redefina sua senha",
      "email_title": "Redefinição de senha",
      "email_greeting": "Olá,",
      "email_body": "Clique no link abaixo para redefinir sua senha (válido por 1 hora):",
      "email_btn": "Redefinir minha senha",
      "email_ignore": "Se você não solicitou esta redefinição, ignore esta mensagem."
    },
    "user_created": {
      "email_subject": "Bem-vindo — defina sua senha",
      "email_sent": "E-mail de boas-vindas enviado para {}.",
      "email_greeting": "Bem-vindo,",
      "email_body": "Uma conta foi criada para você. Clique no link para definir sua senha:",
      "email_btn": "Definir minha senha",
      "email_validity": "Este link é válido por 1 hora. Se não esperava esta mensagem, ignore-a."
    },
    "delete": {
      "title": "Excluir",
      "breadcrumb": "Excluir",
      "heading": "Confirmar exclusão",
      "btn_cancel": "← Cancelar",
      "btn_confirm": "Sim, excluir permanentemente",
      "warning": {
        "title": "Atenção!",
        "desc": "Você está prestes a excluir a entrada",
        "of": "do recurso",
        "irreversible": "Esta ação é irreversível."
      },
      "success": "Entrada excluída com sucesso!",
      "not_found": "Recurso não encontrado."
    },
    "bulk": {
      "no_selection": "Nenhum item selecionado.",
      "no_field_selected": "Nenhum campo alterado.",
      "delete_success": "item(ns) excluído(s).",
      "update_success": "item(ns) atualizado(s)."
    },
    "base": {
      "title": "Administração",
      "breadcrumb": "Admin",
      "toggle": "Recolher menu",
      "logout_title": "Sair"
    },
    "superuser_wizard": {
      "title": "=== Criar superusuário ===",
      "algo_prompt": "[1/5] Algoritmo de hash",
      "algo_argon2": "Argon2 (recomendado)",
      "algo_bcrypt": "Bcrypt",
      "algo_scrypt": "Scrypt",
      "algo_custom": "Provedor personalizado",
      "provider_path": "Caminho do provedor",
      "invalid_path": "Caminho inválido.",
      "username_prompt": "[2/5] Nome de usuário",
      "username_empty": "O nome de usuário não pode ser vazio.",
      "username_taken": "Já existe um usuário com este nome.",
      "email_prompt": "[3/5] Email",
      "email_invalid": "Email inválido.",
      "email_taken": "Já existe um usuário com este email.",
      "password_prompt": "[4/5] Senha",
      "password_too_short": "A senha deve ter pelo menos 10 caracteres.",
      "confirm_prompt": "[5/5] Confirmar senha",
      "password_mismatch": "As senhas não correspondem. Por favor, tente novamente.",
      "review_algo": "  Algoritmo  : {}",
      "review_username": "  Usuário    : {}",
      "review_email": "  Email      : {}",
      "review_password": "  Senha      : ••••••••",
      "review_action": "Ação",
      "confirm_create": "Confirmar e criar",
      "change_algo": "Alterar algoritmo",
      "modify_password": "Modificar senha",
      "success": "✓ Superusuário criado com sucesso!",
      "id_line": "  ID         : {}",
      "username_line": "  Usuário    : {}",
      "email_line": "  Email      : {}"
    },
    "builtin": {
      "invalid_id": "Identificador inválido.",
      "droit_resource_required": "Por favor, selecione pelo menos um recurso.",
      "droit_exists": "O direito \"{}\" já existe.",
      "groupe_exists": "Já existe um grupo chamado \"{}\".",
      "user_username_exists": "O nome de usuário \"{}\" já está em uso.",
      "user_email_exists": "O endereço de e-mail \"{}\" já está registrado."
    }
  },
  "makemigrations": {
    "scanning": "Verificando entidades em '{}'...",
    "found_schema": "-> Esquema encontrado: {}",
    "found_extend": "-> Extensão de tabela de framework encontrada: {}",
    "no_schema": "Nenhuma função schema() encontrada em '{}'.",
    "schema_count": "{} esquema(s) encontrado(s).",
    "updated_lib": "Atualizado {}",
    "no_changes": "Nenhuma alteração detectada. Seu esquema está atualizado.",
    "destructive_detected": "Alterações destrutivas detectadas:",
    "destructive_require_force": "Use --force para aplicar estas alterações destrutivas.",
    "generated": "Gerado: {}",
    "snapshot_updated": "Instantâneo atualizado: {}",
    "seaorm_alter": "Migração ALTER SeaORM gerada: {}",
    "batch_up": "Lote up gerado: {}",
    "batch_down": "Lote down gerado: {}",
    "apply_hint": "Execute 'sea-orm-cli migrate up' para aplicar.",
    "extend_unknown_table": "extend!{{}} : \"{}\" não é uma tabela de framework conhecida. Tabelas permitidas: {}. Para estender uma tabela de aplicação, modifique seu model!{{}} diretamente.",
    "extend_invalid_syntax": "extend!{{}} : sintaxe inválida. Esperado: table: \"nome_tabela\", fields: {{ ... }}",
    "admin_positioned": "AdminTableMigration posicionada após a migração de '{}'",
    "files_ready": "{} arquivo(s) pronto(s) para migrar."
  },
  "migrate": {
    "applying": "Aplicando migrações de '{}'...",
    "run_hint": "Executar: sea-orm-cli migrate up",
    "complete_up": "Migração concluída.",
    "complete": "Reversão concluída.",
    "available_for": "Arquivos de reversão disponíveis para '{}':",
    "rolling_back_batch": "Revertendo lote: {}",
    "done": "Concluído: {}",
    "rolling_back": "Revertendo: {}",
    "no_applied_dir": "Nenhum diretório applied/ encontrado.",
    "by_time_header": "by_time (lotes completos):",
    "none_available": "Nenhum arquivo de reversão disponível.",
    "usage": "Uso:",
    "usage_files": "runique migration down --files <table/timestamp> [<table/timestamp> ...]",
    "usage_batch": "runique migration down --batch <timestamp>",
    "no_down": "Nenhuma instrução down encontrada.",
    "executing": "Executando: {}"
  },
  "reset": {
    "forgot_title": "Esqueceu a senha",
    "reset_title": "Nova senha",
    "success_title": "Senha redefinida",
    "email_label": "Endereço de email",
    "new_password_label": "Nova senha",
    "confirm_label": "Confirmar senha",
    "email_mismatch": "O endereço de email não corresponde ao link.",
    "invalid_link": "Link inválido.",
    "invalid_or_expired": "O link de redefinição é inválido ou expirou.",
    "password_min_length": "A senha deve ter pelo menos {} caracteres.",
    "password_mismatch": "As senhas não coincidem.",
    "check_inbox": "Se este endereço estiver associado a uma conta, você receberá um email de redefinição.",
    "email_subject": "Redefinição de senha",
    "email_body": "<p>Olá {},</p><p>Clique no link a seguir para redefinir sua senha (válido por 1 hora):</p><p><a href=\"{}\">{}</a></p>"
  },
  "permission": {
    "col.id": "ID",
    "col.can_create": "Criar",
    "col.can_delete": "Eliminar",
    "col.can_delete_own": "Eliminar (próprio)",
    "col.can_read": "Ler",
    "col.can_update": "Modificar",
    "col.can_update_own": "Modificar (próprio)",
    "col.groupes": "Grupos",
    "col.resource_key": "Recurso",
    "col.actions": "Ações"
  }
}
