Come risolvere le traduzioni fuzzy nei file .po di WordPress

Hai tradotto ogni stringa. Hai salvato il file, caricato il .mo e aggiornato il tuo sito. Eppure, una manciata di etichette è ancora ostinatamente in inglese. Apri il file .po, trovi la stringa, ed eccola lì, perfettamente tradotta. Allora perché WordPress la sta ignorando?
La risposta è quasi sempre un piccolo flag nascosto sopra la voce: #, fuzzy. Una traduzione fuzzy è il modo in cui gettext dice "questa traduzione potrebbe essere sbagliata, quindi non fidarti ancora". E, cosa fondamentale, WordPress si rifiuta di visualizzare le stringhe fuzzy sul sito live, ripiegando invece sull'inglese originale. Questa è una delle cause più fraintese del problema "la mia traduzione non viene visualizzata".
Questa guida spiega esattamente cosa significa il flag di traduzione fuzzy, perché continua ad apparire nei tuoi cataloghi e come trovare ed eliminare le stringhe fuzzy in Poedit, sulla riga di comando e su vasta scala attraverso un intero backlog. Una volta compreso il meccanismo, il mistero delle traduzioni mancanti scompare.
Cosa significa realmente il flag fuzzy?
Il flag fuzzy è un marcatore che gettext aggiunge a una voce di traduzione per indicare che la traduzione è incerta e necessita di revisione umana. Nel file .po grezzo appare come un commento speciale direttamente sopra la stringa.
#: includes/cart.php:88
#, fuzzy
msgid "Add to cart"
msgstr "Im Warenkorb"
Quella riga #, fuzzy indica a ogni strumento compatibile con gettext, incluso WordPress, che il msgstr sottostante è provvisorio. La traduzione esiste, ma gettext non la considera confermata.
Perché WordPress ignora le stringhe fuzzy
Ecco il comportamento che coglie tutti di sorpresa. Quando WordPress compila o legge un file .mo, tratta le voci fuzzy come non tradotte. La stringa è tecnicamente presente nel file, ma WordPress la ignora deliberatamente e mostra invece l'originale msgid.
Quindi, dalla tua prospettiva, la traduzione è "fatta", è proprio lì nel file. Ma dalla prospettiva di WordPress, quella stringa non ha una traduzione affidabile, quindi rende la sorgente inglese. Questo è precisamente il motivo per cui un catalogo dall'aspetto finito può comunque visualizzare testo non tradotto sul front-end.
Questo design è intenzionale e, a dire il vero, sensato. L'intero scopo del flag fuzzy è impedire che traduzioni non verificate e potenzialmente sbagliate vadano online silenziosamente. Immagina una stringa che originariamente recitava "Delete account" (Elimina account) e che in seguito è stata modificata in "Deactivate account" (Disattiva account). Se gettext avesse ciecamente mantenuto la vecchia traduzione, i tuoi utenti potrebbero vedere un pulsante etichettato "Delete account" che in realtà si limita a disattivare, una discrepanza pericolosa. Nascondendo le stringhe fuzzy, gettext costringe un essere umano a confermare che la traduzione corrisponda ancora al nuovo significato prima che raggiunga chiunque. Il flag è un meccanismo di sicurezza, non un bug.
Perché i flag fuzzy continuano ad apparire?
I flag fuzzy non sono casuali. Vengono generati automaticamente dagli strumenti gettext in due situazioni principali, e comprenderle entrambe ti dice come prevenirli.
La stringa sorgente è cambiata
La causa più comune è un aggiornamento della sorgente. Immagina che lo sviluppatore cambi una stringa nella prossima versione del plugin da "Add to cart" (Aggiungi al carrello) a "Add to basket" (Aggiungi al paniere). Quando unisci il nuovo modello alla tua traduzione esistente, gettext rileva che la sorgente non corrisponde più a ciò che avevi originariamente tradotto. Invece di scartare la tua vecchia traduzione, la mantiene ma la contrassegna come fuzzy, dicendo essenzialmente: "l'inglese è cambiato, quindi ricontrolla se la tua traduzione è ancora appropriata".
Corrispondenza automatica tramite Translation Memory e msgmerge
La seconda causa è la corrispondenza fuzzy durante un'unione (merge). Lo strumento msgmerge aggiorna un vecchio file di traduzione confrontandolo con un nuovo modello e, quando trova una stringa sorgente simile ma non identica a una precedente, copia la vecchia traduzione e la contrassegna come fuzzy.
# Merge a new template into an existing translation.
# Similar-but-changed strings get marked #, fuzzy automatically.
msgmerge --update awesome-plugin-de_DE.po awesome-plugin.pot
La Translation Memory negli editor desktop si comporta allo stesso modo: quando riempie automaticamente un suggerimento da una corrispondenza quasi esatta, contrassegna il risultato come fuzzy in modo che tu ti ricordi di verificarlo. In entrambi i casi, il flag sta facendo il suo lavoro. Il problema è solo che le voci fuzzy rimangono quindi non riviste e WordPress le nasconde silenziosamente.
Esiste una terza fonte, più subdola, che vale la pena conoscere: gli strumenti di copia-incolla e importazione massiva. Alcune piattaforme di traduzione e script di importazione contrassegnano ogni voce come fuzzy per impostazione predefinita come misura conservativa, aspettandosi che un essere umano confermi ciascuna di esse in seguito. Se importi un catalogo da un altro sistema e scopri che ogni singola stringa è improvvisamente fuzzy, di solito è questo il motivo. Le traduzioni potrebbero essere perfettamente corrette, ma finché i flag non vengono rimossi, nessuna di esse apparirà sul tuo sito. Conoscere la fonte dei flag ti dice se hai davvero bisogno di rivedere ogni voce o se una cancellazione massiva sicura è appropriata.
Come si trovano e si risolvono le stringhe fuzzy?
Cancellare le stringhe fuzzy significa rivederle una per una e, una volta confermato che la traduzione è corretta, rimuovere il flag. Esistono tre modi pratici per farlo, a seconda della dimensione del lavoro.
Risolvere le stringhe fuzzy in Poedit
Poedit rende tutto questo molto semplice. Apri il file .po e usa i controlli di ricerca e filtro per mostrare solo le voci fuzzy; sono codificate a colori (di solito arancione) in modo da risaltare immediatamente. Clicca su ciascuna, conferma o correggi la traduzione, quindi disattiva lo stato fuzzy con la scorciatoia da tastiera (Modifica, poi "Traduzione è Fuzzy", o la scorciatoia mostrata nel menu). Quando salvi, Poedit ricompila un .mo pulito e le stringhe ora confermate verranno visualizzate sul tuo sito. Se sei nuovo a questo editor, la guida completa a Poedit copre in dettaglio il flusso di lavoro di filtro e revisione.
Risolvere le stringhe fuzzy dalla riga di comando
Per l'automazione o cataloghi di grandi dimensioni, la riga di comando è più veloce. Puoi contare le voci fuzzy e, una volta verificate in blocco, rimuovere i flag in modo che WordPress le carichi.
# Count how many fuzzy strings remain
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po | grep -c "msgid"
# Clear all fuzzy flags (only after you trust the translations)
msgattrib --clear-fuzzy --empty awesome-plugin-de_DE.po \
--output-file=awesome-plugin-de_DE.po
Fai attenzione alla cancellazione massiva. Rimuovere i flag fuzzy senza rivedere le traduzioni vanifica lo scopo del flag e può inviare testo genuinamente errato ai tuoi utenti. Utilizza l'approccio da riga di comando quando ti fidi della fonte delle traduzioni e il percorso manuale con Poedit quando non ti fidi.
Una via di mezzo sicura è esportare le stringhe fuzzy in un file separato, rivedere solo quelle e poi reimportarle. Questo mantiene le tue traduzioni confermate intatte mentre ti concentri solo sulle voci che richiedono effettivamente attenzione.
# Extract only the fuzzy entries for focused review
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po \
--output-file=fuzzy-only.po
Rivedere cinquanta stringhe isolate è molto meno soggetto a errori rispetto a scorrere un catalogo di mille righe alla ricerca di righe arancioni, e ti fornisce una registrazione pulita di esattamente ciò che è cambiato nell'ultimo aggiornamento.
Dopo aver rimosso i flag, salva sempre o ricompila il file .mo. Lo stato fuzzy risiede nel .po, ma WordPress legge il .mo binario, quindi finché non lo rigeneri, il tuo front-end continuerà a mostrare l'inglese anche se il .po sembra pulito. Poedit ricompila automaticamente al salvataggio; sulla riga di comando si esegue msgfmt awesome-plugin-de_DE.po -o awesome-plugin-de_DE.mo. Dimenticare questo passaggio finale di compilazione è una delle ragioni più comuni per cui un catalogo appena "sfuzzato" non appare ancora: la traduzione è confermata nel file sorgente, ma il binario che il sito carica effettivamente è obsoleto.
Nota che le voci fuzzy spesso appaiono insieme alle stringhe plurali, dove un msgid_plural modificato può contrassegnare l'intero blocco plurale come fuzzy. Se il tuo backlog fuzzy è ricco di conteggi e quantità, la nostra guida a Plurali Gettext e pluralizzazione complessa spiega perché queste voci sono particolarmente fragili durante le unioni.
Eliminare il backlog fuzzy su larga scala
Una singola stringa fuzzy è una correzione da trenta secondi. Un catalogo con quattrocento stringhe fuzzy dopo un importante aggiornamento del plugin è un problema diverso, e in una dozzina di lingue diventa un vero e proprio collo di bottiglia. La tentazione di cancellare in massa i flag senza revisione è esattamente il modo in cui le traduzioni errate raggiungono la produzione.
Una soluzione più pulita è ritradurre le voci fuzzy da capo, anziché convalidare corrispondenze obsolete. Quando esegui un catalogo tramite SimplePoTranslate, l'IA sensibile al contesto produce una traduzione attuale e confermata per ogni stringa modificata, quindi non stai solo rimuovendo un flag di avviso, stai sostituendo corrispondenze incerte con traduzioni reali. La Syntax Locking mantiene intatti tutti i %s, %1$s, {count} e i tag HTML durante il processo, e lo Smart Batching elabora grandi cataloghi post-aggiornamento in un'unica operazione. Ricevi un ZIP pulito con .po, .mo, .json, .php e .xliff, senza backlog fuzzy persistenti, pronto per essere distribuito dal cloud.
Vale la pena distinguere questo dalla questione più ampia del perché le traduzioni non appaiono affatto. I flag fuzzy sono una causa specifica, ma file .mo mancanti, nomi di file errati e mancata corrispondenza delle impostazioni locali causano lo stesso sintomo. Per la checklist diagnostica completa, consulta la nostra guida alla risoluzione dei problemi per le traduzioni non visualizzate in WordPress, che tratta le stringhe fuzzy come un elemento in un elenco più ampio.
Pronto a eliminare un intero backlog fuzzy e a far visualizzare ogni stringa sul tuo sito? Prova SimplePoTranslate gratuitamente — non è richiesta alcuna carta di credito. Il piano gratuito ritraduce da capo il tuo file
.po, sostituendo le corrispondenze fuzzy incerte con traduzioni pulite e confermate.