{
"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",
"data_invalid": "Valor inválido para «{}»",
"data_required": "«{}» é obrigatório",
"data_password": "Não foi possível gerar o hash da senha de «{}»; nada foi salvo",
"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",
"unknown_group": "GuardRules: grupo(s) inexistente(s) em roles([...]): {}",
"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": {
"bad_request": "Pedido inválido",
"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"
},
"invalid_query": "Parâmetros de consulta inválidos: {}",
"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": {
"subscriber_already_installed": "Um subscriber de tracing já está instalado; a configuração de log do Runique está inativa (RUST_LOG / with_log não têm efeito)",
"external_outputs_ignored": "`with_log(|l| l.external())` está definido; as saídas de log configuradas são ignoradas (a aplicação é dona do subscriber)",
"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: {}",
"driver_not_enabled": "Driver {} não ativado: o Runique foi compilado sem a feature '{}'.\n\nNo Cargo.toml do seu projeto:\nrunique = { version = \"{}\", features = [\"{}\"] }\n\nPara a CLI do runique:\ncargo install runique --features {} --locked --force\n\nPara suportar todos os motores, use a feature 'all-databases'.",
"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",
"check": {
"db_required": "Conexão ou configuração de banco de dados obrigatória (feature `orm` ativada)",
"db_required_hint": "Adicione .with_database(db) ou .with_database_config(config) à sua cadeia de construção",
"admin_prefix_empty": "O prefixo de rota do admin não pode estar vazio",
"admin_prefix_empty_hint": "Use .prefix(\"/admin\") ou mantenha o valor padrão",
"extra_route_unknown": "A rota adicional `{}` indica o recurso `{}`, que não está registrado",
"extra_route_unknown_hint": "Use a chave de um recurso declarado em admin!{}",
"cache_control_invalid": "Valor de cabeçalho Cache-Control inválido: '{}'",
"cache_control_invalid_hint": "Use apenas caracteres ASCII visíveis (sem caracteres de controle nem quebras de linha).",
"media_root_unusable": "Não é possível criar ou acessar o diretório MEDIA_ROOT '{}': {}",
"media_root_unusable_hint": "Defina MEDIA_ROOT como um caminho absoluto gravável no seu .env (ex.: MEDIA_ROOT=/var/www/meuapp/media) e garanta que o processo tenha permissão de escrita.",
"secret_key_weak": "SECRET_KEY está ausente, vazia, com o valor padrão ou tem menos de 32 caracteres",
"secret_key_weak_hint": "Defina SECRET_KEY como uma string aleatória de pelo menos 32 caracteres no seu .env (a CLI `runique` pode gerar uma)",
"public_url_missing": "Sem URL pública: os links de redefinição seriam construídos a partir do cabeçalho Host da requisição",
"public_url_missing_hint": "Defina-a no builder: .with_public_url(\"https://meusite.com\")",
"acme_domain_missing": "ACME_ENABLED=true mas ACME_DOMAIN não está definido",
"acme_domain_missing_hint": "Defina ACME_DOMAIN com seu domínio de produção no seu .env",
"acme_email_missing": "ACME_ENABLED=true mas ACME_EMAIL não está definido",
"acme_email_missing_hint": "Defina ACME_EMAIL com seu email de contato do Let's Encrypt no seu .env",
"suggestion": "Sugestão",
"context": "Contexto"
}
},
"server": {
"operational": "Runique está operacional",
"launched": "Servidor iniciado em {}",
"connected_db": "Conectado ao banco de dados {} -> {}",
"stop_hint": "ctrl + c para parar",
"shutting_down": "Encerrando o servidor Runique...",
"acme_not_compiled": "ACME_ENABLED=true mas a feature `acme` não está compilada.",
"acme_add_feature": "Adicione a feature `acme` ao seu Cargo.toml.",
"test_utils_feature_enabled": "O recurso `test-utils` está compilado neste build — certifique-se de que esteja em [dev-dependencies], nunca em [dependencies], antes de um deploy em produção."
},
"middleware": {
"bad_request": "Requisição inválida",
"slot_collision": "Colisão de slot de middleware Runique: '{}' e '{}' reivindicam ambos o slot {}. Registre menos middlewares personalizados ou atribua a este um slot explícito."
},
"html": {
"400_title": "400",
"400_text": "Pedido inválido: os parâmetros do endereço não são válidos.",
"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.",
"503_title": "503",
"503_text": "Serviço temporariamente indisponível devido a sobrecarga. Por favor tente novamente em breve.",
"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."
},
"cli": {
"creating_project": "Criando projeto '{}'...",
"admin_detected": "Admin detectado → gerando código admin",
"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",
"fmt_failed": "cargo fmt falhou — formatação ignorada: {}"
},
"daemon": {
"unable_read": "Impossível ler: {}",
"parse_error": "Erro de análise: {}",
"no_resource": "Nenhum recurso em admin!{} — nada a gerar",
"operational": "Daemon operacional → src/admins/admin.rs",
"generation_error": "Erro de geração: {}",
"generated_header": "GERADO AUTOMATICAMENTE — NÃO EDITAR MANUALMENTE",
"generated_notice": "Produzido por `runique start` a partir de src/admin.rs. Qualquer alteração será sobrescrita."
},
"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": {
"multiple_admin_blocks": "admin!: apenas um bloco admin! é permitido por arquivo (primeiro bloco na linha {}, segundo na linha {}) — junte-os",
"title_required": "admin!: 'title' é 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",
"not_activated": "Esta conta ainda não foi ativada pelo seu usuário: será quando ele tiver escolhido a senha pelo e-mail recebido."
},
"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": {
"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",
"see_list": "Ver lista →",
"empty_title": "Nenhum recurso registrado",
"empty_desc": "Declare seus recursos em src/admin.rs com a macro admin!{{}} e depois execute runique start",
"kpi_resources": "Recursos",
"kpi_entries": "Total de entradas",
"kpi_largest": "Maior",
"th_count": "Entradas"
},
"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?",
"btn_reset_password": "Redefinir senha",
"btn_reset_password_short": "Redefinir"
},
"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_unavailable": "A redefinição de senha não está disponível para este item.",
"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",
"theme_toggle": "Alternar tema",
"back_to_site": "← Site"
},
"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 12 caracteres.",
"password_weak": "A senha deve conter pelo menos uma letra minúscula, uma maiúscula, um dígito e um caractere especial.",
"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": {
"destructive_detected": "Alterações destrutivas detectadas:",
"destructive_require_force": "Use --force para aplicar estas alterações destrutivas.",
"long_identifier_detected": "Os identificadores SQL gerados são muito longos (limite do MariaDB/MySQL: 64 caracteres):",
"long_identifier_rename_required": "Encurte os nomes de tabela/coluna envolvidos — o Runique não trunca identificadores automaticamente.",
"files_ready": "{} arquivo(s) pronto(s) para migrar.",
"snapshots_upgraded": "{} snapshot(s) atualizado(s) para registrar o comprimento das colunas (sem migração)."
},
"migrate": {
"applying": "Aplicando migrações de '{}'...",
"complete_up": "Migração concluída.",
"crate_missing": "Crate de migrações não encontrado: '{}' não contém Cargo.toml."
},
"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_weak": "A senha deve conter pelo menos uma maiúscula, uma minúscula, um dígito e um caractere especial (!@#$%...).",
"password_mismatch": "As senhas não coincidem.",
"check_inbox": "Se este endereço estiver associado a uma conta, você receberá um e-mail com as instruções.",
"blocked_subject": "Sua conta está bloqueada",
"blocked_body": "<p>Olá {},</p><p>Foi solicitada a redefinição de senha da sua conta, mas esta conta está bloqueada. Entre em contato com o administrador do site para desbloqueá-la.</p><p>Se você não fez esta solicitação, ignore este e-mail.</p>",
"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",
"can_create": "Criar",
"can_delete": "Eliminar",
"can_delete_own": "Eliminar (próprio)",
"can_read": "Ler",
"can_update": "Modificar",
"can_update_own": "Modificar (próprio)",
"groupes": "Grupos",
"resource_key": "Recurso",
"actions": "Ações"
}
},
"runique_test": {
"connect_failed": "não foi possível conectar: {}",
"begin_failed": "não foi possível abrir a transação de teste: {}",
"env_read_failed": "não foi possível ler {}: {}",
"env_parse_failed": "não foi possível analisar {}: {}",
"env_line_malformed": "não foi possível analisar {}: uma linha está malformada no caractere {} (a linha não é exibida, pode conter uma senha)",
"no_panic_message": "sem mensagem",
"query_failed": "falhou",
"panicked": "pânico: {}",
"rollback_failed": "rollback: {}",
"test_failed": "{} falhou, veja a saída acima",
"clone_outlived": "um clone da conexão de teste sobreviveu ao handler; a transação será revertida quando esse clone for liberado",
"not_a_transaction": "o teste não foi executado dentro de uma transação, então nada pôde ser revertido",
"nested": "runique_test não pode rodar dentro de outro runique_test: esperaria indefinidamente pelo próprio chamador",
"timed_out": "o handler não terminou em {} s: um deadlock, ou uma linha bloqueada por outra conexão? RUNIQUE_TEST_TIMEOUT no arquivo env altera o limite",
"bad_timeout": "{} deve ser um número inteiro de segundos maior que 0, recebido \"{}\"",
"transaction_ended": "a transação do teste foi encerrada de dentro do próprio teste (um COMMIT, ou DDL no MariaDB/MySQL): tudo o que foi escrito antes agora está no banco",
"swallowed_failures": "consultas com falha: {}, e mesmo assim o handler retornou Ok: um erro foi engolido em algum lugar (envolva as falhas esperadas em expect_db_error)",
"rollback_timed_out": "o rollback não terminou em {} s",
"expected": "esperado",
"not_refused": "o banco aceitou o que o teste esperava que ele recusasse",
"no_db_config": "o arquivo env não define nem DATABASE_URL nem DB_ENGINE: o banco de teste precisa ser indicado nele, nada é lido do shell",
"in_memory": "em memória: cada teste começa com um banco vazio"
},
"test_runner": {
"no_cargo_toml": "Nenhum Cargo.toml aqui: execute `runique test` a partir da raiz do seu projeto.",
"test_utils_missing": "A feature `test-utils` não está ativada para o runique no Cargo.toml.\nAdicione-a como dev-dependency para que nunca chegue a um build de release:\n cargo add --dev runique --features test-utils",
"test_utils_shipped": "O Cargo.toml ativa `test-utils` fora de [dev-dependencies], então o builder de testes acabaria no seu build de release.\nRemova-a de [dependencies] (e de qualquer entrada de [features]) e adicione-a apenas como dev-dependency:\n cargo add --dev runique --features test-utils",
"no_mod_file": "Nenhum src/runique_test/mod.rs: crie-o e declare nele cada arquivo de teste (`mod user;`).",
"module_not_declared": "src/main.rs não declara o módulo de testes. Adicione:\n #[cfg(test)]\n mod runique_test;",
"module_not_gated": "O módulo runique_test não está atrás de `cfg(test)`, então acabaria em todos os builds.\nColoque `#[cfg(test)]` logo acima de `mod runique_test;` em src/main.rs.",
"file_not_declared_warning": "aviso: src/runique_test/{}.rs não está declarado em mod.rs, então seus testes não serão executados. Adicione `mod {};` ao mod.rs.",
"no_test_file": "Nenhum src/runique_test/{}.rs. Arquivos de teste: {}",
"file_not_declared": "src/runique_test/{}.rs não está declarado em mod.rs: adicione `mod {};` nele.",
"cargo_spawn_failed": "Não foi possível executar o cargo.",
"output_failed": "Não foi possível exibir a saída do cargo.",
"cargo_wait_failed": "cargo test não terminou corretamente.",
"tests_failed": "cargo test falhou, veja a saída acima.",
"build_failed": "O cargo não conseguiu compilar os testes, veja os erros acima.",
"no_such_test": "Nenhum teste \"{}\" em {}.rs. Testes disponíveis: {}",
"dir_read_failed": "Não foi possível ler {}"
},
"auth": {
"login_cannot_sign_in": "Esta conta não pode entrar: está inativa ou nunca foi ativada.",
"login_session_failed": "Não foi possível salvar a sessão: {}"
}
}