561bb1473680556e882e845e2b7f588f6d329bd0
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.
csv2ical
@ e868f037c8
icewalk
@ b40f4fa578
Description
Scripts diversos de desenvolvimento
43 MiB
Languages
Python
74%
Shell
16.1%
TypeScript
7.6%
HTML
2.2%