Files
ealmeida 561bb14736 fix(wp-translate-ptpt): reparar em vez de reverter corrupção de placeholders
QualityValidator.validate_entry() detectava PLACEHOLDER_MISMATCH mas só
revertia para o msgstr original — se a entrada já chegasse corrompida
(de fora do pipeline, ou de execuções anteriores do LibreTranslate), o
bug ficava preservado silenciosamente em vez de corrigido.

Adiciona repair_placeholders(), chamado no início de validate_entry():
- '%1$s' -> '% 1$s' (espaço após % antes do posicional) -> reparado
- '%1$.2f' -> '% 1$. 2f' (espaço após o ponto decimal) -> reparado

Âncora obrigatória: \d+\$ (posicional). Nunca ocorre em prosa PT-PT,
por isso zero falsos positivos em texto legítimo (testado contra '50%
do total', '30% em vendas', etc. — ficam inalterados).

Testado contra as 4 strings reais encontradas corrompidas em produção
(testimonial-pro, woocommerce, wordfence, wp-optimize) — todas reparam
para o valor correcto exacto.

Causa raiz: motor LibreTranslate (TranslationEngine.translate) recebe
placeholders crus, sem tokenização — ao contrário de translate_missing.py
(DeepL) que protege com tokens ⟦N⟧. Reparação aqui é mitigação; a
tokenização do motor LibreTranslate fica como follow-up.
2026-08-29 02:29:44 +01:00
..

type, title, description, timestamp, layer
type title description timestamp layer
Reference Readme Sistema eficiente de traduções WordPress para Português Europeu com correcção automática de marcas, conversão PT-BR→PT-P… 2026-02-23T21:06:08.643327+00:00 wiki

WordPress PT-PT Translation System v1.0.0

Sistema eficiente de traduções WordPress para Português Europeu com correcção automática de marcas, conversão PT-BR→PT-PT e validação de qualidade.

Quick Start

# 1. Inicializar base de dados (primeira vez)
python3 wp-translate-ptpt.py --init-db

# 2. Processar ficheiro individual
python3 wp-translate-ptpt.py /path/to/plugin-pt_PT.po

# 3. Processar biblioteca inteira (só marcas)
python3 wp-translate-ptpt.py --brands-only --batch /biblioteca/

# 4. Tradução completa de novo plugin
python3 wp-translate-ptpt.py /novo-plugin-pt_PT.po

Features

✅ Correcção automática de marcas — Detecta "Formulários Fluentes" → "Fluent Forms" ✅ 98 marcas seed — Fluent Forms, Rank Math, Elementor, WooCommerce, etc. ✅ 50+ regras PT-BR→PT-PT — gerenciar→gerir, deletar→eliminar, senha→palavra-passe ✅ Cache SQLite — Traduções reutilizadas, processamento rápido ✅ Validação qualidade — Preserva placeholders (%s, %d) e HTML tags ✅ Batch processing — Centenas de ficheiros em segundos ✅ Backup/rollback — Reversão automática em caso de erro ✅ Compilação .mo — Automática e tolerante a erros

Arquitectura

6 Classes Core

BrandProtector       → Detecta e corrige marcas traduzidas literalmente
TranslationEngine    → LibreTranslate API wrapper com retry
PoFileHandler        → Parser/writer ficheiros .po
CacheManager         → SQLite cache + auditoria
QualityValidator     → Validação placeholders/HTML/PT-BR
TranslationProcessor → Orquestrador pipeline 9 etapas

Pipeline de 9 Etapas

1. Parse .po → PoEntry objects
2. Brand protection (pre-translation)
3. Filter (cache check)
4. Translate (LibreTranslate)
5. Restore brands
6. PT-BR fixes
7. Brand correction (post-translation)
8. Quality validation
9. Save + compile .mo

Modos de Uso

Single File

python3 wp-translate-ptpt.py /path/to/plugin-pt_PT.po

Batch Processing

python3 wp-translate-ptpt.py --batch /biblioteca/

Brands Only (sem traduzir, só corrigir marcas)

python3 wp-translate-ptpt.py --brands-only ficheiro.po
python3 wp-translate-ptpt.py --brands-only --batch /biblioteca/

Dry Run (simular sem alterar)

python3 wp-translate-ptpt.py --dry-run ficheiro.po

Database Management

# Inicializar
python3 wp-translate-ptpt.py --init-db

# Exportar marcas
python3 wp-translate-ptpt.py --export-brands brands.json

# Importar marcas
python3 wp-translate-ptpt.py --import-brands brands.json

Base de Dados SQLite

Localização: wp-translations.db

3 Tabelas

brands        → 98 marcas seed + auto-detectadas
translations  → Cache traduções (MD5 hash lookup)
corrections   → Log auditoria de todas as correcções

Marcas Seed (98 total)

Fluent Forms, FluentCRM, Fluent SMTP, Rank Math, Elementor,
Elementor Pro, WooCommerce, WPForms, Wordfence, UpdraftPlus,
WP Rocket, Loco Translate, Bit Integrations, Element Pack,
ElementsKit, Happy Addons, Real Cookie Banner, Google,
Facebook, Instagram, PayPal, Stripe, WordPress, ...

Conversões PT-BR → PT-PT (50+ regras)

salvar       → guardar
deletar      → eliminar
gerenciar    → gerir
senha        → palavra-passe
arquivo      → ficheiro
atualiz*     → actualiz*
voce         → o utilizador
habilitar    → activar
desabilitar  → desactivar
cadastro     → registo

Traduções Literais Detectadas (15+)

"Fluent Forms" → ["Formulários Fluentes", "Formas Fluentes"]
"Rank Math"    → ["Matemática de Classificação"]
"Happy Addons" → ["Complementos Felizes"]
"Wordfence"    → ["Cerca de Palavras"]
"Element Pack" → ["Pacote de Elementos"]

Performance

Teste individual (FluentForm):

  • 53 marcas corrigidas
  • Tempo: 1.2s

Batch (241 ficheiros):

  • 15 marcas corrigidas
  • Tempo: 42.8s
  • Velocidade: ~5.6 ficheiros/segundo

Dependências

pip install requests  # LibreTranslate API
# gettext tools (msgfmt) - já incluído na maioria das distros Linux

Configuração LibreTranslate

API URL (default): https://translate.descomplicar.pt/translate Auth: Whitelist IP (sem API key) Rate limit: 0.3s entre chamadas

Troubleshooting

Erros msgfmt

Alguns ficheiros têm erros msgfmt pré-existentes (placeholders perdidos, headers inválidos). O script continua processamento e avisa, mas não falha.

Ficheiros duplicados

A biblioteca pode ter duplicados em diferentes localizações. O script processa todos.

Cache

Para limpar cache: rm wp-translations.db e executar --init-db novamente.

Ficheiros

wp-translate-ptpt.py       → Script principal (~950 linhas)
wp-translations.db         → Base de dados SQLite
CHANGELOG.md               → Histórico de versões
REPORT-FINAL-*.md          → Reports de execução
README.md                  → Esta documentação

Scripts Anteriores

Este script substitui:

  • translate-wordpress-plugin.py (v1.0)
  • translate_missing.py (v2.0 LibreTranslate)
  • fix_ptbr.py (conversões PT-BR)
  • fix_malformed.py (correcções sintaxe)

Próximos Passos

  1. Manutenção mensal:

    python3 wp-translate-ptpt.py --brands-only --batch /biblioteca/
    
  2. Novos plugins:

    python3 wp-translate-ptpt.py /novo-plugin-pt_PT.po
    
  3. Auditoria PT-BR:

    grep -r "gerenciar\|deletar\|voce" *.po
    

Contribuir

  1. Adicionar novas marcas: editar SEED_BRANDS (linha ~800)
  2. Adicionar regras PT-BR: editar PTBR_TO_PTPT (linha ~400)
  3. Adicionar mapeamentos literais: editar LITERAL_TRANSLATIONS (linha ~200)

Versão

v1.0.0 — 2026-02-23

Autor: Descomplicar® Crescimento Digital Licença: Proprietário Python: 3.8+