{
  "time": {
    "current_time_label": "Hora atual:",
    "input_label": "Entrada (Unix ms/s ou data)",
    "input_placeholder": "1690000000 / 1690000000000 / 2026-04-22T00:00:00Z​",
    "convert": "Converter",
    "copy_output": "Copiar saída",
    "output": "Saída",
    "err_parse_timestamp": "Não foi possível analisar o carimbo de data/hora.",
    "err_parse_date": "Não foi possível analisar a data string.",
    "copied": "Copiado."
  },
  "json_diff": {
    "intro": "Diferença em nível de objeto alimentada por jsondiffpatch (não comparação de linha simples). Matrizes suportam detecção de movimento; delta é uma estrutura de patch para adicionar/remover/atualizar campos.",
    "left_json": "JSON esquerdo",
    "right_json": "JSON direito",
    "compute": "Calcular diff",
    "delta_title": "Delta (formato jsondiffpatch)",
    "no_diff_comment": "// Sem diferença (mesma estrutura JSON)",
    "parse_failed": "Falha na análise"
  },
  "ascii": {
    "th_dec": "Dec​",
    "th_hex": "Hex​",
    "th_char": "Char​",
    "th_note": "Nota",
    "note_control": "Controle",
    "note_printable": "Imprimível"
  },
  "uuid": {
    "count_label": "Contagem (1–200)",
    "generate_uuid_v4": "Gerar UUID v4",
    "copy_all": "Copiar tudo",
    "please_generate_first": "Gere primeiro.",
    "copied_all": "Copiado tudo.",
    "output": "Saída",
    "output_placeholder": "Clique em gerar."
  },
  "ulid": {
    "count_label": "Contagem (1–100)",
    "generate": "Gerar ULID",
    "copy": "Copiar",
    "placeholder": "IDs classificáveis ​​por tempo de 26 caracteres"
  },
  "nanoid": {
    "length_label": "Comprimento (4–64)",
    "alphabet_hint": "Alfabeto personalizado (vazio = padrão seguro para URL nanoid)",
    "generate": "Gerar",
    "copy": "Copiar"
  },
  "units": {
    "css_title": "CSS: px ↔ rem​",
    "root_px": "Tamanho da fonte raiz (px)",
    "check_line": "Verificar: {px}px ÷ {root} = {rem} rem",
    "storage_title": "Tamanho dos dados",
    "iec_toggle": "Etapas IEC (1024): KiB / MiB / GiB",
    "bytes_label": "Contagem de bytes (inteiro)"
  },
  "color": {
    "picker": "Seletor de cores",
    "css": "CSS​",
    "hex": "HEX​",
    "rgb_title": "RGB (0–255)​",
    "hsl_title": "HSL​",
    "h_label": "H (°)​",
    "s_label": "S (%)​",
    "l_label": "L (%)​",
    "copy_all_formats": "Copiar todos os formatos",
    "copied_line": "Copiar linha HEX/RGB/HSL."
  },
  "contrast": {
    "fg": "Primeiro plano (texto)",
    "bg": "Plano de fundo",
    "large_text_toggle": "Usar limite de texto grande (≥18pt em negrito ou ≥24pt regular)",
    "sample_text": "Amostra Aa 中文 123",
    "invalid_hex": "Usar #RRGGBB ou #RGB.",
    "ratio_label": "Contraste",
    "wcag_prefix": "WCAG 2.1:​"
  },
  "url_parse": {
    "parse": "Analisar",
    "err_invalid": "URL inválido",
    "url_object_fields": "Campos de objeto URL",
    "search_params": "Consulta (searchParams)",
    "key": "Chave",
    "value": "Valor",
    "port_default": "(padrão)",
    "page_intro": "Usa <api>URL</api> e <usp>URLSearchParams</usp>; sem solicitações de rede."
  },
  "punycode": {
    "unicode_label": "Domínio / rótulos Unicode (linhas ou separados por pontos)",
    "to_punycode": "→ Punycode / ASCII​",
    "puny_label": "Punycode (xn--…)​",
    "to_unicode": "→ Unicode​",
    "fail": "Falha"
  },
  "data_url": {
    "drop_label": "Arquivo → URL de dados",
    "drop_title": "Escolha ou solte um arquivo",
    "drop_desc": "Usa FileReader.readAsDataURL; não carregado.",
    "data_url": "URL de dados",
    "copy": "Copiar",
    "decode_download": "Decodificação e download",
    "err_format": "Dados esperados:[mime][;base64],payload",
    "decode_failed": "Falha na decodificação"
  },
  "mime_sniff": {
    "drop_label": "Leitura do cabeçalho do arquivo",
    "drop_title": "Escolha ou solte um arquivo",
    "drop_desc": "Lê os primeiros 64 bytes para detecção mágica; não carregado.",
    "guess_type": "Tipo adivinhado",
    "first_64_hex": "Primeiros 64 bytes (hex)"
  },
  "mime_types": {
    "search_ph": "Extensão de pesquisa ou MIME…",
    "col_ext": "Extensão",
    "col_mime": "MIME​",
    "col_note": "Nota"
  },
  "html_format": {
    "format": "Formato",
    "minify_simple": "Minificar simples (retirar espaços em branco dos comentários)",
    "output": "Saída",
    "copy": "Copiar",
    "fail": "Falha"
  },
  "svg_format": {
    "source": "Fonte SVG",
    "validate_indent": "Validar e recuar",
    "xml_parse_err": "Erro de análise XML; verifique tags.",
    "fail": "Falha"
  },
  "markdown": {
    "render_failed": "Falha na renderização",
    "label": "Fonte de Markdown",
    "export_html": "Exportar HTML",
    "copy_md": "Copiar Markdown",
    "preview": "Visualização ao vivo"
  },
  "http_codes": {
    "search_ph": "Pesquisar código, nome ou descrição…",
    "col_code": "Código",
    "col_name": "Nome",
    "col_desc": "Descrição"
  },
  "ua_parse": {
    "fill_ua": "Preencha este dispositivo UA",
    "hint": "Análise de regex leve, não um banco de dados completo do dispositivo; rastreadores/WebViews podem aparecer como Outros.",
    "browser": "Navegador",
    "engine": "Motor (grosso)",
    "os": "SO",
    "mobile": "Celular",
    "yes": "Sim",
    "no": "Não"
  },
  "keycode": {
    "instructions": "Clique na área abaixo e pressione as teclas (alguns atalhos são bloqueados pelo navegador).",
    "capture_aria": "Área de captura de chave",
    "focus_hint": "Concentre-se aqui e pressione as teclas…",
    "which_keycode": "que / keyCode (legado)",
    "modifiers": "Modificadores"
  },
  "yaml_json": {
    "warning": "js-yaml executa a análise de tags; não cole YAML grande e não confiável. Somente local.",
    "yaml_to_json": "YAML → JSON​",
    "json_to_yaml": "JSON → YAML​",
    "parse_failed": "Falha na análise"
  },
  "toml_json": {
    "warning": "TOML tipos de data são mapeados para formulários compatíveis com JSON; não cole configurações grandes não confiáveis.",
    "toml_to_json": "TOML → JSON​",
    "json_to_toml": "JSON → TOML​",
    "parse_failed": "Falha na análise"
  },
  "json_csv": {
    "json_label": "JSON (matriz de objetos)",
    "csv_label": "CSV (linha de cabeçalho)",
    "json_to_csv": "JSON → CSV​",
    "csv_to_json": "CSV → JSON​",
    "need_object_array": "JSON deve ser uma matriz de objetos.",
    "parse_failed": "Falha na análise"
  },
  "jsonpath": {
    "expr_label": "Expressão JSONPath",
    "hint": "Desenvolvido por jsonpath-plus (semelhante a jq em partes).",
    "query": "Consulta",
    "result_array": "Resultado (matriz)",
    "fail": "Falha"
  },
  "json_to_ts": {
    "root_name": "Nome da interface raiz",
    "generate": "Gerar tipos",
    "typescript": "TypeScript​",
    "fail": "Falha"
  },
  "jmespath": {
    "expr_label": "Expressão JMESPath",
    "hint": "Mesmo JMESPath que AWS CLI/alguns SDKs; envolva literais JSON em crases, por exemplo.",
    "query": "Consulta",
    "result": "Resultado",
    "fail": "Falha"
  },
  "sql_format": {
    "dialect": "Dialeto",
    "dialect_sql": "SQL padrão",
    "beautify": "Embelezar",
    "compress": "Compactação",
    "output": "Saída",
    "format_failed": "Falha no formato"
  },
  "gitignore": {
    "templates": "Modelos",
    "merge": "Mesclar",
    "placeholder": "Mesclado .gitignore",
    "copy": "Copiar"
  },
  "compress": {
    "warn": "Usa CompressionStream; Brotli depende do navegador. A saída é bytes Base64.",
    "algo": "Algoritmo",
    "mode_compress": "Compactação",
    "mode_decompress": "Descompactar",
    "utf8_text": "Texto UTF-8",
    "run_text_compress": "Compactar texto",
    "run_text_decompress": "Descompactar (espera texto UTF-8)",
    "file_label": "Ou arquivo (bytes brutos)",
    "file_title": "Escolher arquivo",
    "file_desc": "Compactar / descompactar binário.",
    "b64_label": "Resultado / entrada Base64",
    "copy_b64": "Copiar Base64",
    "from_b64_compress": "De Base64 → compactar",
    "from_b64_decompress": "De Base64 → descompactar",
    "unsupported_algo": "Este algoritmo não é suportado; experimente Chrome/Edge ou gzip/deflate.",
    "done_bytes": "Concluído ({n} bytes)",
    "fail": "Falha",
    "b64_invalid": "Base64 inválido"
  },
  "cron": {
    "label": "Cron (min hora dia mês dow)",
    "hint": "Texto humano via cronstrue; expr complexo segue a biblioteca.",
    "natural_language": "Linguagem natural",
    "cannot_parse": "Não foi possível analisar esta expressão."
  },
  "chmod": {
    "oct_label": "Octal (por exemplo, 644, 755)",
    "to_rwx": "→ rwx​",
    "rwx_label": "rwxrwxrwx​",
    "to_octal": "→ octal​",
    "err_oct_range": "Octal deve ser 0–777.",
    "err_rwx": "rwx deve ter 9 caracteres de r w x - (setuid simplificado)."
  },
  "cidr": {
    "label": "IPv4 / CIDR​",
    "calc": "Calcular",
    "err": "Erro",
    "network": "Rede",
    "broadcast": "Transmissão",
    "mask": "Máscara de sub-rede",
    "first_host": "Primeiro host",
    "last_host": "Último host",
    "total_addrs": "Total de endereços",
    "usable_hosts": "Hosts utilizáveis ​​(/31,/32 simplificado)"
  },
  "ipv6": {
    "label": "Endereço IPv6 ou CIDR",
    "parse": "Analisar",
    "err": "Erro",
    "correct_form": "Normalizado (forma correta)",
    "canonical_form": "Expansão completa (forma canônica)",
    "prefix_len": "Comprimento do prefixo",
    "subnet_start": "Início da sub-rede",
    "subnet_end": "Fim da sub-rede",
    "addr_count": "Contagem de endereços"
  },
  "ieee754": {
    "label": "Número (decimal)",
    "need_finite": "Insira um número finito.",
    "float64": "Float64​",
    "float32": "Float32​",
    "hex_be": "Hex (big-endian)​",
    "detail_64": "sinal {sign} · exp {exp} (bias 1023) · frac {frac}",
    "detail_32": "sinal {sign} · exp {exp} (bias 127) · frac {frac}"
  },
  "num_base": {
    "from_radix": "Raiz de origem (2–36)",
    "digits": "Dígitos",
    "convert": "Converter",
    "common_bases": "Bases comuns",
    "parse_err": "Não foi possível analisar o número inteiro para esta raiz."
  },
  "iban": {
    "label": "IBAN (espaços ok)",
    "check": "Verificar mod 97",
    "ok": "Checksum OK (mod 97 = 1). Normalizado: {n}",
    "bad": "Falha na soma de verificação (restante {r}). Normalizado: {n}"
  },
  "luhn": {
    "label": "Dígitos (espaços ok)",
    "check": "Verificação Luhn",
    "pass": "Passa Luhn (mod 10)",
    "fail": "Falha"
  },
  "phone": {
    "default_country": "País padrão (ISO 3166-1 alpha-2; usado sem +)",
    "number": "Número de telefone",
    "parse": "Analisar",
    "unparsed": "Não foi possível analisar (tente alterar o país padrão).",
    "err": "Erro",
    "line_e164": "E.164: {v}​",
    "line_intl": "Internacional: {v}",
    "line_nat": "Nacional: {v}",
    "line_country": "País: {c} (padrão {d})",
    "line_type": "Tipo: {v}",
    "line_valid": "Válido: {v}",
    "yes": "Sim",
    "no": "Não",
    "dash": "—​"
  },
  "letter_codes": {
    "input": "Entrada (A–Z, 0–9; use / para espaço em Morse)",
    "nato": "Alfabeto OTAN",
    "morse": "Morse código",
    "braille": "Braille (A–Z, dígitos)"
  },
  "barcode": {
    "format": "Formato",
    "content": "Conteúdo (comprimento/conjunto de caracteres válido por simbologia)",
    "download_png": "Baixar PNG",
    "cannot_generate": "Não foi possível gerar"
  },
  "video_common": {
    "intro": "O núcleo ffmpeg (~30MB) é carregado após você selecionar um arquivo de mídia. O processamento permanece no seu navegador; nada é carregado. Máximo recomendado de {mb}MB por arquivo.",
    "core_loading": "Carregando processador de vídeo…",
    "core_reload": "Recarregar componente",
    "load_btn_loading": "Carregando…",
    "load_btn_ready": "Núcleo pronto",
    "load_btn_idle": "Carregar núcleo ffmpeg",
    "media_file": "Arquivo de vídeo ou áudio",
    "no_file": "Nenhum arquivo selecionado.",
    "converting": "Processando…",
    "download": "Baixar {name}",
    "log": "Registro",
    "load_failed": "Falha ao carregar o núcleo ffmpeg. Verifique sua rede e tente novamente.",
    "load_failed_wasm": "ffmpeg-core.wasm (~32 MB) não carregou. Tente desativar o proxy/VPN ou trocar de rede.",
    "ffmpeg_exit": "ffmpeg saiu com código {c}. Experimente primeiro outro formato de saída ou Video Compress.",
    "convert_failed": "Falha no processamento",
    "progress": "Cerca de {n}%",
    "err_file_too_large": "O arquivo excede o limite de {mb}MB. Apare ou comprima primeiro."
  },
  "video_convert": {
    "page_intro": "Converta entre MP4, WebM, MKV, GIF, M4A, WAV e muito mais. Alguns codecs são limitados em wasm; tente outra saída ou use o Video Compress primeiro.",
    "out_ext": "Formato de saída",
    "convert_go": "Iniciar conversão"
  },
  "video_to_mp4": {
    "page_intro": "Exporte para MP4 (H.264/AAC escolhido pelo ffmpeg). Melhor para compartilhamento e reprodução móvel. Se falhar, tente Video Compress para recodificar primeiro."
  },
  "video_mov_to_mp4": {
    "page_intro": "Converta QuickTime/iPhone MOV para MP4. Outras entradas de vídeo também são aceitas; a saída é sempre MP4."
  },
  "video_mkv_to_mp4": {
    "page_intro": "Converta Matroska (.mkv) para MP4 para players que não suportam MKV. A saída é sempre MP4."
  },
  "video_webm_to_mp4": {
    "page_intro": "Converta gravações de tela WebM ou downloads para MP4. A saída é sempre MP4."
  },
  "video_avi_to_mp4": {
    "page_intro": "Converta AVI legado em MP4. A saída é sempre MP4; codecs muito antigos podem precisar compactar/recodificar primeiro."
  },
  "video_to_webm": {
    "page_intro": "Exportar WebM (VP8/VP9 + Opus/Vorbis). Bom para incorporações na web; o suporte de reprodução varia de acordo com o dispositivo."
  },
  "video_to_mkv": {
    "page_intro": "Exportar contêiner MKV. Útil para arquivamento; MP4 geralmente é melhor para compartilhar."
  },
  "video_trim": {
    "page_intro": "Corte pela hora de início/término em segundos. Rápido = cópia de fluxo (rápido, alinhado ao quadro-chave); Preciso = recodificar (cortes mais lentos e mais precisos).",
    "duration_label": "Duração ≈ {sec} s",
    "start_sec": "Início(ões)",
    "end_sec": "Fim(es)",
    "mode_label": "Modo",
    "mode_copy": "Rápido (cópia de fluxo)",
    "mode_encode": "Preciso (recodificar)",
    "trim_go": "Cortar e baixar"
  },
  "video_compress": {
    "page_intro": "Reduzir o tamanho do arquivo diminuindo a resolução e aumentando o CRF (maior = menor, qualidade inferior; típico 23–32).",
    "height_label": "Altura máxima",
    "height_option": "{h}p​",
    "crf_label": "CRF (agora {crf})",
    "crf_hint": "CRF mais alto = compactação mais forte.",
    "compress_go": "Comprimir e baixar"
  },
  "video_to_gif": {
    "page_intro": "Converter vídeo em GIF. Maior FPS/largura = arquivos maiores e execuções mais lentas.",
    "fps_label": "FPS​",
    "width_label": "Largura (px)",
    "convert_go": "Criar GIF"
  },
  "video_extract_audio": {
    "page_intro": "Retire a trilha de áudio do vídeo. M4A é menor; WAV não está compactado.",
    "format_label": "Formato de saída",
    "format_m4a": "M4A (AAC)​",
    "format_wav": "WAV (PCM)​",
    "format_hint": "A codificação MP3 pode não estar disponível no wasm; prefira M4A.",
    "extract_go": "Extrair áudio"
  },
  "x509_view": {
    "intro": "Colar PEM (com BEGIN/END) ou DER Base64; Impressão digital SHA-256 via Web Crypto, apenas local.",
    "cert": "Certificado",
    "parse": "Analisar",
    "parsing": "Análise…",
    "fingerprint": "Impressão digital SHA-256 (hex)",
    "structured": "Informações estruturadas",
    "parse_failed": "Falha na análise"
  },
  "jwt": {
    "warning": "Decodifica Base64URL e formata JSON apenas. <strong>A assinatura não é verificada</strong> — não para decisões de autenticação. Não cole tokens confidenciais em ambientes não confiáveis.",
    "input_label": "Sequência JWT",
    "decode": "Decodificar",
    "err_empty": "Insira um JWT.",
    "err_parts": "É necessário pelo menos header.payload.",
    "err_header_json": "O cabeçalho não é JSON válido.",
    "err_payload_json": "A carga útil não é JSON válido."
  },
  "base64": {
    "text_label": "Texto",
    "text_to_base64": "Texto → Base64",
    "base64_to_text": "Base64 → Texto",
    "base64_field": "Base64​",
    "base64_from_file": "Base64 do arquivo",
    "select_or_drop_file": "Selecione ou solte o arquivo",
    "base64_from_file_desc": "Bytes brutos codificados; não carregado.",
    "url_safe": "Seguro para URL (Base64URL)",
    "data_url": "Saída como URL de dados",
    "encoded_file": "Codificado: {name}",
    "copy": "Copiar",
    "copied": "Copiado.",
    "base64_to_download": "Decodificar para baixar",
    "decode_failed": "Falha na decodificação"
  },
  "base32": {
    "original_utf8": "Original (UTF-8)​",
    "text_to_base32": "Texto → Base32",
    "base32_to_text": "Base32 → Texto",
    "base32_rfc4648": "Base32 (RFC 4648, sem preenchimento)",
    "copy": "Copiar",
    "copied_base32": "Base32 copiado.",
    "decode_failed": "Falha na decodificação"
  },
  "base58": {
    "text_utf8": "Texto (UTF-8)",
    "text_to_base58": "Texto → Base58",
    "base58_to_text": "Base58 → Texto",
    "base58_field": "Base58​",
    "decode_failed": "Falha na decodificação"
  },
  "url_encode": {
    "input": "Entrada",
    "output": "Saída",
    "encode": "Codificar",
    "decode": "Decodificar",
    "copy_output": "Copiar saída",
    "copied": "Copiado.",
    "decode_failed": "Falha na decodificação"
  },
  "hex": {
    "text_utf8": "Texto (UTF-8)",
    "text_to_hex": "Texto → Hex",
    "hex_to_text": "Hex → Texto",
    "hex_field": "Hex (espaços, novas linhas e 0x são removidos durante a decodificação)",
    "copy": "Copiar",
    "copied_hex": "Hex copiado.",
    "err_hex_odd_length": "O comprimento hexadecimal deve ser par (espaços em branco e 0x ignorados).",
    "err_utf8_decode": "Não foi possível decodificar como UTF-8"
  },
  "escape": {
    "mode": "Modo",
    "html_entity_mode": "entidades HTML",
    "json_string_mode": "Escape de string JSON",
    "input": "Entrada",
    "encode_or_escape": "Codificar / escapar",
    "decode_or_restore": "Decodificar/restaurar",
    "json_decode_not_string": "O valor JSON não é uma string.",
    "decode_failed": "Falha na decodificação",
    "output": "Saída",
    "copied_output": "Saída copiada.",
    "copy_output": "Copiar saída",
    "failed": "Falha",
    "page_intro": "Como ferramentas comuns de Escape/entidade: HTML usa entidades de caracteres principais; O modo JSON escapa de strings analisáveis ​​por <jp>JSON.parse</jp>."
  },
  "hash": {
    "select_file": "Selecione o arquivo",
    "select_or_drop_file": "Selecione ou solte o arquivo",
    "hash_local_desc": "Resumo computado localmente; não carregado.",
    "please_select_file": "Selecione um arquivo primeiro.",
    "computing": "Computação…",
    "compute_digest": "Resumo de cálculo",
    "copy": "Copiar",
    "computed_file": "Calculado: {name} ({size} bytes)",
    "compute_failed": "Falha no cálculo",
    "md5_label": "MD5​",
    "sha256_label": "SHA-256​",
    "dash": "—​"
  },
  "hmac": {
    "hash_algorithm": "Algoritmo hash",
    "secret_key": "Chave secreta",
    "message": "Mensagem",
    "compute_hmac_hex": "Calcular HMAC (hexadecimal)",
    "output": "Saída",
    "copy": "Copiar",
    "failed": "Falha",
    "dash": "—​"
  },
  "aes": {
    "aes_pbkdf2_note": "AES-256-GCM: salt aleatório + PBKDF2 ({iter} iterações, SHA-256) deriva a chave apenas no seu navegador.",
    "passphrase": "Senha",
    "plaintext": "Texto simples",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "processing": "Processando…",
    "please_input_passphrase": "Por favor, insira uma senha.",
    "encrypt_success": "Criptografado.",
    "encrypt_failed": "Falha na criptografia",
    "cipher_base64": "Texto cifrado (Base64: salt ∥ IV ∥ dados)",
    "cipher_too_short": "O texto cifrado é muito curto ou corrompido.",
    "decrypt_success": "Descriptografado.",
    "decrypt_failed_bad_key": "Falha na descriptografia (frase secreta errada ou dados inválidos).",
    "copied_cipher": "Texto cifrado copiado.",
    "copy_cipher": "Copiar texto cifrado"
  },
  "password": {
    "select_charset": "Selecione pelo menos um conjunto de caracteres.",
    "length_4_to_256": "Comprimento (4–256)",
    "upper_az": "Maiúsculas A–Z",
    "lower_az": "A–z",
    "digits": "Dígitos",
    "symbols": "Símbolos minúsculos",
    "generate": "Gerar",
    "copy": "Copiar",
    "copied": "Copiado.",
    "result": "Resultado",
    "placeholder_click_generate": "Clique em Gerar",
    "footnote": "Usa crypto.getRandomValues; conjunto de símbolos é um pequeno subconjunto compatível com o teclado - ajuste as caixas de seleção conforme necessário."
  },
  "crc32": {
    "text_utf8": "Texto (UTF-8)",
    "compute_crc32": "Calcular CRC32",
    "label_from_file": "Ou do arquivo",
    "title_drop": "Selecione ou solte o arquivo",
    "desc_local": "IEEE CRC-32 em bytes brutos; não carregado.",
    "crc32_title": "CRC32​",
    "label_current_text": "texto atual",
    "copy_hex": "Copiar hex",
    "copied_hex_value": "Valor hex copiado.",
    "msg_computed": "Calculado: {label} ({bytes} bytes)",
    "read_failed": "Falha na leitura",
    "decode_failed": "Falha",
    "dash": "—​"
  },
  "xor": {
    "warning": "XOR é simétrico e não oferece autenticação—não use para sigilo real; bom para CTFs, demonstrações ou ofuscação leve.",
    "encrypt_section": "Criptografar",
    "decrypt_section": "Descriptografar",
    "plaintext_utf8": "Texto simples (UTF-8)",
    "key_utf8_cyclic": "Chave (UTF-8, repetida)",
    "output_format": "Formato de saída",
    "opt_hex": "Hex​",
    "opt_b64": "Base64​",
    "xor_to_cipher": "XOR → texto cifrado",
    "cipher_label": "Texto cifrado",
    "cipher_input_label": "Texto cifrado ({mode})",
    "xor_to_plain": "XOR → texto simples",
    "plaintext_result": "Texto simples",
    "err_key_empty": "A chave não pode estar vazia",
    "err_hex_odd": "O comprimento hexadecimal deve ser uniforme",
    "failed": "Falha"
  },
  "vigenere": {
    "intro": "Vigenère: apenas A–Z / a–z são transformados; outros personagens são mantidos. As letras que não são da chave são ignoradas.",
    "text": "Texto",
    "key_english": "Chave (letras)",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "result": "Resultado",
    "err_key_letters": "A chave deve conter pelo menos uma letra de A a Z",
    "error_generic": "Erro"
  },
  "rsa": {
    "intro": "Utiliza o navegador <link>Web Crypto</link> RSA-OAEP; apenas para mensagens curtas ou encapsulamento de chaves simétricas. Requer um contexto seguro (HTTPS ou localhost).",
    "generate_keypair": "Gerar par de chaves",
    "pub_pem": "Chave pública (SPKI PEM)",
    "priv_pem": "Chave privada (PKCS#8 PEM)",
    "encrypt_section": "Criptografar",
    "plaintext_utf8": "Texto simples (UTF-8)",
    "encrypt_public": "Criptografar com chave pública",
    "cipher_section": "Texto cifrado e descriptografado",
    "cipher_b64": "Texto cifrado (Base64)",
    "decrypt_private": "Descriptografar com chave privada",
    "decrypted": "Descriptografado",
    "msg_generated": "RSA-OAEP de 2048 bits gerado (SHA-256); a chave privada permanece apenas na memória – não compartilhe.",
    "msg_generate_fail": "Falha na geração (alguns ambientes precisam de um contexto seguro: HTTPS ou localhost).",
    "err_need_public_pem": "Gere ou cole a chave pública PEM primeiro.",
    "err_plain_too_long": "Texto simples muito longo: RSA-OAEP (2048/SHA-256) geralmente tem menos de {max} bytes; atual {current}. Use criptografia simétrica (por exemplo, AES-256-GCM) para agrupar chaves.",
    "encrypt_failed": "Falha na criptografia",
    "err_need_private_pem": "Gere ou cole a chave privada PEM primeiro.",
    "decrypt_failed": "Falha na descriptografia",
    "err_pem_parse": "Não foi possível analisar o PEM; verifique os blocos BEGIN/END."
  },
  "qr_generate": {
    "content_label": "Conteúdo (texto / URL / Wi‑Fi)",
    "size_px": "Tamanho (px)",
    "margin": "Margem",
    "foreground": "Primeiro plano",
    "background": "Plano de fundo",
    "generate_preview": "Gerar visualização",
    "busy": "Gerando…",
    "download_png": "Baixar PNG",
    "preview": "Visualizar",
    "qr_alt": "código QR",
    "err_empty": "O conteúdo não pode estar vazio",
    "err_generate": "Falha ao gerar",
    "error_correction": "Correção de erros",
    "low_contrast": "O contraste do primeiro plano e do fundo é baixo; alguns scanners podem não reconhecer o código.",
    "live_preview": "Visualização ao vivo",
    "templates": "Modelos",
    "template_url": "URL​",
    "template_wifi": "Wi-fi",
    "template_email": "E-mail",
    "template_tel": "Telefone",
    "scan_hint": "Carga atual: {length} caracteres. Conteúdo mais curto verifica com mais confiabilidade."
  },
  "qr_decode": {
    "drop_label": "Imagem com código QR",
    "drop_title": "Selecione ou solte PNG / JPG…",
    "drop_desc": "Decodificado localmente com jsQR; não carregado.",
    "empty_hint": "Nenhuma imagem selecionada ainda.",
    "parse_result": "Resultado",
    "copy": "Copiar",
    "err_canvas": "Tela indisponível",
    "err_not_found": "Nenhum QR encontrado (tente uma imagem mais clara e com maior contraste).",
    "err_decode": "Falha na decodificação",
    "err_load_image": "Não foi possível carregar a imagem",
    "dash": "—​"
  },
  "text_case": {
    "mode_label": "Transformar",
    "mode_upper": "MAIÚSCULAS",
    "mode_lower": "minúsculas",
    "mode_title": "Caixa do título (palavras)",
    "mode_sentence": "Caixa da frase (heurística)",
    "mode_camel": "camelCase​",
    "mode_constant": "CONSTANT_CASE​",
    "mode_kebab": "kebab-case​",
    "mode_snake": "Snake_case",
    "source": "Fonte",
    "result": "Resultado",
    "copy_result": "Copiar resultado",
    "placeholder_source": "Colar ou digitar…"
  },
  "text_lines": {
    "sort_asc": "Classificar linhas (↑)",
    "sort_desc": "Classificar linhas (↓)",
    "dedupe": "Desduplicar linhas",
    "remove_empty": "Remover linhas vazias",
    "trim_lines": "Aparar cada linha",
    "reverse": "Inverter ordem das linhas",
    "input": "Entrada",
    "result": "Resultado",
    "copy_result": "Copiar resultado",
    "placeholder_input": "Um item por linha ou colar uma lista…",
    "placeholder_result": "Use os botões acima…"
  },
  "text_stats": {
    "label": "Texto",
    "placeholder": "Colar conteúdo; atualização de estatísticas ao vivo…",
    "lines": "Linhas",
    "chars_code_units": "Caracteres (unidades de código)",
    "chars_no_ws": "Caracteres (sem espaços em branco)",
    "words_ws": "Palavras (divisão de espaços em branco)",
    "graphemes": "Aglomerados de grafemas (Intl, aprox. “caracteres”)",
    "bytes_utf8": "Bytes UTF-8",
    "footnote": "“Palavras” divididas em espaços; para CJK etc. prefira grafemas. Todas as estatísticas são executadas localmente."
  },
  "text_replace": {
    "find": "Localizar",
    "replace_with": "Substituir por",
    "use_regex": "Usar expressão regular",
    "flags": "Sinalizadores",
    "source": "Fonte",
    "result": "Resultado",
    "copy": "Copiar",
    "footnote": "O modo literal substitui todas as correspondências globalmente; o modo regex segue String.replace - escape mental e sinalizadores (comuns: g, i, m)."
  },
  "text_split_join": {
    "delimiter": "Delimitador",
    "placeholder_delimiter": "por exemplo. , ou | ou personalizado",
    "split_lines": "Dividir → um item por linha",
    "join_lines": "Juntar ← linhas com delimitador",
    "copy_result": "Copiar resultado",
    "help": "Dividir: corta o texto pelo delimitador em linhas. Join: leia a entrada linha por linha e insira o delimitador entre as linhas.",
    "placeholder_input": "Split: cole uma linha separada por vírgula; Unir: um item por linha…",
    "placeholder_output": "Clique em dividir ou juntar…",
    "input": "Entrada",
    "output": "Saída"
  },
  "text_regex": {
    "warn_truncated": "Apenas os primeiros {max} caracteres são correspondidos e destacados.",
    "pattern": "Padrão",
    "flags": "Sinalizadores",
    "flags_ph": "gimsuy​",
    "invalid": "Expressão regular inválida",
    "text": "Texto",
    "match_count": "{count} correspondência(s)",
    "list_omitted": "… outras correspondências omitidas"
  },
  "text_diff": {
    "text_a": "Texto A",
    "text_b": "Texto B",
    "line_diff": "Linha diff"
  },
  "text_lorem": {
    "paragraphs": "Parágrafos (1–50)",
    "generate": "Gerar",
    "copy": "Copiar",
    "placeholder": "Clique em Gerar"
  },
  "text_rot13": {
    "label": "Texto (A–Z gira 13; execute novamente para desfazer)",
    "action": "ROT13​"
  },
  "text_strip_html": {
    "warning": "Usa DOMParser para nós de texto; os scripts não são executados – evite colar HTML enorme e não confiável.",
    "html": "HTML​",
    "plain": "Texto simples",
    "extract": "Extraia texto simples",
    "placeholder_out": "Use o botão à esquerda"
  },
  "text_slug": {
    "input": "Entrada",
    "generate": "Gerar slug",
    "hint": "Retire os diacríticos, mantenha a–z e 0–9, transforme espaços/símbolos em hífens (auxiliar de slug de URL, não SEO completo).",
    "result": "Resultado",
    "copy": "Copiar",
    "dash": "—​"
  },
  "text_indent": {
    "text": "Texto",
    "use_tab": "Recuar com tabulação",
    "spaces_per_level": "Espaços por nível",
    "dedent_times": "Dedentar passagens",
    "indent_once": "Recuar bloco inteiro",
    "dedent_tab": "Remover até {n} tabulações iniciais por linha",
    "dedent_space": "Remover até {n} espaços iniciais por linha",
    "skip_blank": "Ignorar linhas em branco",
    "copy": "Copiar resultado",
    "example": "Exemplo",
    "clear": "Limpar",
    "copied": "Copiado para a área de transferência."
  },
  "text_sort_lines": {
    "label": "Classificar linhas",
    "desc": "Descendente",
    "natural": "Classificação natural (numérica)",
    "trim_end": "Cortar o final da linha antes da classificação",
    "sort": "Classificar",
    "page_intro": "Complementa a classificação na limpeza de linha: alterna entre ascendente/descendente e ativa o modo numérico amigável para <lc>localeCompare</lc>—ótimo para números de versão e listas de arquivos."
  },
  "text_line_numbers": {
    "text": "Texto",
    "start": "Número inicial",
    "pad_width": "Largura mínima",
    "separator": "Separador",
    "add": "Adicionar linha números",
    "strip": "Retira o prefixo “número |” simples",
    "footnote": "Strip usa um regex simples para dígitos iniciais e “|”; edite manualmente para casos complexos."
  },
  "text_wrap": {
    "note": "A largura conta unidades de código UTF-16 – não colunas terminais ou CJK de largura total; alternar hard-break para linhas longas e ininterruptas.",
    "text": "Texto",
    "max_width": "Máximo de caracteres por linha",
    "break_long": "Quebrar linhas longas sem espaços",
    "rewrap": "Reenrolar no lugar"
  },
  "csv_markdown": {
    "csv_to_md": "CSV → Markdown​",
    "to_markdown": "Para tabela Markdown",
    "md_to_csv": "Tabela Markdown → CSV",
    "to_csv": "Para CSV",
    "failed": "Falha"
  },
  "fullwidth": {
    "source": "Texto",
    "to_full": "Para largura total",
    "to_half": "Para meia largura",
    "footnote": "Cobre ASCII imprimível e espaço; CJK etc. inalterado."
  },
  "rmb_daxie": {
    "convert": "Converter",
    "placeholder": "1234.56​",
    "error": "Erro"
  },
  "ics": {
    "raw_label": "Texto do iCalendar",
    "parse": "Analisar",
    "no_events": "Nenhum VEVENT analisado",
    "parse_failed": "Falha na análise",
    "no_title": "(Sem título)",
    "start": "Início",
    "end": "Fim",
    "location": "Localização",
    "dash": "—​"
  },
  "vcard": {
    "raw_label": "vCard texto",
    "th_field": "Campo",
    "th_value": "Valor",
    "empty": "Nenhuma linha válida"
  },
  "email_headers": {
    "raw_label": "Cabeçalhos brutos (até a primeira linha em branco)",
    "th_name": "Nome",
    "th_value": "Valor",
    "empty": "Nada analisado"
  },
  "docmind": {
    "privacy_title": "Aviso de conversão na nuvem",
    "privacy_body": "Os arquivos são enviados através do conversor deste site para o Alibaba Cloud Document Mind (China continental). Não carregue dados pessoais confidenciais. Os links para download do Alibaba normalmente são válidos por cerca de 24 horas.",
    "err_no_file": "Escolha um arquivo PDF primeiro.",
    "err_file_too_large": "O arquivo não deve exceder {max}MB.",
    "err_too_many_files": "Apenas um arquivo PDF por conversão.",
    "err_failed": "Falha na conversão",
    "err_no_download_url": "A conversão foi concluída, mas nenhum URL de download foi retornado. Tente novamente.",
    "err_proxy_unreachable": "Não é possível acessar o serviço de conversão ({base}). Inicie o proxy docmind e defina NEXT_PUBLIC_DOCMIND_API_URL.",
    "msg_submitting": "Enviando trabalho de conversão…",
    "msg_processing": "Processando na nuvem; isso pode levar de dezenas de segundos a alguns minutos...",
    "msg_done": "Conversão concluída. Baixe na lista abaixo.",
    "result_title": "Resultados da conversão",
    "download_hint": "Os links são fornecidos pela Alibaba Cloud e normalmente são válidos por cerca de 24 horas. Se o salvamento falhar, abra o link em uma nova guia.",
    "selected_file": "Selecionado: {name} (~{size} MB)",
    "poll_hint": "{count} tempo(s) pesquisado(s), verificando a cada 10 segundos",
    "limits_note": "Limites: um PDF por trabalho, máximo de 5 MB, máximo de 10 páginas"
  },
  "pdf_to_word": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Um PDF por trabalho, máximo 5MB; converte para Word (.docx) via Alibaba Document Mind.",
    "empty_hint": "Nenhum arquivo selecionado ainda.",
    "btn_convert": "Converter",
    "before_title": "Verifique o ajuste da conversão antes de fazer upload",
    "before_body": "PDF to Word carrega o arquivo em um serviço de inteligência de documentos para reconhecimento de layout. É melhor para contratos editáveis, relatórios, documentos de escritório e digitalizações nítidas. Confirme suas regras de conformidade antes de enviar arquivos confidenciais.",
    "good_for": "Bom para",
    "good_contract": "Contratos, editais, manuais e documentos que necessitam de edição",
    "good_report": "Relatórios com títulos, parágrafos, imagens e tabelas simples",
    "good_scan": "Limpar PDFs digitalizados ou PDFs de fotos que precisam de OCR",
    "not_for": "Não é ideal para",
    "not_sensitive": "IDs, cartões bancários, contratos confidenciais ou arquivos que não devem ser carregados",
    "not_large": "PDFs com mais de 5 MB ou muitas páginas",
    "not_table": "PDFs com muita tabela; use PDF para Excel",
    "fail_title": "Falha ou qualidade ruim?",
    "try_compress": "Compactar primeiro",
    "try_split": "Dividir primeiro",
    "try_excel": "Para Excel"
  },
  "pdf_to_excel": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Um PDF por trabalho, máximo de 5 MB; converte para Excel (.xlsx) via Alibaba Document Mind.",
    "empty_hint": "Nenhum arquivo selecionado ainda.",
    "btn_convert": "Converter"
  },
  "pdf_merge": {
    "drop_label": "Escolha PDFs (mesclados na ordem da lista; adicione várias vezes)",
    "drop_desc": "Seleção múltipla suportada; a ordem segue a lista abaixo; arraste novamente para anexar.",
    "err_need_two": "Selecione pelo menos 2 arquivos PDF.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha na mesclagem",
    "empty_hint": "Nenhum arquivo selecionado ainda.",
    "btn_merge_download": "Mesclar e baixar",
    "download_name": "mesclado.pdf",
    "move_up": "Subir",
    "move_down": "Mover para baixo"
  },
  "pdf_batch": {
    "phase2_title": "Fase 2: fila em lote + renderização do trabalhador (quando compatível)",
    "phase2_body": "Se OffscreenCanvas for compatível, a rasterização será executada em um Worker para reduzir travamentos da interface; caso contrário, volta ao thread principal em partes.",
    "drop_label": "Adicionar PDFs à fila (seleção múltipla, arrastar várias vezes)",
    "drop_desc": "Arquivos não PDF são filtrados. As tarefas aparecem na lista abaixo.",
    "err_no_pdf": "Nenhum arquivo PDF detectado.",
    "err_no_pending": "Nenhuma tarefa pendente (itens concluídos não são reexportados).",
    "log_started": "Iniciando exportação em lote…",
    "err_cancelled": "Cancelado",
    "err_failed_msg": "Falha no lote",
    "log_done_zip": "Download compactado ZIP concluído.",
    "scale_label": "Escala de exportação (lote sugere 1,4 – 2,2)",
    "fmt_label": "Formato de exportação",
    "quality_label": "Qualidade (0,1 – 1,0)",
    "status_prefix": "Status:​",
    "status_pending": "pendente",
    "status_running": "em execução",
    "status_done": "feito",
    "status_error": "erro",
    "btn_remove": "Remover",
    "queue_empty": "A fila está vazia.",
    "btn_export_all": "Exportar tudo ({n} pendente)",
    "btn_processing": "Trabalhando…",
    "btn_cancel": "Cancelar",
    "btn_clear_queue": "Limpar fila",
    "log_page_progress": "{file}: {current}/{total}​"
  },
  "pdf_compress": {
    "notice_title": "Estratégia de compressão (transparente)",
    "notice_body": "Compressão raster: cada página é renderizada em JPG e reconstruída em PDF. Funciona melhor em digitalizações; PDFs de texto podem crescer ou parecer mais suaves.",
    "drop_label": "Escolha PDF",
    "drop_desc": "Reembale localmente no navegador para diminuir o tamanho; nada é carregado.",
    "compress_desc": "Reempacotamento de streaming local para reduzir tamanho; não carregado.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "download_name": "comprimido.pdf",
    "scale_label": "Escala de renderização (maior = mais nítido, mas maior)",
    "quality_label": "Qualidade JPG (0,1 – 1,0)",
    "btn_compress": "Iniciar compactação",
    "msg_select_first": "Escolha um PDF primeiro.",
    "msg_done_hint": "Download concluído (nota: as digitalizações encolhem mais do que PDFs de texto).",
    "err_failed": "Falha na compactação",
    "preset": "Predefinição de compactação",
    "preset_strong": "Forte (menor, menor clareza)",
    "preset_balanced": "Balanceado (recomendado)",
    "preset_quality": "Alta qualidade (arquivo maior)",
    "before": "Antes",
    "after": "Depois",
    "change": "Alteração de tamanho",
    "smaller": "Compactação concluída. Verifique a clareza antes de baixar.",
    "larger": "O resultado é maior que o original. Mantenha o original ou tente uma predefinição mais forte.",
    "preset_card_strong": "Arquivo menor",
    "preset_card_strong_desc": "Melhor para digitalizações, PDFs de fotos e compartilhamento somente leitura.",
    "preset_card_balanced": "Equilibrado",
    "preset_card_balanced_desc": "Bom padrão para a maioria dos anexos.",
    "preset_card_quality": "Alta qualidade",
    "preset_card_quality_desc": "Melhor para textos pequenos, gráficos ou impressão.",
    "raster_warning": "Nota: esta ferramenta rasteriza páginas e reconstrói o PDF. O texto pode não ser mais selecionável após a compactação. Use PDF para Word ou Extrair Texto se precisar de conteúdo editável.",
    "saved": "Salvo",
    "output_size": "Tamanho de saída",
    "check_quality": "Abra o resultado e verifique a clareza do texto/imagem",
    "next_actions": "Continuar após a compressão",
    "next_split": "Dividir páginas",
    "next_merge": "Mesclar PDF",
    "next_images": "Converter em imagens"
  },
  "pdf_crop": {
    "intro": "Ajuste as margens do CropBox/MediaBox (pt). Isso altera a região visível e os limites da página sem excluir o conteúdo vetorial.",
    "drop_label": "Escolha PDF",
    "drop_desc": "O corte é executado localmente. As páginas são configuradas abaixo.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "left": "Margem esquerda (pt)",
    "right": "Margem direita (pt)",
    "top": "Margem superior (pt)",
    "bottom": "Margem inferior (pt)",
    "mode_label": "Modo de corte",
    "mode_crop_media": "CropBox + MediaBox (mais geral)",
    "mode_crop_only": "CropBox apenas (conservador)",
    "btn_crop": "Cortar e baixar",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_pick_pages": "Selecionar páginas para cortar.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha no corte",
    "download_name": "cropped.pdf​"
  },
  "pdf_decrypt": {
    "notice_title": "Aviso de conformidade",
    "notice_body": "Somente para PDFs cuja senha você conhece. As páginas são rasterizadas e reconstruídas, portanto, o texto e os links selecionáveis ​​são perdidos.",
    "drop_encrypt_label": "Escolha PDF criptografado",
    "drop_desc": "Descriptografe localmente com sua senha; os arquivos não são carregados.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "password_label": "Senha de abertura",
    "scale_label": "Escala de renderização",
    "quality_label": "Qualidade JPG (0,1 – 1,0)",
    "btn_decrypt": "Descriptografar e baixar",
    "msg_select_first": "Escolha um PDF primeiro.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha na descriptografia",
    "download_name": "decrypted.pdf​"
  },
  "pdf_delete_pages": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Clique nas miniaturas para excluir; as páginas não selecionadas permanecem e são exportadas para um novo arquivo.",
    "hint_short": "Clique nas páginas para excluir; as páginas não selecionadas permanecem no PDF exportado.",
    "btn_delete": "Excluir páginas selecionadas e fazer download",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_pick_delete": "Selecionar páginas a serem excluídas.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha na exclusão",
    "thumb_title": "Páginas a serem excluídas",
    "download_name": "deleted-pages.pdf​"
  },
  "pdf_extract_text": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Extraia texto por página localmente; as digitalizações podem não ter camada de texto.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "btn_extract": "Extrair texto (txt)",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "progress_page": "Extraindo página {current} / {total}…",
    "msg_done_hint": "Txt exportado. Observação: PDFs digitalizados/de imagem podem não produzir texto.",
    "err_failed": "Falha na extração"
  },
  "pdf_header_footer": {
    "intro": "Fase 2: modelos de cabeçalho e rodapé esquerdo/centro/direito; os espaços reservados '{'n'}' e '{'total'}' são substituídos na exportação. O texto chinês usa o subconjunto Source Han Sans do OSS; as falhas de busca retrocedem normalmente.",
    "presets_heading": "Predefinições rápidas",
    "drop_label": "Escolha PDF",
    "drop_desc": "Aplicar texto de cabeçalho/rodapé por página localmente; suporta '{'n'}' / '{'total'}', etc.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "header_left": "Cabeçalho à esquerda",
    "header_center": "Centro do cabeçalho",
    "header_right": "Cabeçalho à direita",
    "footer_left": "Rodapé à esquerda",
    "footer_center": "Centro do rodapé",
    "footer_right": "Rodapé à direita",
    "ph_company": "por exemplo nome da empresa",
    "ph_title": "por exemplo título do documento",
    "ph_version": "por exemplo versão",
    "footer_center_ph": "Sugerido: '{'n'}' / '{'total'}'",
    "font_size": "Tamanho da fonte",
    "margin_pt": "Margem (pt)",
    "btn_apply": "Aplique e baixe",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_need_field": "Preencha pelo menos um slot de cabeçalho ou rodapé.",
    "msg_pick_pages": "Selecione páginas para o modelo.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha",
    "preset_minimal_name": "Rodapé mínimo (n/total)",
    "preset_internal_name": "Uso interno + rodapé",
    "preset_dual_name": "Cabeçalho duplo + rodapé centralizado",
    "preset_internal_header": "Interno · Não distribuir",
    "preset_internal_footer": "Página '{'n'}' / '{'total'}' páginas",
    "preset_dual_footer": "Confidencial",
    "download_name": "header-footer.pdf​"
  },
  "images_to_pdf": {
    "intro": "PNG / JPEG suportado. Uma imagem por página PDF; o tamanho da página corresponde às dimensões em pixels.",
    "drop_label": "Escolha as imagens (a ordem das páginas segue a lista; adicione várias vezes)",
    "drop_desc": "somente PNG e JPEG; a ordem da lista é a ordem das páginas.",
    "empty_hint": "Nenhum arquivo selecionado ainda.",
    "btn_generate": "Construir PDF",
    "msg_need_image": "Escolha pelo menos uma imagem.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha ao gerar",
    "download_name": "imagens mescladas.pdf"
  },
  "pdf_metadata": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Leia as propriedades comuns do documento; edite e exporte como um novo arquivo.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "label_title": "Título",
    "label_author": "Autor",
    "label_subject": "Assunto",
    "label_keywords": "Palavras-chave",
    "keywords_ph": "Separar com vírgulas",
    "label_creator": "Criador",
    "label_producer": "Produtor (opcional)",
    "producer_ph": "Deixe em branco para manter o Produtor existente",
    "label_language": "Idioma (opcional)",
    "language_ph": "por exemplo zh-CN, en-US; deixe em branco para pular Lang no contorno",
    "checkbox_viewer_prefs": "Prefira o título do documento no título da janela do visualizador (pdf-lib ViewerPreferences)",
    "btn_apply": "Aplique e baixe",
    "msg_loaded": "Metadados carregados; editar e exportar.",
    "msg_read_failed": "Falha na leitura",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_done_verify": "Metadados gravados e baixados (alguns visualizadores armazenam em cache metadados antigos - renomeie para verificar).",
    "err_export_failed": "Falha na exportação",
    "download_suffix": "-metadados",
    "page_intro": "Abrange campos comuns mostrados nas \"propriedades do documento\" do leitor. As alterações gravam um novo arquivo localmente – nada é carregado em nossos servidores. Desenvolvido por <pdflib>Hopding/pdf-lib</pdflib>."
  },
  "pdf_page_numbers": {
    "intro": "Espaços reservados: '{'n'}' página atual, '{'total'}' total de páginas. Strings chinesas estão OK (por exemplo, “Página '{'n'}'”); a fonte é carregada do subconjunto OSS com substituto.",
    "drop_label": "Escolha PDF",
    "drop_desc": "Adicionar numeração de rodapé/borda de página localmente.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "start_number": "Número inicial",
    "align_label": "Alinhamento",
    "align_left": "Esquerda",
    "align_center": "Centro",
    "align_right": "Direita",
    "format_string": "String de formato",
    "font_size": "Tamanho da fonte",
    "margin_x": "Margem horizontal (pt)",
    "margin_y_footer": "Elevação do rodapé (pt, maior = mais alto na página)",
    "btn_add": "Adicionar números de página e fazer download",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_pick_pages": "Selecionar páginas para numeração.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha",
    "download_name": "page-numbers.pdf​"
  },
  "pdf_reverse": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Inverter a ordem inteira das páginas; conteúdo inalterado.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "btn_reverse": "Ordem inversa e download",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_done": "Download pronto.",
    "err_failed": "Falha no processamento",
    "download_suffix": "-reverso",
    "page_intro": "Útil quando a encadernação ou ordem de leitura precisa de todo o PDF virado de ponta a ponta; implementado através da cópia de páginas <pdflib>pdf-lib</pdflib> sem renderizar novamente o conteúdo vetorial."
  },
  "pdf_rotate": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Escolha miniaturas e adicione rotação relativa por página selecionada; processado localmente.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "angle_label": "Rotação a ser aplicada (relativa)",
    "btn_rotate": "Aplicar rotação",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_pick_page": "Selecione pelo menos uma página.",
    "msg_rotate_done": "Rotação concluída. Você pode fazer o download agora.",
    "msg_download_done": "Download iniciado.",
    "err_failed": "Falha na rotação",
    "thumb_title": "Páginas para girar",
    "thumb_preview_hint": "As visualizações são apenas miniaturas; a qualidade da exportação não é afetada.",
    "download_name": "rotated.pdf​"
  },
  "pdf_split": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Dividido em vários PDFs por cada página ou tamanho de bloco fixo (download ZIP).",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "legend_mode": "Modo de divisão",
    "mode_each": "Um arquivo por página",
    "mode_chunk": "Grupos de páginas fixas",
    "chunk_size_label": "Páginas por grupo",
    "hint_each": "Cada página é exportada como seu próprio PDF.",
    "hint_chunk": "Exportação de grupo a cada {chunk} páginas.",
    "btn_split": "Divida e baixe ZIP",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_done_zip": "A geração do ZIP foi iniciada.",
    "err_failed": "Falha na divisão",
    "thumb_preview_title": "Preview (browse only; split follows options above)",
    "mode_selected": "Extraia as páginas selecionadas em um PDF",
    "hint_selected": "Clique nas miniaturas abaixo para selecionar as páginas. As {count} páginas selecionadas serão exportadas como um PDF na ordem original.",
    "msg_pick_pages": "Selecione pelo menos uma página das miniaturas abaixo.",
    "msg_done_pdf": "PDF da página selecionada gerado e download iniciado.",
    "selected_download_name": "páginas selecionadas.pdf",
    "selected_count": "{count} páginas selecionadas",
    "first_page": "Selecione a página 1",
    "first_three": "Selecione os 3 primeiros",
    "clear_selected": "Limpar seleção"
  },
  "pdf_stamp": {
    "drop_pdf_label": "Escolha PDF",
    "drop_pdf_desc": "Documento base; escolha páginas para carimbar.",
    "drop_stamp_label": "Imagem de carimbo (PNG recomendado)",
    "drop_stamp_desc": "PNG ou JPEG; PNG transparente geralmente fica melhor.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "empty_stamp": "Nenhuma imagem de carimbo ainda.",
    "position_label": "Posição",
    "scale_label": "Escala (em relação à largura da imagem)",
    "margin_label": "Margem (pt)",
    "pos_center": "Centro",
    "pos_br": "Canto inferior direito",
    "pos_bl": "Canto inferior esquerdo",
    "pos_tr": "Superior direito",
    "pos_tl": "Superior esquerdo",
    "btn_apply": "Estampar e baixar",
    "msg_need_both": "Selecione um PDF e uma imagem de carimbo (PNG/JPG).",
    "msg_pick_pages": "Selecione as páginas para estampar.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha",
    "download_name": "stamped.pdf​"
  },
  "pdf_to_images": {
    "hint_base": "Exportar como imagens. A nitidez segue a escala: quanto maior, mais nítido, porém mais lento e pesado na memória.",
    "hint_fallback": " Renderização offscreen não suportada; alguns formatos voltam para PNG.",
    "drop_label": "Escolha PDF",
    "drop_desc": "Selecione vários ou arraste em lotes; cada página vira uma imagem em um ZIP; somente local.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "err_no_pdf": "Nenhum arquivo PDF reconhecido.",
    "scale_label": "Escala de renderização (sugere 1,5 – 3)",
    "fmt_label": "Formato de exportação",
    "opt_png": "PNG (sem perdas)",
    "opt_jpeg": "JPG (menor)",
    "opt_webp": "WebP (menor)",
    "quality_label": "Qualidade (0,1 – 1,0)",
    "btn_export": "Exportar (ZIP)",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "progress_export": "Exportando página {current} / {total}…",
    "progress_export_multi": "Arquivo {fileIndex}/{fileTotal}: {fileName} — página {current}/{total}…",
    "msg_zip_done": "ZIP compactado; download iniciado.",
    "err_failed": "Falha na exportação",
    "err_cancelled": "Cancelado",
    "page_range": "Intervalo de páginas (todas / ímpares / pares / 1,3-5)",
    "page_range_invalid": "Intervalo de páginas inválido. Use todas, ímpares, pares ou um intervalo como 1,3-5."
  },
  "pdf_watermark": {
    "intro": "Marcas d'água de texto chinês via subconjunto OSS Source Han Sans. Se o carregamento da fonte falhar, fontes incorporadas são usadas e o chinês pode aparecer como quadrados.",
    "drop_label": "Escolha PDF",
    "drop_desc": "Adicionar marca d'água de texto às páginas escolhidas localmente.",
    "empty_pdf": "Nenhum PDF selecionado ainda.",
    "page_range_hint": "Dica: todas / ímpares / pares / 1,3-5",
    "label_text": "Texto da marca d'água",
    "label_color": "Cor (#RRGGBB)",
    "label_font_size": "Tamanho da fonte",
    "label_opacity": "Opacidade (0–1)",
    "label_angle": "Rotação (graus)",
    "btn_generate": "Gerar e baixar",
    "msg_select_pdf": "Escolha um PDF primeiro.",
    "msg_pick_pages": "Selecione as páginas para marca d'água.",
    "msg_done": "Download concluído.",
    "err_failed": "Falha",
    "download_name": "watermarked.pdf​"
  },
  "json_format": {
    "indent_label": "Recuo",
    "indent_2": "2 espaços",
    "indent_4": "4 espaços",
    "indent_tab": "Tab​",
    "font_size_label": "Tamanho da fonte",
    "valid_ok": "✓ Válido",
    "valid_bad": "✗ Inválido",
    "btn_escape": "Escapar / Desescapar",
    "btn_json_xml": "JSON ↔ XML​",
    "btn_fold": "Recolher / Expandir",
    "hdr_src": "Fonte",
    "hdr_result": "Resultado (editável)",
    "ph_src": "Cole ou insira JSON aqui…",
    "ph_result": "JSON formatado aparece aqui…",
    "flash_unescape_fmt_ok": "Desescapado e formatado com sucesso",
    "flash_unescape_ok_maybe": "Desescapado (pode não ser JSON válido)",
    "flash_unescape_fail": "Falha ao desescapar",
    "flash_escape_ok": "Escapado com sucesso",
    "flash_escape_ok_maybe": "Escapado com sucesso (a fonte pode não ser JSON válido)",
    "flash_escape_fail": "Falha ao escapar",
    "flash_please_data": "Insira os dados primeiro",
    "flash_xml_bad": "Falha na conversão: XML inválido",
    "flash_json_bad": "Falha na conversão: JSON inválido",
    "hint_xml_done": "Convertido para XML",
    "hint_json_done": "Convertido para JSON",
    "flash_need_json_src": "Insira JSON no painel de origem primeiro",
    "flash_need_valid_json": "Formate ou insira JSON válido primeiro",
    "hint_all_fold": "Tudo recolhido",
    "hint_all_unfold": "Tudo expandido",
    "flash_result_empty": "O resultado está vazio",
    "flash_clipboard_ok": "Copiado para a área de transferência",
    "flash_no_download": "Nada para baixar",
    "confirm_plain_download": "O conteúdo não é JSON válido. Baixar mesmo assim?",
    "suffix_json_invalid": "JSON inválido",
    "btn_copy_result": "Copiar resultado"
  },
  "og_preview": {
    "mock_card_title": "Cartão simulado (não é uma visualização real de rastreador)",
    "tag_snippet_title": "Snippet de meta",
    "demo_title": "Tools Ku | Exemplo",
    "demo_desc": "Descrição de exemplo para um cartão de compartilhamento simulado localmente."
  },
  "robots": {
    "chk_allow_site": "Allow: / (permitir rastreamento de todo o site)",
    "lbl_disallow_paths": "Caminhos proibidos (um por linha)",
    "lbl_sitemap_urls": "URLs de sitemap (uma por linha)",
    "hdr_preview": "robots.txt​"
  },
  "sitemap": {
    "lbl_site_root": "URL raiz do site",
    "lbl_paths": "Caminhos ou URLs completas (um por linha)",
    "hdr_preview": "sitemap.xml​"
  },
  "csp": {
    "opt_default": "default-src 'self'​",
    "opt_script": "script-src 'self'​",
    "opt_unsafe_inline": "Permitir scripts inline (mais fraco)",
    "opt_style": "style-src 'self' 'unsafe-inline'​",
    "opt_img": "img-src * data:​",
    "opt_font": "font-src 'self'​",
    "opt_connect": "connect-src 'self'​",
    "opt_frame": "frame-ancestors 'none'​",
    "opt_base": "base-uri 'self'​",
    "opt_form": "form-action 'self'​",
    "opt_upgrade": "upgrade-insecure-requests​",
    "lbl_extra_directives": "Diretivas extras (uma por linha; unidas com ponto e vírgula)",
    "hdr_preview": "Content-Security-Policy​",
    "placeholder_extra": "report-uri https://...​"
  },
  "permissions_policy": {
    "lbl_extra": "Entradas extras (separadas por vírgula)",
    "hdr_preview": "Permissions-Policy​",
    "placeholder_extra": "interest-cohort=()​"
  },
  "env_parse": {
    "chk_mask": "Mascarar valores (somente exibição; texto original inalterado)",
    "lbl_raw": "Conteúdo .env",
    "th_key": "Chave",
    "th_value": "Valor",
    "empty_rows": "Nenhuma linha chave=valor"
  },
  "http_headers": {
    "intro": "Exemplos comuns de cabeçalhos de resposta de segurança; configure uma pilha (Nginx / CDN / framework).",
    "hsts_title": "HSTS​",
    "hsts_desc": "Forçar HTTPS (max-age de um ano)",
    "xcto_title": "X-Content-Type-Options​",
    "xcto_desc": "Desativar sniffing MIME",
    "xfo_title": "X-Frame-Options​",
    "xfo_desc": "Negar incorporação (equivale a DENY)",
    "ref_title": "Referrer-Policy​",
    "ref_desc": "Restringir Referer",
    "pp_title": "Permissions-Policy (exemplo)",
    "pp_desc": "Desativar algumas APIs sensíveis"
  },
  "graphql_format": {
    "lbl_input": "GraphQL​",
    "syntax_error": "Erro de sintaxe"
  },
  "openapi_view": {
    "lbl_input": "OpenAPI (JSON)​",
    "err_invalid_json": "Não foi possível analisar o JSON",
    "root_label": "raiz"
  },
  "properties_json": {
    "lbl_properties": ".properties​",
    "lbl_json": "JSON (valores string → properties)",
    "btn_to_json": "→ JSON​",
    "btn_to_properties": "→ Properties​",
    "footnote_flat": "Objetos aninhados não são achatados; apenas mapas de string planos.",
    "err_failed": "Falha"
  },
  "xml_format": {
    "lbl_xml": "XML​",
    "btn_validate_indent": "Validar e recuar",
    "err_parse_failed": "Falha na análise do XML",
    "err_failed": "Falha"
  },
  "semver": {
    "lbl_a": "Versão A",
    "lbl_b": "Versão B",
    "btn_compare": "Comparar",
    "invalid": "inválido",
    "err_parse_line": "Falha na análise: A={a}  B={b}",
    "cmp_before": "A é anterior a B",
    "cmp_after": "A é posterior a B",
    "cmp_equal": "Igual",
    "line_norm": "Normalizado: A={a}  B={b}",
    "line_cmp": "Comparar: {rel}",
    "line_diff": "semver.diff: {diff}​",
    "diff_same": "diff: (mesma versão)"
  },
  "mermaid": {
    "lbl_source": "Fonte Mermaid",
    "btn_render": "Renderizar",
    "btn_rendering": "Renderizando…",
    "err_render": "Falha na renderização"
  },
  "editorconfig": {
    "preset_web": "Padrão web (2 espaços)",
    "preset_py": "Python (4 espaços)",
    "preset_go": "Go (Tab)​"
  },
  "image_compress": {
    "intro_note": "As imagens são processadas localmente no seu navegador e nunca carregadas. A compressão é executada em paralelo de acordo com a capacidade do dispositivo, controlando o uso de memória. PNG suporta quantização inteligente visualmente sem perdas ou compressão estrita pixel a pixel. O original é mantido sempre que a saída não for menor.",
    "drop_desc": "Processamento em lote é suportado. Os componentes de compressão aquecem após a seleção, e as dimensões da imagem permanecem inalteradas.",
    "fmt_auto": "Igual à fonte",
    "fmt_jpeg": "Unificar como JPG",
    "fmt_webp": "Unificar como WebP",
    "fmt_png": "Unificar como PNG",
    "quality_label": "Qualidade de compressão",
    "quality_high": "Alta qualidade",
    "quality_balanced": "Recomendado (equilibrado)",
    "quality_strong": "Compressão forte",
    "png_mode_label": "Modo de compressão PNG",
    "png_mode_smart": "Compressão inteligente (recomendado)",
    "png_mode_lossless": "Sem perdas estrito",
    "png_smart_hint": "O modo inteligente mescla cores semelhantes e pode reduzir muito o tamanho do PNG quase sem alteração visível, mas não é sem perdas pixel a pixel.",
    "png_lossless_hint": "O modo sem perdas estrito preserva cada pixel e apenas otimiza a codificação PNG, então a economia geralmente é menor que no modo inteligente.",
    "progress": "Concluído {completed} / {total}",
    "worker_hint": "Processando em paralelo com {count} workers em segundo plano",
    "preparing_hint": "Preparando componentes de compressão de imagem…",
    "fallback_hint": "Processamento de imagem em segundo plano indisponível neste navegador; modo de compatibilidade ativo",
    "cancel": "Cancelar compressão",
    "cancelling": "Cancelando…",
    "cancelled": "A compressão foi cancelada. Os resultados concluídos permanecem disponíveis.",
    "completed": "Concluído {count} imagens.",
    "size_change": "Tamanho total: {before} → {after}",
    "saved": "Economizado: {size} ({percent}%)",
    "original_kept": "Originais mantidos: {count}"
  },
  "image_exif": {
    "intro_note": "A visualização/remoção acontece localmente. A remoção reexporta a imagem (mais universal) e pode alterar tamanho/formato.",
    "drop_desc": "Analisar EXIF localmente; os arquivos não são carregados.",
    "empty_hint": "Nenhuma imagem selecionada.",
    "lbl_export_after_strip": "Formato após remoção",
    "opt_jpeg_rec": "JPG (recomendado)",
    "opt_png": "PNG​",
    "opt_webp": "WebP​",
    "btn_strip": "Remover EXIF e baixar",
    "details_raw": "JSON EXIF bruto",
    "msg_no_exif": "Nenhum EXIF detectado (ou o formato não possui).",
    "msg_read_fail": "Falha na leitura",
    "msg_exported_clean": "Versão sem metadados exportada.",
    "msg_strip_fail": "Falha no processamento"
  },
  "image_crop": {
    "intro_note": "Arraste na visualização para selecionar a área de corte, ou insira pixels abaixo. Processamento local.",
    "drop_desc": "Corte de imagem única; exportar PNG / JPG / WebP.",
    "empty_hint": "Nenhuma imagem selecionada.",
    "hint_canvas": "Fonte {w}×{h} px — arraste na imagem para selecionar",
    "lbl_left_x": "Esquerda X",
    "lbl_top_y": "Topo Y",
    "lbl_width": "Largura",
    "lbl_height": "Altura",
    "btn_reset_full": "Restaurar para imagem inteira",
    "lbl_quality_short": "Qualidade",
    "btn_export": "Exportar corte",
    "msg_pick_area": "Selecione uma imagem e uma área de corte.",
    "msg_exported": "Corte exportado.",
    "msg_export_fail": "Falha na exportação"
  },
  "image_resize": {
    "intro_note": "O redimensionamento é executado localmente. contain = caber dentro com preenchimento; cover = preencher e cortar.",
    "drop_desc": "Defina tamanho e formato abaixo, depois clique em Iniciar processamento para exportar em lote."
  },
  "image_scale": {
    "intro_note": "Dimensionamento proporcional por borda longa, largura fixa ou altura fixa; proporção mantida. O modo borda longa mantém originais menores que o alvo; os modos largura/altura podem ampliar. Processamento local.",
    "drop_desc": "Defina o modo de escala e os pixels alvo, depois exporte em lote.",
    "lbl_scale_by": "Escalar por",
    "mode_long_edge": "Borda longa (somente reduzir até o limite)",
    "mode_width": "Largura (largura fixa, altura proporcional)",
    "mode_height": "Altura (altura fixa, largura proporcional)",
    "dim_long_edge": "Limite da borda longa (px)",
    "dim_width": "Largura alvo (px)",
    "dim_height": "Altura alvo (px)",
    "lbl_quality_01": "Qualidade (0,1–1)"
  },
  "image_transform": {
    "intro_note": "Canvas + filtros CSS (escala de cinza/inversão) localmente; exportação JPEG compõe transparência sobre fundo branco.",
    "drop_desc": "Formatos raster comuns; defina transformações e exporte em lote.",
    "lbl_rotate": "Girar",
    "rot_0": "Nenhum",
    "rot_90": "90° horário",
    "rot_180": "180°​",
    "rot_270": "270° horário",
    "lbl_export_fmt": "Formato de exportação",
    "lbl_quality_short": "Qualidade",
    "flip_h": "Espelhar horizontal",
    "flip_v": "Espelhar vertical",
    "filter_gray": "Escala de cinza",
    "filter_invert": "Inverter",
    "msg_need_transform": "Escolha pelo menos uma transformação (girar, espelhar ou filtro).",
    "msg_summary": "Concluído: {ok}/{total} com sucesso.",
    "btn_zip": "Baixar pacote ZIP"
  },
  "image_watermark": {
    "intro_note": "Marcas d'água são renderizadas localmente; nada é carregado.",
    "drop_desc": "Defina o texto da marca d'água e exporte em lote.",
    "lbl_text": "Texto da marca d'água",
    "lbl_position": "Posição",
    "pos_tl": "Superior esquerdo",
    "pos_tr": "Superior direito",
    "pos_bl": "Canto inferior esquerdo",
    "pos_br": "Canto inferior direito",
    "pos_center": "Centro",
    "lbl_color": "Cor",
    "lbl_font_size": "Tamanho da fonte",
    "lbl_opacity": "Opacidade (0–1)",
    "lbl_padding": "Preenchimento (px)",
    "msg_empty_text": "O texto da marca d'água não pode estar vazio."
  },
  "image_collage": {
    "intro_note": "A junção é executada localmente; evite muitas imagens (saída muito alta/larga).",
    "drop_label": "Selecione imagens (ordem = ordem de junção)",
    "drop_desc": "Seleção múltipla suportada; a ordem da lista é a ordem de junção — remova itens para ajustar.",
    "empty_hint": "Nenhuma imagem ainda. A ordem aqui define a ordem de junção.",
    "lbl_direction": "Direção",
    "dir_vertical": "Vertical (tira longa)",
    "dir_horizontal": "Horizontal​",
    "lbl_gap": "Espaçamento (px)",
    "msg_started": "Download iniciado."
  },
  "image_convert": {
    "page_intro": "Formatos raster comuns (incluindo <fmt>PNG, JPEG, WebP, GIF, BMP, ICO, AVIF</fmt>, dependendo da decodificação do navegador) e <svg>SVG</svg> são convertidos localmente. GIF animado exporta apenas o primeiro quadro; áreas transparentes são preenchidas com branco ao exportar JPEG; HEIC e formatos semelhantes geralmente não podem ser decodificados no navegador.",
    "common_uses_title": "Usos comuns",
    "common_use_li1": "Unificar ativos web para WebP ou PNG; fluxos de impressão/arquivo para JPEG.",
    "common_use_li2": "Rasterizar SVG para bitmap para ferramentas downstream que só aceitam raster."
  },
  "image_convert_to_png": {
    "page_intro": "Exporte formatos de imagem comuns para PNG localmente no seu dispositivo — nada sai da sua máquina. Útil quando você precisa de um fluxo de trabalho somente PNG ou o downstream aceita apenas PNG. Imagens animadas exportam o primeiro quadro.",
    "common_notes_title": "Observações",
    "common_notes_li1": "HEIC e alguns formatos de fabricante podem não ser decodificados no navegador — converta para JPG no seu sistema primeiro.",
    "common_notes_li2": "Imagens muito grandes usam mais memória; se a conversão falhar, redimensione ou divida.",
    "drop_subline": "Entrada multiformato; a saída é sempre PNG."
  },
  "image_gif_to_png": {
    "drop_subline": "Focado em GIF; exporta PNG de quadro único."
  },
  "image_jpg_to_png": {
    "page_intro": "<jpeg>JPEG</jpeg> é com perdas; converter para PNG não recupera detalhes descartados, mas evita nova compressão com perdas — útil quando seu pipeline de edição ou trabalhos em lote usam PNG como padrão. Seleção múltipla e arrastar e soltar suportados.",
    "notes_title": "Observações",
    "notes_body": "Fotos JPEG típicas são opacas; após a conversão para PNG geralmente permanecem totalmente opacas, a menos que a fonte já tivesse transparência (incomum).",
    "drop_subline": "Focado em JPG/JPEG; outros rasters permitidos. A saída é PNG."
  },
  "image_jpg_to_webp": {
    "drop_subline": "Focado em JPG/JPEG; outros rasters para WebP também suportados."
  },
  "image_png_to_jpg": {
    "drop_subline": "Focado em PNG; outros rasters para JPG também suportados."
  },
  "image_png_to_webp": {
    "drop_subline": "Focado em PNG; outros rasters para WebP também suportados."
  },
  "image_svg_to_png": {
    "drop_subline": "Selecione arquivos .svg; a saída é PNG."
  },
  "image_webp_to_jpg": {
    "drop_subline": "Focado em WebP; outros rasters para JPG também suportados."
  },
  "image_webp_to_png": {
    "page_intro": "Muitos sites fornecem ativos <webp>WebP</webp> menores; quando sua ferramenta alvo só aceita PNG, converta em lote localmente aqui antes de importar em outro lugar. Seleção de múltiplos arquivos suportada.",
    "tips_title": "Dica",
    "tips_body": "WebP com perdas, sem perdas e transparente são todos rasterizados no navegador antes de salvar como PNG — semelhante à exportação de aplicativos gráficos de desktop na maioria dos casos.",
    "drop_subline": "Focado em WebP; outros rasters OK; a saída é sempre PNG."
  },
  "image_ico": {
    "intro_note": "Crie favicon.ico a partir de uma imagem localmente: escolha um tamanho quadrado e baixe (PNG dentro do ICO para navegadores modernos e Windows).",
    "drop_desc": "Escolha o tamanho e baixe favicon.ico.",
    "pick_label": "Selecionar imagem (512×512 ou maior recomendado)",
    "empty_hint": "Nenhuma imagem selecionada.",
    "lbl_side": "Lado de saída (quadrado)",
    "hint_one_size": "O ICO contém apenas o tamanho selecionado.",
    "err_pick_first": "Selecione uma imagem primeiro.",
    "err_canvas": "Não foi possível criar o contexto do canvas",
    "msg_download_started": "Download de favicon.ico iniciado.",
    "msg_generate_fail": "Falha na geração",
    "page_intro": "Escolha uma imagem grande (512×512 ou maior recomendado), escolha o comprimento da borda de saída e baixe <favicon>favicon.ico</favicon>."
  },
  "image_ocr": {
    "intro_note": "O worker, núcleo e pacotes de idiomas do Tesseract são carregados do CDN (a primeira execução é mais lenta). As imagens permanecem no seu navegador.",
    "lbl_langs": "Idiomas (códigos Tesseract, ex.: eng, chi_sim, eng+chi_sim)",
    "lbl_image": "Imagem",
    "hdr_result": "Texto reconhecido",
    "prog_initializing": "Inicializando…",
    "prog_recognizing": "Reconhecendo {pct}%",
    "empty_result": "(Nenhum texto reconhecido)",
    "err_failed": "Falha no reconhecimento",
    "lang_zh_en": "Chinês simplificado + Inglês",
    "lang_zh": "Chinês simplificado",
    "lang_ja_en": "Japonês + Inglês",
    "lang_zh_tw_en": "Chinês tradicional + Inglês",
    "copy": "Copiar texto",
    "download_txt": "Baixar TXT"
  },
  "bcrypt": {
    "text_label": "Texto",
    "rounds_label": "Rodadas (4-31)",
    "generate": "Gerar Hash",
    "copy": "Copiar",
    "verify_hash_label": "Hash para verificar",
    "verify": "Verificar",
    "match": "Corresponde",
    "not_match": "Não corresponde"
  },
  "sm3": {
    "text_label": "Texto de entrada",
    "compute": "Calcular",
    "copy": "Copiar"
  },
  "sm4": {
    "key_label": "Chave (32 caracteres hex)",
    "text_label": "Texto de entrada",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "process": "Processar",
    "copy": "Copiar",
    "error": "Erro"
  },
  "sm2": {
    "generate_keypair": "Gerar par de chaves",
    "public_key": "Chave pública",
    "private_key": "Chave privada",
    "text_label": "Texto de entrada",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "copy": "Copiar",
    "error": "Erro"
  },
  "password_strength": {
    "password_label": "Senha",
    "level_0": "Fraca",
    "level_1": "Razoável",
    "level_2": "Forte",
    "level_3": "Muito forte",
    "length": "Comprimento",
    "crack_time": "Tempo de quebra",
    "lower": "Minúsculas",
    "upper": "Maiúsculas",
    "digit": "Dígitos",
    "special": "Especiais"
  },
  "wifi_qr": {
    "ssid": "SSID​",
    "password": "Senha",
    "encryption": "Criptografia",
    "none": "Nenhuma",
    "generate": "Gerar QR"
  },
  "json_to_go": {
    "struct_name": "Nome da Struct",
    "json_label": "JSON de entrada",
    "convert": "Converter",
    "copy": "Copiar",
    "parse_error": "Erro de análise do JSON"
  },
  "json_to_java": {
    "class_name": "Nome da Classe",
    "json_label": "JSON de entrada",
    "convert": "Converter",
    "copy": "Copiar",
    "parse_error": "Erro de análise do JSON"
  },
  "json_to_sql": {
    "table_name": "Nome da Tabela",
    "json_label": "Array JSON de entrada",
    "convert": "Converter",
    "copy": "Copiar",
    "parse_error": "Erro de análise do JSON",
    "not_array": "A entrada não é um array JSON"
  },
  "json_merge": {
    "json_a": "JSON A​",
    "json_b": "JSON B​",
    "merge": "Mesclar",
    "copy": "Copiar",
    "parse_error": "Erro de análise do JSON"
  },
  "nginx_format": {
    "input_label": "Configuração Nginx de entrada",
    "format": "Formato",
    "copy": "Copiar"
  },
  "docker_to_compose": {
    "cmd_label": "Comando docker run de entrada",
    "convert": "Converter",
    "copy": "Copiar"
  },
  "regex_cheatsheet": {
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "faker": {
    "generate": "Gerar dados falsos"
  },
  "deobfuscate": {
    "input_label": "Código JS de entrada",
    "format": "Formato",
    "copy": "Copiar"
  },
  "text_pinyin": {
    "input_label": "Chinês de entrada",
    "copy": "Copiar"
  },
  "text_zh_convert": {
    "s2t": "Simp→Trad​",
    "t2s": "Trad→Simp​",
    "input_label": "Texto de entrada",
    "copy": "Copiar"
  },
  "text_mask": {
    "input_label": "Texto de entrada",
    "keep_first": "Manter primeiros N",
    "keep_last": "Manter últimos N",
    "mask_char": "Caractere de máscara",
    "copy": "Copiar"
  },
  "text_emoji": {
    "search_placeholder": "Pesquisar Emoji…",
    "copied": "Copiado"
  },
  "text_synonym": {
    "input_label": "Palavra de entrada",
    "synonyms": "Sinônimos",
    "antonyms": "Antônimos",
    "not_found": "Não encontrado no dicionário"
  },
  "totp": {
    "secret_label": "Segredo (Base32)",
    "remaining": "{sec}s restantes"
  },
  "basic_auth": {
    "username": "Usuário",
    "password": "Senha",
    "copy": "Copiar"
  },
  "cookie_parse": {
    "input_label": "String de Cookie de entrada",
    "key": "Chave",
    "value": "Valor"
  },
  "jwt_generate": {
    "header": "Cabeçalho (JSON)",
    "payload": "Carga útil (JSON)",
    "secret": "Segredo",
    "generate": "Gerar JWT",
    "copy": "Copiar",
    "error": "Falha na geração"
  },
  "svg_placeholder": {
    "width": "Largura",
    "height": "Altura",
    "text": "Texto",
    "fg": "Primeiro plano",
    "bg": "Plano de fundo",
    "copy_svg": "Copiar SVG",
    "copy_data_url": "Copiar Data URL"
  },
  "stopwatch": {
    "start": "Início",
    "pause": "Pausar",
    "resume": "Retomar",
    "lap": "Volta",
    "reset": "Reiniciar",
    "lap_n": "Volta {n}"
  },
  "date_calc": {
    "add_days": "Adicionar/Subtrair dias",
    "date_diff": "Diferença entre datas",
    "date1": "Data",
    "date2": "Data 2",
    "days": "Dias",
    "calc": "Calcular"
  },
  "percentage": {
    "mode_of": "X% de Y",
    "mode_is": "X é que % de Y",
    "mode_change": "Taxa de variação",
    "percent": "Porcentagem",
    "of_value": "Valor",
    "value": "Valor",
    "total": "Total​",
    "from": "De",
    "to": "Para"
  },
  "temperature": {
    "value": "Temperatura"
  },
  "roman_numeral": {
    "to_roman": "→ Romano",
    "from_roman": "→ Arábico",
    "arabic": "Arábico",
    "roman": "Romano"
  },
  "image_greyscale": {
    "process": "Para escala de cinza",
    "download": "Baixar"
  },
  "image_nine_grid": {
    "process": "Corte em grade 9"
  },
  "mac_lookup": {
    "input_label": "Endereço MAC de entrada",
    "not_found": "Fabricante não encontrado"
  },
  "ipv4_range": {
    "start": "IP inicial",
    "end": "IP final"
  },
  "port_reference": {
    "port": "Porta",
    "proto": "Protocolo",
    "name": "Nome"
  },
  "math_eval": {
    "placeholder": "Insira uma expressão, ex.: 2^10 + sqrt(16)",
    "calc": "Calcular",
    "preview": "Visualizar",
    "supported": "Operações suportadas",
    "history": "Histórico",
    "clear": "Limpar",
    "copy_result": "Copiar resultado",
    "copied": "Resultado copiado.",
    "radian_note": "Funções trigonométricas usam radianos, por exemplo sin(pi/2) = 1."
  },
  "eta_calc": {
    "total": "Total​",
    "done": "Concluído",
    "elapsed": "Decorrido",
    "elapsed_unit": "segundos",
    "speed": "Velocidade",
    "speed_unit": "/s​",
    "remaining": "Tempo estimado",
    "total_time": "Total est."
  },
  "mac_gen": {
    "count": "Quantidade",
    "separator": "Separador",
    "prefix": "Prefixo (opcional)",
    "uppercase": "Maiúsculas",
    "generate": "Gerar",
    "results": "Resultados",
    "copy_all": "Copiar tudo"
  },
  "device_info": {
    "note": "Detectar informações do ambiente atual do navegador.",
    "property": "Propriedade",
    "value": "Valor"
  },
  "bip39": {
    "strength": "Bits de entropia",
    "generate": "Gerar",
    "loading": "Carregando…",
    "mnemonic": "Mnemônico",
    "copy": "Copiar",
    "error": "Falha na geração"
  },
  "rsa_keygen": {
    "key_size": "Tamanho da chave",
    "generate": "Gerar par de chaves",
    "generating": "Gerando…",
    "public_key": "Chave pública (PEM)",
    "private_key": "Chave privada (PEM)",
    "copy": "Copiar"
  },
  "xml_json": {
    "input": "Entrada",
    "output": "Saída",
    "convert": "Converter",
    "copy": "Copiar"
  },
  "json_minify": {
    "input": "JSON de entrada",
    "minify": "Minificar",
    "output": "Saída",
    "copy": "Copiar",
    "original": "Original​",
    "minified_size": "Minificado",
    "saved": "Salvo"
  },
  "numeronym": {
    "encode": "Codificar",
    "decode": "Decodificar",
    "examples": "Exemplos comuns"
  },
  "ascii_art": {
    "text": "Texto",
    "char_set": "Caractere de preenchimento",
    "result": "Resultado",
    "copy": "Copiar",
    "hint": "Suporta letras inglesas, dígitos e algumas pontuações, até 30 caracteres."
  },
  "idcard": {
    "input_label": "Número do documento de identidade",
    "valid": "Válido",
    "invalid": "Inválido",
    "province": "Província",
    "birthday": "Data de nascimento",
    "gender": "Gênero",
    "male": "Masculino",
    "female": "Feminino",
    "unknown": "Desconhecido"
  },
  "chinese_colors": {
    "copied": "Copiado"
  },
  "relationship": {
    "input_label": "Cadeia de parentesco (ex.: pai,mãe)",
    "placeholder": "pai,mãe",
    "unknown": "Desconhecido"
  },
  "curl_to_code": {
    "input_label": "Comando cURL",
    "lang_label": "Linguagem alvo",
    "convert": "Converter",
    "output": "Código de saída",
    "copy": "Copiar",
    "copied": "Copiado",
    "err_parse": "Não foi possível analisar o comando cURL"
  },
  "box_shadow": {
    "layer": "Camada",
    "remove": "Remover",
    "offsetX": "Deslocamento X",
    "offsetY": "Deslocamento Y",
    "blur": "Desfoque",
    "spread": "Expansão",
    "color": "Cor",
    "add_layer": "Adicionar camada",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "border_radius": {
    "top_left": "Superior esquerdo",
    "top_right": "Superior direito",
    "bottom_right": "Inferior direito",
    "bottom_left": "Inferior esquerdo",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "flexbox": {
    "direction": "flex-direction​",
    "justify_content": "justify-content​",
    "align_items": "align-items​",
    "flex_wrap": "flex-wrap​",
    "gap": "gap​",
    "add_child": "Adicionar filho",
    "remove_child": "Remover filho",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "gradient": {
    "type": "Tipo",
    "angle": "Ângulo",
    "color_stops": "Paradas de cor",
    "remove": "Remover",
    "add_stop": "Adicionar parada",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "css_animation": {
    "preset": "Predefinição",
    "duration": "Duração(s)",
    "timing": "Temporização",
    "iteration": "Iteração",
    "keyframes": "Keyframes​",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "color_blindness": {
    "input_color": "Cor de entrada",
    "original": "Original​",
    "palette": "Visualização da paleta"
  },
  "token_count": {
    "input_label": "Texto de entrada",
    "placeholder": "Insira texto para estimar a contagem de tokens…",
    "chars": "caracteres",
    "words": "palavras",
    "lines": "linhas",
    "estimate": "Estimativa de tokens",
    "tokens": "tokens​",
    "of_context": "do contexto",
    "disclaimer": "※ Estimativa aproximada. A contagem real depende do tokenizador específico.",
    "model": "Modelo de referência",
    "output_tokens": "Tokens de saída esperados",
    "input_estimate": "Tokens de entrada estimados",
    "context_usage": "Uso do contexto",
    "estimated_cost": "Custo estimado (USD)",
    "disclaimer_extended": "Esta é uma aproximação baseada em caracteres, não um resultado exato de tokenizador oficial. Preços e limites de contexto podem mudar; verifique os preços mais recentes do provedor antes de enviar uma solicitação."
  },
  "screenshot_beautify": {
    "upload": "Enviar captura de tela",
    "bg_color": "Plano de fundo",
    "padding": "Preenchimento",
    "border_radius": "Raio da borda",
    "shadow_blur": "Desfoque da sombra",
    "shadow_color": "Cor da sombra",
    "preview": "Visualizar",
    "no_image": "Envie uma captura de tela primeiro",
    "export_png": "Exportar PNG"
  },
  "pangu_spacing": {
    "input_label": "Texto de entrada",
    "placeholder": "Hello世界，这是123test文本​",
    "output": "Resultado",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "aspect_ratio": {
    "width": "Largura",
    "height": "Altura",
    "calc_ratio": "Calcular proporção",
    "common_ratios": "Proporções comuns",
    "reverse_calc": "Cálculo reverso",
    "ratio_w": "Proporção L",
    "ratio_h": "Proporção A",
    "known_side": "Lado conhecido",
    "known_value": "Valor conhecido",
    "result": "Resultado"
  },
  "loan_calc": {
    "principal": "Valor principal",
    "annual_rate": "Taxa anual (%)",
    "term": "Prazo do empréstimo (anos)",
    "term_half_year": "6 meses ({months} parcelas)",
    "term_years": "{years, plural, one {1 ano} other {# anos}} ({months} parcelas)",
    "method": "Método",
    "equal_installment": "Parcelas iguais",
    "equal_principal": "Principal igual",
    "monthly_payment": "Parcela mensal",
    "total_interest": "Juros totais",
    "total_payment": "Pagamento total",
    "schedule": "Cronograma de pagamento",
    "month": "Mês",
    "payment": "Pagamento",
    "principal_part": "Principal​",
    "interest_part": "Juros",
    "remaining": "Restante"
  },
  "bmi": {
    "height": "Altura",
    "weight": "Peso",
    "underweight": "Abaixo do peso",
    "normal": "Normal​",
    "overweight": "Sobrepeso",
    "obese": "Obeso",
    "range_chart": "Tabela de faixas de IMC"
  },
  "work_hours": {
    "summary_title": "Resumo de horas",
    "auto_calculate": "Recalcula automaticamente quando qualquer turno é alterado",
    "shifts_unit": "turnos",
    "total_work": "Total de trabalho",
    "regular_hours": "Horas regulares",
    "overtime": "Horas extras",
    "estimated_pay": "Pagamento estimado",
    "enter_hourly_rate": "Insira o valor por hora para calcular",
    "total_span": "Período no local",
    "total_break": "Total de intervalos",
    "rules_title": "Regras de cálculo e pagamento",
    "rules_hint": "Horas extras são calculadas por turno acima do padrão diário. Os valores de pagamento são apenas estimativas.",
    "standard_hours_day": "Horas padrão / dia",
    "rounding": "Arredondamento de tempo",
    "no_rounding": "Sem arredondamento (minutos exatos)",
    "nearest_minutes": "Mais próximo de {minutes} minutos",
    "hourly_rate": "Valor por hora",
    "overtime_multiplier": "Multiplicador de horas extras",
    "currency": "Moeda",
    "timesheet_title": "Detalhes dos turnos",
    "overnight_hint": "Um horário de término anterior ao início é tratado como turno noturno.",
    "fill_week": "Preencher esta semana de trabalho",
    "add_shift": "Adicionar turno",
    "quick_shift": "Adição rápida",
    "shift": "Turno",
    "date": "Data",
    "start_time": "Hora de início",
    "end_time": "Hora de término",
    "break_minutes": "Intervalo (minutos)",
    "note": "Nota",
    "note_placeholder": "Projeto, local, etc. (opcional)",
    "duplicate": "Duplicar",
    "remove": "Remover",
    "overnight": "Noturno",
    "break_too_long": "O intervalo é maior que a duração do turno. O tempo de trabalho deste turno é contado como zero.",
    "work_time": "Tempo de trabalho",
    "break_short": "Intervalo",
    "hour_short": "h​",
    "minute_short": "m​",
    "work_minutes": "Minutos de trabalho",
    "regular_minutes": "Minutos regulares",
    "overtime_minutes": "Minutos extras",
    "total_pay": "Pagamento total",
    "report_title": "Relatório de folha de ponto",
    "report_hint": "Copie um relatório legível ou exporte CSV para edição posterior.",
    "copy_report": "Copiar relatório",
    "export_csv": "Exportar CSV",
    "reset": "Redefinir turnos",
    "copied": "Relatório de folha de ponto copiado.",
    "exported": "CSV exportado.",
    "week_filled": "Turnos de segunda a sexta foram adicionados para esta semana."
  },
  "template_filler": {
    "template_label": "Texto do modelo",
    "template_placeholder": "Insira o modelo, ex.: Olá, '{' '{' 'nome' '}' '}'!",
    "variables": "Variáveis",
    "fill_data": "Preencher dados",
    "add_row": "Adicionar linha",
    "row": "Linha",
    "remove_row": "Remover",
    "result": "Resultado",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "url_defang": {
    "defang": "Desativar",
    "refang": "Reativar",
    "input_label": "URL de entrada",
    "output": "Saída",
    "copy": "Copiar",
    "copied": "Copiado",
    "rules": "Regras",
    "rule1": ":// → [://]​",
    "rule2": ". → [.]​",
    "rule3": "Reativar é a operação inversa"
  },
  "protobuf_decode": {
    "decode": "Decodificar",
    "invalid_hex": "Entrada hex inválida",
    "result": "Resultado",
    "field": "Campo",
    "wire_type": "Tipo de wire",
    "value": "Valor",
    "unknown_wire": "Tipo de wire desconhecido"
  },
  "pdf_signature": {
    "upload": "Enviar PDF",
    "checking": "Verificando…",
    "signed": "Assinado",
    "not_signed": "Não assinado",
    "file": "Arquivo",
    "pages": "Páginas",
    "parse_error": "Erro de análise do PDF"
  },
  "dev_string_obfuscator": {
    "input_label": "Código de entrada",
    "input_placeholder": "Cole código JavaScript com literais de string…",
    "method_label": "Método de ofuscação",
    "method_base64": "Base64​",
    "method_hex": "Hex​",
    "method_unicode": "Unicode​",
    "method_charcode": "CharCode​",
    "method_reverse": "Inverter",
    "obfuscate": "Ofuscar",
    "output": "Resultado ofuscado",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "dev_git_cheatsheet": {
    "category_basic": "Operações básicas",
    "category_branch": "Gerenciamento de branches",
    "category_remote": "Repositório remoto",
    "category_undo": "Desfazer e reverter",
    "category_stash": "Stash​",
    "category_log": "Log e histórico",
    "copy": "Copiar",
    "copied": "Copiado",
    "click_copy": "Clique para copiar"
  },
  "html_wysiwyg": {
    "bold": "Negrito",
    "italic": "Itálico",
    "underline": "Sublinhado",
    "strikethrough": "Tachado",
    "ordered_list": "Lista ordenada",
    "unordered_list": "Lista não ordenada",
    "mode_edit": "Visual​",
    "source_view": "Exibir código-fonte",
    "preview": "Visualizar",
    "copy_html": "Copiar HTML",
    "copied": "Copiado",
    "prompt_url": "URL do link",
    "prompt_img_url": "URL da imagem"
  },
  "dev_css_unit_converter": {
    "context_title": "Referência de px",
    "input_title": "Entrada",
    "value_label": "Valor",
    "from_unit": "Unidade de origem",
    "results_title": "Conversões",
    "col_unit": "Unidade",
    "col_value": "Valor",
    "base_size_label": "Tamanho base da fonte (px)",
    "viewport_width": "Largura da viewport (px)",
    "viewport_height": "Altura da viewport (px)",
    "result": "Resultado da conversão",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "web_meta_tag_generator": {
    "general": "Meta básico",
    "title_label": "Título",
    "description_label": "Descrição",
    "viewport_label": "Viewport​",
    "charset_label": "Charset​",
    "author_label": "Autor",
    "keywords_label": "Palavras-chave",
    "robots_label": "Robots​",
    "og_title": "Título OG",
    "og_description": "Descrição OG",
    "og_image": "URL da imagem OG",
    "og_url": "URL OG",
    "twitter_card": "Tipo de Twitter Card",
    "generate": "Gerar",
    "output": "Código da Meta Tag",
    "preview": "Visualizar",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "encode_unicode": {
    "input_label": "Texto de entrada",
    "output_label": "Saída",
    "encode": "Codificar",
    "decode": "Decodificar",
    "format_label": "Formato",
    "format_backslash_u": "\\uXXXX​",
    "format_html_entity": "&#xXXXX;​",
    "copy": "Copiar",
    "copied": "Copiado",
    "decode_failed": "Falha na decodificação"
  },
  "encode_quoted_printable": {
    "input_label": "Entrada",
    "output_label": "Saída",
    "line_len": "Comprimento máximo de linha",
    "encode": "Codificar",
    "decode": "Decodificar",
    "copy": "Copiar",
    "copied": "Copiado",
    "encode_failed": "Falha na codificação",
    "decode_failed": "Falha na decodificação",
    "err_decode": "Falha na decodificação Quoted-Printable"
  },
  "encode_uuencode": {
    "input_label": "Entrada",
    "output_label": "Saída",
    "encode": "UUEncode​",
    "decode": "UUDecode​",
    "filename_label": "Nome do arquivo",
    "mode": "Modo do arquivo (ex.: 644)",
    "copy": "Copiar",
    "copied": "Copiado",
    "encode_failed": "Falha na codificação",
    "decode_failed": "Falha na decodificação",
    "err_decode": "Falha no UUDecode"
  },
  "encode_base85": {
    "input_label": "Entrada",
    "input_mode": "Modo de entrada",
    "mode_text": "Texto (UTF-8)",
    "mode_hex": "Bytes hex",
    "delimiters": "envolver com <~ ~>",
    "output_label": "Saída",
    "encode": "Codificar",
    "decode": "Decodificar",
    "copy": "Copiar",
    "copied": "Copiado",
    "invalid_hex": "Entrada hex inválida",
    "encode_failed": "Falha na codificação",
    "decode_failed": "Falha na decodificação",
    "err_decode": "Falha na decodificação Base85"
  },
  "camera_recorder": {
    "select_device": "Dispositivo de câmera",
    "default": "Padrão",
    "start_camera": "Iniciar câmera",
    "stop_camera": "Parar câmera",
    "take_photo": "Tirar foto",
    "start_record": "Iniciar gravação",
    "stop_record": "Parar gravação",
    "pause": "Pausar",
    "resume": "Retomar",
    "recording": "Gravando…",
    "paused": "Pausado",
    "photo_result": "Foto",
    "video_result": "Vídeo",
    "export_photo": "Exportar PNG",
    "export_video": "Exportar WebM",
    "no_camera": "Não é possível acessar a câmera"
  },
  "text_regex_memo": {
    "category_chars": "Classes de caracteres",
    "category_quantifiers": "Quantificadores",
    "category_anchors": "Âncoras",
    "category_groups": "Grupos e referências",
    "category_lookaround": "Lookaround (lookahead / lookbehind)​",
    "category_flags": "Sinalizadores",
    "copy": "Copiar",
    "click_copy": "Clique para copiar",
    "copied": "Copiado"
  },
  "dev_git_diff_viewer": {
    "input_label": "Cole a saída do diff",
    "input_placeholder": "Cole o texto de saída do git diff…",
    "parse": "Analisar",
    "files_changed": "Arquivos alterados",
    "additions": "Adições",
    "deletions": "Remoções",
    "changes": "Alterações",
    "err_parse": "Não foi possível analisar a saída do diff"
  },
  "web_url_query_editor": {
    "url_label": "URL de entrada",
    "url_placeholder": "https://example.com?key=value&foo=bar​",
    "parse": "Analisar",
    "url_encode": "Codificar URL ao construir",
    "params": "Parâmetros de consulta",
    "result": "URL construída",
    "key": "Chave",
    "value": "Valor",
    "add_param": "Adicionar parâmetro",
    "remove_param": "Remover",
    "preview": "Visualizar URL",
    "copy": "Copiar",
    "copied": "Copiado",
    "err_invalid_url": "URL inválido"
  },
  "tax_calc": {
    "income_label": "Salário mensal (CNY)",
    "social_label": "Seguro social (mensal, CNY)",
    "special_label": "Deduções especiais (mensal, CNY)",
    "calc": "Calcular",
    "taxable": "Renda tributável mensal: ",
    "annual_taxable": "Renda tributável anual: ",
    "rate": "Alíquota do imposto: ",
    "monthly_tax": "Imposto mensal: ",
    "annual_tax": "Imposto anual: ",
    "after_tax": "Renda após impostos",
    "assumption": "Estima a retenção cumulativa de residentes da China continental e assume a mesma renda e deduções mensais ao longo do ano.",
    "schedule": "Retenção cumulativa mensal",
    "month": "Mês",
    "monthly_taxable": "Tributável mensal",
    "cumulative_taxable": "Tributável cumulativo",
    "cumulative_tax": "Imposto cumulativo",
    "disclaimer": "Apenas estimativa; exclui casos especiais como bônus anuais, renda de serviços e diferenças de retenção anteriores."
  },
  "coord_convert": {
    "lng_label": "Longitude (lng)​",
    "lat_label": "Latitude (lat)​",
    "from_label": "De",
    "to_label": "Para",
    "convert": "Converter",
    "result_label": "Resultado",
    "copy": "Copiar"
  },
  "sensitive_words": {
    "placeholder": "Cole documentos oficiais, comunicados de imprensa, avisos, etc.",
    "check": "Verificação estrita",
    "found_prefix": "Termos sensíveis encontrados ({count} tipos): ",
    "col_word": "Termo",
    "col_count": "Contagem",
    "no_found": "Nenhuma ocorrência no dicionário, mas a revisão manual ainda é necessária antes da publicação.",
    "bank_count": "Dicionário governamental estrito: {count} termos",
    "mode_hint": "Detecção de evasão ativada: espaços em branco e caracteres de largura zero removidos; largura total normalizada.",
    "disclaimer": "Esta ferramenta não substitui a revisão de confidencialidade ou aprovação humana final. Nenhuma ocorrência não significa que é publicável.",
    "custom_dict_title": "Lista de palavras personalizada",
    "custom_dict_hint": "Texto UTF-8, um termo por linha; linhas começando com # são comentários. Armazenado localmente no seu navegador.",
    "upload_dict": "Enviar dicionário (.txt)",
    "upload_txt": "Enviar texto para verificação (.txt)",
    "clear_custom": "Limpar lista personalizada",
    "custom_bank_count": "Personalizado {count}",
    "active_bank_count": "Ativo {count}",
    "source_file": "Arquivo fonte",
    "highlight_title": "Visualização destacada",
    "col_position": "Posições",
    "dict_imported": "Importados {count} termos personalizados",
    "dict_cleared": "Lista personalizada limpa",
    "err_dict_empty": "O arquivo de dicionário está vazio ou inválido",
    "err_dict_parse": "Falha ao ler o arquivo de dicionário",
    "err_txt_read": "Falha ao ler o arquivo de texto"
  },
  "signature": {
    "color_label": "Cor do traço",
    "width_label": "Largura do traço",
    "export": "Exportar PNG",
    "clear": "Limpar"
  },
  "subtitle_convert": {
    "from_fmt": "Formato de origem",
    "to_fmt": "Formato de destino",
    "input_placeholder": "Cole o conteúdo da legenda…",
    "convert": "Converter",
    "output": "Saída",
    "copy": "Copiar"
  },
  "htpasswd": {
    "username_label": "Usuário",
    "password_label": "Senha",
    "algorithm_label": "Algoritmo",
    "add": "Adicionar",
    "copy": "Copiar tudo"
  },
  "gcd_lcm": {
    "input_label": "Números (separados por vírgula)",
    "input_placeholder": "ex.: 12, 18, 24",
    "calc": "Calcular"
  },
  "periodic_table": {
    "atomic_number": "Número atômico: ",
    "atomic_mass": "Massa atômica: ",
    "category": "Categoria: "
  },
  "danmaku": {
    "text_label": "Texto do danmaku",
    "color_label": "Cor",
    "speed_label": "Velocidade",
    "send": "Enviar"
  },
  "teleprompter": {
    "placeholder": "Insira o conteúdo do roteiro…",
    "speed_label": "Velocidade",
    "font_size_label": "Tamanho da fonte",
    "mirror_label": "Espelhar",
    "play": "Reproduzir",
    "stop": "Parar",
    "pause": "Pausar"
  },
  "batch_rename": {
    "add_files": "Adicionar arquivos",
    "prefix_label": "Prefixo",
    "start_num_label": "Número inicial",
    "pad_len_label": "Preenchimento com zeros",
    "ext_label": "Extensão",
    "col_original": "Original​",
    "col_renamed": "Renomeado",
    "copy": "Copiar lista"
  },
  "bankcard_bin": {
    "lookup_title": "Análise de BIN / IIN do cartão",
    "lookup_hint": "Detecta a bandeira, prioriza a base local com {count} emissores chineses principais e valida números completos.",
    "mode_single": "Consulta individual",
    "mode_batch": "Consulta em lote",
    "card_label": "BIN, IIN ou número completo do cartão",
    "placeholder": "Insira 6–19 dígitos; espaços são aceitos",
    "clear": "Limpar",
    "examples": "Exemplos",
    "privacy_note": "Toda detecção e validação é executada neste navegador. Números de cartão não são carregados, e os resultados mostram apenas números mascarados.",
    "empty_title": "Insira os primeiros 6 dígitos para começar",
    "empty_hint": "Insira um número completo de cartão para também executar a verificação Luhn.",
    "masked_number": "Número mascarado",
    "bank": "Emissor",
    "network": "Bandeira do cartão",
    "card_type": "Tipo de cartão",
    "bin6": "BIN de 6 dígitos",
    "iin8": "IIN de 8 dígitos",
    "checksum": "Verificação Luhn",
    "need_8_digits": "Exibido após 8 dígitos",
    "issuer_matched": "Emissor correspondido",
    "issuer_not_matched": "Emissor não correspondido",
    "issuer_unknown": "Emissor não disponível",
    "digit_unit": "dígitos",
    "digits": "Comprimento",
    "copy_result": "Copiar resultado",
    "copied": "Resultados copiados.",
    "exported": "CSV exportado.",
    "checksum_not_run": "Insira pelo menos 13 dígitos para verificação do número completo",
    "checksum_valid": "Aprovado",
    "checksum_invalid": "Falha",
    "checksum_warning": "Este número falhou na verificação Luhn e pode conter um erro de digitação. Luhn verifica apenas a estrutura do número; não prova que um cartão existe ou está ativo.",
    "data_disclaimer": "Emissor, país e tipo de cartão usam dados BIN públicos offline e regras locais. Podem mudar com novos intervalos ou ajustes de produtos. Para pagamentos, risco ou outros usos críticos, confirme com dados em tempo real do emissor ou da rede de pagamento. A base global adicional é baseada em iannuttall/binlist-data (CC BY 4.0), um conjunto arquivado que não é um registro IIN oficial.",
    "type_credit": "Crédito",
    "type_debit": "Débito",
    "type_prepaid": "Pré-pago",
    "type_unknown": "Desconhecido",
    "network_unionpay": "UnionPay​",
    "network_visa": "Visa​",
    "network_mastercard": "Mastercard​",
    "network_amex": "American Express​",
    "network_jcb": "JCB​",
    "network_discover": "Discover​",
    "network_diners": "Diners Club​",
    "network_maestro": "Maestro​",
    "network_unknown": "Desconhecido / outro",
    "batch_label": "Números de cartão ou BINs",
    "batch_placeholder": "Um por linha, ou separe com vírgulas / ponto e vírgula\n622202\n621700\n4111 1111 1111 1111",
    "batch_hint": "Até 100 entradas por vez. Duplicatas são removidas, e exportações nunca contêm números completos sem máscara.",
    "run_batch": "Executar consulta em lote",
    "batch_empty": "Insira pelo menos um valor primeiro.",
    "batch_complete": "Processadas {count} entradas.",
    "batch_results": "Resultados em lote",
    "batch_summary": "{total} no total · {matched} emissores encontrados · {valid} passaram no Luhn",
    "copy_table": "Copiar tabela",
    "export_csv": "Exportar CSV",
    "feature_local": "Processamento local no navegador",
    "feature_local_desc": "Carrega apenas o fragmento BIN necessário de 6 / 8 dígitos e não chama APIs BIN externas em tempo real.",
    "feature_validation": "Detecção e validação",
    "feature_validation_desc": "A bandeira é detectada a partir de faixas numéricas; números completos são verificados separadamente com Luhn.",
    "feature_iin": "Suporte a 6 e 8 dígitos",
    "feature_iin_desc": "Mostra tanto o BIN tradicional de 6 dígitos quanto o IIN moderno de 8 dígitos para comparação.",
    "global_hint": "A base global adicional cobre as regiões dos idiomas atuais, América Latina, Brasil, Alemanha, Rússia e França. Apenas os primeiros 6 / 8 dígitos BIN são usados.",
    "global_loading": "Carregando a base global adicional de BIN…",
    "country": "País / região",
    "country_unknown": "Não disponível",
    "card_category": "Nível / produto",
    "category_unknown": "Não disponível",
    "data_source": "Fonte dos dados",
    "source_china_local": "Base local da China",
    "source_binlist_data": "Base pública binlist-data",
    "source_rules": "Regras de intervalo",
    "source_unknown": "Sem correspondência",
    "batch_loading": "Carregando dados BIN e processando {count} entradas…",
    "type_charge": "Cartão charge",
    "network_elo": "Elo​",
    "network_laser": "Laser​",
    "network_solo": "Solo​",
    "network_atm": "ATM​",
    "network_other": "Outro",
    "input_kind": "Tipo de entrada",
    "input_kind_bin6": "BIN de 6 dígitos",
    "input_kind_iin8": "IIN / prefixo de 8 dígitos",
    "input_kind_card": "Número completo do cartão",
    "input_kind_partial": "Menos de 6 dígitos",
    "confidence": "Confiança",
    "confidence_high": "Alta: correspondido por prefixo de 8+ dígitos",
    "confidence_medium": "Média: correspondido por BIN de 6 dígitos",
    "confidence_low": "Baixa: somente por regra ou não correspondido",
    "result_note": "Nota",
    "note_exact_or_iin": "Correspondido por prefixo de 8+ dígitos para identificação mais precisa.",
    "note_bin6_match": "Correspondido por BIN de 6 dígitos; o IIN de 8 dígitos mais recente pode ser mais específico.",
    "note_network_only": "Apenas a bandeira do cartão foi detectada; emissor não encontrado.",
    "note_not_found": "Emissor e bandeira não encontrados. Verifique a entrada ou use dados oficiais para decisões.",
    "filter_all": "Todos",
    "filter_matched": "Emissor correspondido",
    "filter_unmatched": "Não correspondido",
    "filter_luhn_failed": "Falha no Luhn"
  },
  "gif_frames": {
    "hint": "Envie um arquivo GIF para extrair os quadros",
    "frame_count": "Quadros: "
  },
  "code_screenshot": {
    "lang_label": "Linguagem",
    "bg_label": "Plano de fundo",
    "export": "Exportar PNG"
  },
  "grid_paper": {
    "type_label": "Tipo de grade",
    "type_tian": "Tian​",
    "type_mi": "Mi​",
    "type_fang": "Quadrado",
    "type_dot": "Ponto",
    "cell_size_label": "Tamanho da célula (px)",
    "rows_label": "Linhas",
    "cols_label": "Colunas",
    "generate": "Gerar",
    "export": "Exportar PNG"
  },
  "exchange_rate": {
    "amount_label": "Valor",
    "from_label": "De",
    "to_label": "Para",
    "convert": "Converter",
    "disclaimer": "As taxas de câmbio flutuam e são apenas para referência. Use a cotação do seu banco ou provedor de pagamento para liquidação.",
    "swap": "Inverter moedas",
    "refresh": "Atualizar taxas",
    "refreshing": "Atualizando…",
    "live_source": "Taxas de referência diárias ExchangeRate-API",
    "offline_source": "Taxas offline de contingência",
    "live_failed": "Não foi possível carregar as taxas em tempo real. Uma contingência offline desatualizada está sendo usada."
  },
  "hanzi_decompose": {
    "placeholder": "Insira caracteres chineses…",
    "decompose": "Decompor",
    "unknown": "N/A​",
    "done": "Decompostos {count} caracteres Hanzi.",
    "no_hanzi": "Nenhum caractere Hanzi encontrado.",
    "copied": "Resultados copiados.",
    "exported": "CSV exportado.",
    "example": "Usar exemplo",
    "results_title": "Resultados da decomposição",
    "copy": "Copiar resultados",
    "export_csv": "Exportar CSV",
    "col_char": "Caractere",
    "col_parts": "Partes",
    "col_structure": "Estrutura",
    "structure_unknown": "Desconhecido",
    "structure_single": "Componente único",
    "structure_pair": "Estrutura de duas partes",
    "structure_multi": "Estrutura de múltiplas partes"
  },
  "audio_editor": {
    "start_label": "Início (seg)",
    "end_label": "Fim (seg)",
    "duration": "Duração: ",
    "clip": "Recortar e exportar WAV"
  },
  "csr_generate": {
    "key_size": "Tamanho da chave",
    "generate": "Gerar",
    "private_key": "Chave privada"
  },
  "torrent_analyze": {
    "parse_error": "Falha na análise. Confirme se é um arquivo .torrent válido.",
    "name_label": "Nome: ",
    "total_size": "Tamanho total: ",
    "piece_length": "Comprimento da peça: ",
    "info_hash": "Info Hash: ​",
    "files_label": "Arquivos: ",
    "trackers": "Trackers: ​",
    "magnet_link": "Magnet Link: ​",
    "copy": "Copiar"
  },
  "pdf_encrypt": {
    "drop_label": "Escolha PDF",
    "drop_desc": "Adicionar uma senha de abertura a um PDF não criptografado",
    "empty_pdf": "Nenhum PDF selecionado",
    "password_label": "Senha de abertura",
    "confirm_label": "Confirmar senha",
    "btn_encrypt": "Criptografar e baixar",
    "msg_select_first": "Selecione um arquivo PDF primeiro.",
    "msg_password_required": "Insira uma senha.",
    "msg_password_mismatch": "As senhas não coincidem.",
    "msg_done": "PDF criptografado gerado; download iniciado.",
    "err_encrypted_or_invalid": "Não é possível ler este PDF (criptografado, corrompido ou não suportado). Se tiver senha, use Descriptografar PDF primeiro.",
    "err_failed": "Falha na criptografia. Tente Chrome ou Edge."
  },
  "heic_to_jpg": {
    "hint": "HEIC/HEIF é decodificado para JPG no seu navegador; os arquivos não são carregados.",
    "drop_label": "Imagens HEIC / HEIF",
    "drop_desc": ".heic, .heif — múltiplos arquivos OK",
    "empty": "Nenhum arquivo HEIC selecionado",
    "quality_label": "Qualidade JPG (0,5–1)",
    "btn_convert": "Converter para JPG",
    "msg_select": "Selecione imagens HEIC/HEIF primeiro.",
    "msg_done": "Concluído. Download iniciado.",
    "err_convert": "Não foi possível decodificar este arquivo HEIC.",
    "err_failed": "Falha na conversão. Tente Chrome ou Edge."
  },
  "word_count": {
    "hint": "Digite ou cole texto para contar localmente — nada é enviado a um servidor."
  },
  "age_calc": {
    "birth_label": "Data de nascimento",
    "ref_label": "A partir da data (opcional)",
    "ref_hint": "Deixe vazio para usar hoje",
    "years": "Anos",
    "months": "Meses",
    "days": "Dias",
    "total_days": "Total de dias",
    "err_invalid_birth": "Data de nascimento inválida",
    "err_ref_before_birth": "A data de referência não pode ser anterior à data de nascimento"
  },
  "random_number": {
    "min": "Mínimo",
    "max": "Máximo",
    "count": "Quantidade (1–500)",
    "integer": "Somente inteiros",
    "generate": "Gerar",
    "copy": "Copiar tudo",
    "output": "Resultados",
    "err_range": "Para inteiros, o mínimo não pode ser maior que o máximo",
    "copied": "Copiado para a área de transferência."
  },
  "caesar": {
    "input_text": "Texto de entrada",
    "shift": "Deslocamento (1-25)",
    "mode": "Modo",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "run": "Executar",
    "result": "Resultado"
  },
  "des": {
    "input_text": "Texto / hex de entrada",
    "key": "Chave (≥8 bytes)",
    "mode": "Modo",
    "action": "Ação",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "run": "Executar",
    "result": "Resultado",
    "key_too_short": "A chave deve ter pelo menos 8 bytes",
    "invalid_hex": "Comprimento hex não é múltiplo de 16"
  },
  "ripemd": {
    "input_text": "Texto de entrada",
    "compute": "Calcular",
    "result": "Hash RIPEMD-160"
  },
  "bcc_lrc": {
    "input_hex": "Dados hex (separados por espaço)",
    "mode": "Modo de verificação",
    "compute": "Calcular",
    "result": "Resultado",
    "invalid_hex": "Byte hex inválido",
    "no_data": "Insira os dados"
  },
  "iso_garble": {
    "input": "Texto com mojibake",
    "fix": "Corrigir",
    "result": "Texto corrigido",
    "not_iso": "Contém caracteres não ISO-8859-1",
    "decode_failed": "Falha na decodificação UTF-8"
  },
  "emoji_encode": {
    "input": "Texto de entrada",
    "mode": "Modo de codificação",
    "core_values": "Valores Principais",
    "action": "Ação",
    "encode": "Codificar",
    "decode": "Decodificar",
    "run": "Executar",
    "result": "Resultado",
    "decode_failed": "Falha na decodificação"
  },
  "code_playground": {
    "preview": "Visualizar"
  },
  "dir_tree": {
    "input": "Caminhos de diretório (um por linha)",
    "generate": "Gerar",
    "result": "Árvore de diretórios"
  },
  "kv_to_code": {
    "input": "Pares chave-valor (chave=valor, um por linha)",
    "language": "Linguagem alvo",
    "convert": "Converter",
    "result": "Código"
  },
  "file_hash": {
    "algorithm": "Algoritmo hash",
    "drop_here": "Solte o arquivo aqui",
    "browse": "Procurar arquivo"
  },
  "endianness": {
    "input_hex": "Bytes hex de entrada",
    "from": "De endianness",
    "to": "Para endianness",
    "convert": "Converter",
    "result": "Resultado"
  },
  "ones_complement": {
    "decimal": "Inteiro decimal",
    "bits": "Largura de bits",
    "compute": "Calcular",
    "original": "Original​",
    "ones": "Complemento de um",
    "twos": "Complemento de dois"
  },
  "ssl_generate": {
    "key_type": "Tipo de chave",
    "generate": "Gerar",
    "public_key": "Chave pública",
    "private_key": "Chave privada",
    "fingerprint": "Impressão digital SHA-256"
  },
  "url_batch": {
    "template": "Modelo de URL (placeholder {id} ou {param})",
    "params": "Parâmetros (um por linha)",
    "generate": "Gerar",
    "result": "Resultado"
  },
  "line_filter": {
    "input": "Texto de entrada",
    "min_len": "Comprimento mínimo",
    "max_len": "Comprimento máximo",
    "action": "Ação",
    "filter": "Filtrar",
    "truncate": "Truncar",
    "pad": "Preencher",
    "run": "Executar",
    "result": "Resultado"
  },
  "tts": {
    "input": "Texto de entrada",
    "voice": "Voz",
    "rate": "Velocidade",
    "volume": "Volume​",
    "play": "Reproduzir",
    "pause": "Pausar",
    "stop": "Parar",
    "speaking": "Falando..."
  },
  "whois": {
    "domain": "Domínio",
    "query": "Consulta",
    "querying": "Consultando...",
    "result": "Resultado"
  },
  "dns_query": {
    "domain": "Domínio",
    "record_type": "Tipo de registro",
    "query": "Consulta",
    "querying": "Consultando...",
    "result": "Resultado"
  },
  "icp_query": {
    "domain": "Domínio",
    "query": "Consulta",
    "querying": "Consultando...",
    "result": "Resultado",
    "api_error": "Falha na solicitação da API"
  },
  "my_ip": {
    "query": "Consultar meu IP",
    "querying": "Consultando..."
  },
  "browser_fingerprint": {
    "ua": "User-Agent​",
    "language": "Idioma",
    "languages": "Idiomas",
    "platform": "Plataforma",
    "cookies": "Cookies​",
    "do_not_track": "Do Not Track​",
    "screen_res": "Resolução da tela",
    "avail_res": "Resolução disponível",
    "color_depth": "Profundidade de cor",
    "pixel_depth": "Profundidade de pixel",
    "device_pixel_ratio": "Proporção de pixels do dispositivo",
    "timezone": "Fuso horário",
    "timezone_offset": "Deslocamento do fuso horário",
    "max_touch": "Toques máximos",
    "hardware_concurrency": "Núcleos de CPU",
    "memory": "Memória",
    "canvas": "Impressão digital do Canvas"
  },
  "doh": {
    "domain": "Domínio",
    "server": "Servidor DoH",
    "query": "Consulta",
    "querying": "Consultando...",
    "result": "Resultado"
  },
  "placeholder_img": {
    "width": "Largura",
    "height": "Altura",
    "bg": "Plano de fundo",
    "fg": "Primeiro plano",
    "text": "Texto",
    "generate": "Gerar",
    "download": "Baixar"
  },
  "privacy_policy": {
    "app_name": "Nome do aplicativo",
    "developer": "Desenvolvedor",
    "collect_types": "Tipos de dados coletados",
    "generate": "Gerar",
    "result": "Política de privacidade",
    "title": "Política de privacidade",
    "default_types": "Informações do dispositivo, localização, registros de uso",
    "section1_title": "1. Coleta de informações",
    "section1_body": "{appName} é desenvolvido por {developer}. Coletamos as seguintes informações para fornecer e melhorar os serviços.",
    "section2_title": "2. Uso das informações",
    "section2_body": "{appName} coleta {types} exclusivamente para a operação do aplicativo e melhoria da experiência, e não venderá a terceiros.",
    "section3_title": "3. Segurança das informações",
    "section3_body": "Tomamos medidas razoáveis para proteger suas informações pessoais.",
    "section4_title": "4. Seus direitos",
    "section4_body": "Você tem o direito de acessar, corrigir e excluir suas informações pessoais.",
    "section5_title": "5. Contato",
    "section5_body": "Para dúvidas, entre em contato com {developer}."
  },
  "pomodoro": {
    "work": "Trabalhando",
    "break": "Pausa",
    "start": "Início",
    "pause": "Pausar",
    "reset": "Reiniciar",
    "work_min": "Trabalho(min)",
    "break_min": "Pausa(min)",
    "completed": "Concluído"
  },
  "art_qr": {
    "text": "Texto/URL",
    "fg": "Primeiro plano",
    "bg": "Plano de fundo",
    "style": "Estilo do ponto",
    "square": "Quadrado",
    "circle": "Círculo",
    "generate": "Gerar",
    "download": "Baixar"
  },
  "ppi_calc": {
    "diagonal": "Diagonal(polegadas)",
    "horizontal": "px horizontal",
    "vertical": "px vertical",
    "compute": "Calcular",
    "result": "PPI​"
  },
  "mortgage_calc": {
    "principal": "Principal​",
    "rate": "Taxa anual(%)",
    "years": "Anos",
    "method": "Método",
    "equal_payment": "Parcelas iguais",
    "equal_principal": "Principal igual",
    "compute": "Calcular",
    "monthly": "Mensal",
    "total": "Total​",
    "interest": "Juros totais",
    "first_month": "Primeiro mês",
    "schedule": "Cronograma completo de amortização",
    "period": "Período",
    "payment": "Pagamento",
    "principal_part": "Principal​",
    "interest_part": "Juros",
    "remaining": "Saldo",
    "export_csv": "Exportar CSV",
    "invalid": "Insira um principal, taxa e prazo válidos.",
    "disclaimer": "Calculado com taxa anual fixa apenas para planejamento. Seu contrato e extrato do credor prevalecem."
  },
  "gb_code": {
    "search": "Pesquisar caractere ou código"
  },
  "solar_lunar": {
    "year": "Ano",
    "month": "Mês",
    "day": "Dia",
    "convert": "Converter"
  },
  "world_clock": {},
  "chem_balance": {
    "input": "Equação química (ex.: H2+O2=H2O)",
    "balance": "Balancear"
  },
  "mic_test": {
    "enumerate": "Enumerar dispositivos",
    "default": "Dispositivo padrão",
    "device": "Dispositivo",
    "status_label": "Status​",
    "status_idle": "Inativo",
    "status_granted": "Permitido",
    "status_denied": "Negado",
    "status_recording": "Gravando",
    "status_playing": "Reproduzindo",
    "record": "Iniciar gravação",
    "stop": "Parar gravação",
    "play": "Reproduzir gravação",
    "download": "Baixar gravação",
    "duration": "Duração",
    "volume": "Volume​"
  },
  "keyboard_test": {
    "hint": "Pressione qualquer tecla no seu teclado para testar",
    "current": "Tecla atual",
    "history": "Histórico de teclas"
  },
  "screen_test": {
    "color_red": "Vermelho",
    "color_green": "Verde",
    "color_blue": "Azul",
    "color_white": "Branco",
    "color_black": "Preto",
    "click_exit": "Clique ou pressione ESC para sair da tela cheia",
    "screen_info": "Informações da tela",
    "resolution": "Resolução",
    "available": "Disponível",
    "pixel_ratio": "Proporção de pixels",
    "esc_hint": "Pressione ESC para sair do modo de tela cheia"
  },
  "pfx_to_pem": {
    "select_file": "Selecionar arquivo PFX/P12",
    "password": "Senha",
    "parse": "Analisar",
    "parsing": "Analisando...",
    "cert_pem": "Certificado PEM",
    "key_pem": "Chave privada PEM",
    "download": "Baixar",
    "parse_error": "Falha na análise",
    "no_content": "Nenhum certificado ou chave privada encontrado",
    "forge_required": "A biblioteca node-forge é necessária"
  },
  "http_request": {
    "headers": "Cabeçalhos",
    "add_header": "Adicionar cabeçalho",
    "body": "Corpo",
    "send": "Enviar",
    "sending": "Enviando...",
    "cors_warning": "Nota: a política CORS do navegador pode limitar algumas solicitações; apenas endpoints com CORS habilitado são suportados",
    "status": "Status​",
    "status_text": "Texto do status",
    "time": "Tempo",
    "response_headers": "Cabeçalhos da resposta",
    "response_body": "Corpo da resposta"
  },
  "doodle": {
    "color": "Cor",
    "size": "Tamanho do pincel",
    "eraser": "Borracha",
    "undo": "Desfazer",
    "clear": "Limpar",
    "download": "Baixar PNG",
    "reset": "Limpar canvas"
  },
  "modpow": {
    "base": "Base​",
    "exponent": "Expoente",
    "modulus": "Módulo",
    "calc": "Calcular",
    "result": "Resultado:",
    "err_modulus_zero": "O módulo não pode ser 0",
    "err_negative_exp": "O expoente não pode ser negativo",
    "err_invalid": "Entrada inválida, insira números inteiros",
    "note": "A exponenciação modular é amplamente usada em criptografia RSA, troca de chaves Diffie-Hellman, criptografia de curva elíptica, etc. Esta ferramenta usa BigInt com o algoritmo de quadrado-e-multiplicação, suportando inteiros arbitrariamente grandes."
  },
  "bit_reverse": {
    "input_label": "Insira um número inteiro positivo",
    "width_label": "Largura de bits",
    "calc": "Calcular",
    "step_original": "Binário original:",
    "step_reversed": "Binário invertido:",
    "result_dec": "Resultado (decimal):",
    "result_hex": "Resultado (hex):",
    "err_negative": "Insira um número inteiro não negativo",
    "err_invalid": "Entrada inválida"
  },
  "punctuation": {
    "cn2en": "CN → EN​",
    "en2cn": "EN → CN​",
    "input_label": "Texto de entrada",
    "convert": "Converter",
    "output_label": "Saída",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "leap_year": {
    "mode_single": "Ano único",
    "mode_range": "Intervalo",
    "year_label": "Ano",
    "start_label": "Ano inicial",
    "end_label": "Ano final",
    "check": "Verificar",
    "is_leap": "O ano {year} é bissexto",
    "not_leap": "O ano {year} não é bissexto",
    "range_result": "{count} anos bissextos entre {start} e {end}:",
    "err_invalid": "Insira um ano válido",
    "err_range": "Insira anos inicial e final válidos",
    "rule": "Regra de ano bissexto: Um ano divisível por 4 é bissexto, a menos que seja divisível por 100 mas não por 400. Por exemplo: 2000 é bissexto, 1900 não é, 2024 é."
  },
  "reverse": {
    "mode_char": "Inversão de caracteres",
    "mode_line": "Inversão de linhas",
    "input_label": "Texto de entrada",
    "action": "Inverter",
    "output_label": "Saída",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "reaction_test": {
    "click_start": "Clique para começar",
    "wait_green": "Aguarde o verde…",
    "click_now": "Clique agora!",
    "your_time": "Seu tempo de reação: {ms} ms",
    "too_early": "Muito cedo! Aguarde o sinal verde.",
    "try_again": "Tentar novamente",
    "stats_title": "Estatísticas",
    "avg": "Média",
    "best": "Melhor",
    "worst": "Pior",
    "history_title": "Histórico (últimos 10)"
  },
  "ipv4_ipv6": {
    "input_label": "Insira o endereço",
    "mode_auto": "Automático",
    "mode_ipv4": "IPv4​",
    "mode_ipv6": "IPv6​",
    "invalid_ipv4": "Endereço IPv4 inválido",
    "invalid_ipv6": "Endereço IPv6 inválido",
    "invalid_input": "Endereço de entrada inválido",
    "mapped": "IPv6 mapeado",
    "mapped_hex": "IPv6 mapeado (Hex)",
    "compatible": "IPv4 compatível",
    "compatible_hex": "IPv4 compatível (Hex)",
    "six_to_four": "Endereço 6to4",
    "expanded": "Expansão completa",
    "compressed": "Comprimido",
    "extracted_ipv4": "IPv4 extraído",
    "no_ipv4_mapping": "Este endereço IPv6 não contém um mapeamento IPv4",
    "batch_placeholder": "Um IPv4 ou IPv6 por linha\n192.168.1.1\n::ffff:192.168.1.1\n2002:c0a8:0101::",
    "first_line_hint": "A primeira linha mostra a conversão detalhada; múltiplas linhas geram a tabela em lote abaixo.",
    "batch_results": "Resultados da análise em lote",
    "copy_batch": "Copiar resultados em lote",
    "col_input": "Entrada",
    "col_type": "Tipo",
    "col_output": "Resultado convertido/extraído",
    "col_note": "Nota",
    "invalid": "Inválido",
    "batch_note_ipv4": "IPv6 mapeado por IPv4 gerado para logs e configuração dual-stack.",
    "batch_note_extractable": "Este IPv6 contém informações IPv4 extraíveis.",
    "batch_note_no_mapping": "IPv6 regular não contém IPv4 e não pode ser convertido diretamente de volta."
  },
  "code_formatter": {
    "language": "Linguagem",
    "indent_size": "Tamanho do recuo",
    "wrap_length": "Comprimento de quebra",
    "input_label": "Código de entrada",
    "input_placeholder": "Cole o código…",
    "format": "Formato",
    "output_label": "Saída formatada",
    "copy": "Copiar",
    "copied": "Copiado"
  },
  "port_check": {
    "host_label": "Hostname / IP​",
    "port_label": "Porta",
    "check": "Verificar",
    "check_common": "Verificar portas comuns",
    "th_port": "Porta",
    "th_service": "Serviço",
    "th_status": "Status​",
    "status_checking": "Verificando…",
    "status_open": "Aberta",
    "status_closed": "Fechada",
    "status_timeout": "Tempo esgotado",
    "status_error": "Erro",
    "limitation_note": "Nota: Devido a restrições de segurança CORS do navegador, os resultados da verificação de porta são apenas para referência. Isso usa fetch com modo no-cors; uma resposta opaca sugere que o serviço pode estar respondendo, mas não pode ser confirmado. Detecção mais precisa requer ferramentas do lado do servidor."
  },
  "auto_refresh": {
    "url_label": "URL alvo",
    "interval_label": "Intervalo de atualização",
    "seconds": "segundos (mínimo 5s)",
    "start": "Início",
    "stop": "Parar",
    "countdown": "Contagem regressiva",
    "total_refreshes": "Atualizações",
    "last_refresh": "Última atualização",
    "preview": "Visualização da página",
    "bookmarklet_title": "Bookmarklet​",
    "bookmarklet_desc": "Arraste o botão abaixo para a barra de favoritos para usar a atualização automática em qualquer página.",
    "bookmarklet_btn": "Bookmarklet de atualização automática"
  },
  "text_to_html_table": {
    "inputLabel": "Texto de entrada (CSV/TSV)",
    "placeholder": "Nome,Idade,Cidade\nAlice,25,São Paulo\nBob,30,Rio de Janeiro",
    "delimiter": "Delimitador",
    "hasHeader": "Linha de cabeçalho",
    "border": "Borda",
    "padding": "Preenchimento da célula",
    "className": "Nome da classe CSS",
    "htmlCode": "Código HTML",
    "copy": "Copiar código",
    "copied": "Copiado",
    "preview": "Visualizar"
  },
  "font_preview": {
    "textLabel": "Texto de visualização",
    "fontSize": "Tamanho da fonte",
    "customFont": "Fonte personalizada"
  },
  "symbols": {
    "search": "Pesquisar",
    "searchPlaceholder": "Pesquisar símbolo ou nome…"
  },
  "rc4": {
    "key": "Chave",
    "mode": "Modo",
    "encrypt": "Criptografar",
    "decrypt": "Descriptografar",
    "plaintext": "Texto simples",
    "ciphertext": "Texto cifrado",
    "inputEnc": "Codificação de entrada",
    "outputEnc": "Codificação de saída",
    "result": "Resultado",
    "keyRequired": "A chave é obrigatória",
    "inputRequired": "A entrada é obrigatória"
  },
  "clipboard_viewer": {
    "read": "Ler área de transferência",
    "hint": "Requer permissão do navegador. Se negada, use a área de colagem abaixo.",
    "pasteArea": "Área de colagem (Ctrl+V)",
    "pasteItems": "Conteúdo colado"
  },
  "svg_editor": {
    "tool": "Ferramenta",
    "add": "Adicionar forma",
    "properties": "Propriedades",
    "delete": "Excluir selecionado",
    "svgCode": "Código SVG",
    "copy": "Copiar",
    "copied": "Copiado"
  }
}
