FunkcePluginCeníkZdroje
Změnit jazyk
ZdrojeJak opravit „fuzzy“ překlady v souborech .po ve WordPressu

Jak opravit „fuzzy“ překlady v souborech .po ve WordPressu

SimplePoTranslate Team11. května 2026
Jak opravit „fuzzy“ překlady v souborech .po ve WordPressu

Přeložili jste každý řetězec. Uložili jste soubor, nahráli .mo a aktualizovali svou stránku. Přesto několik štítků tvrdošíjně zůstává v angličtině. Otevřete soubor .po, najdete řetězec a ten tam je, perfektně přeložený. Proč ho tedy WordPress ignoruje?

Odpověď je téměř vždy malý příznak skrytý nad položkou: #, fuzzy. „Fuzzy“ překlad je způsob, jakým gettext říká "tento překlad může být chybný, takže mu zatím nevěřte." A co je klíčové, WordPress odmítá zobrazovat „fuzzy“ řetězce na živé stránce a místo toho se vrátí k původní angličtině. To je jedna z nejčastěji nepochopených příčin problému "můj překlad se nezobrazuje".

Tento průvodce přesně vysvětluje, co znamená příznak „fuzzy“ překladu, proč se stále objevuje ve vašich katalozích a jak najít a vymazat „fuzzy“ řetězce v Poeditu, na příkazovém řádku a ve velkém měřítku napříč celým nevyřízeným překladem. Jakmile pochopíte mechanismus, záhada chybějících překladů zmizí.

Co vlastně znamená příznak „fuzzy“?

Příznak „fuzzy“ je značka, kterou gettext přidává k položce překladu, aby naznačil, že překlad je nejistý a vyžaduje lidskou kontrolu. V nezpracovaném souboru .po se objevuje jako speciální komentář přímo nad řetězcem.

#: includes/cart.php:88
#, fuzzy
msgid "Add to cart"
msgstr "Im Warenkorb"

Tento řádek #, fuzzy říká každému nástroji podporujícímu gettext, včetně WordPressu, že msgstr pod ním je provizorní. Překlad existuje, ale gettext ho nepovažuje za potvrzený.

Proč WordPress přeskočí „fuzzy“ řetězce

Zde je chování, které všechny zaskočí. Když WordPress kompiluje nebo čte soubor .mo, zachází s „fuzzy“ položkami jako s nepřeloženými. Řetězec je technicky přítomen v souboru, ale WordPress ho záměrně ignoruje a místo toho zobrazuje původní msgid.

Z vašeho pohledu je tedy překlad "hotový", je přímo v souboru. Ale z pohledu WordPressu tento řetězec nemá žádný důvěryhodný překlad, takže zobrazuje anglický zdroj. Přesně proto může katalog, který vypadá hotový, stále zobrazovat nepřeložený text na frontendu.

Tento design je záměrný a, upřímně řečeno, rozumný. Celý smysl „fuzzy“ příznaku je zabránit tomu, aby neověřené, potenciálně chybné překlady potichu šly do ostrého provozu. Představte si řetězec, který původně zněl "Delete account" a později byl změněn na "Deactivate account." Kdyby gettext slepě zachoval starý překlad, vaši uživatelé by mohli vidět tlačítko s nápisem "Delete account", které ve skutečnosti pouze deaktivuje – nebezpečná neshoda. Skrýváním „fuzzy“ řetězců gettext nutí člověka potvrdit, že překlad stále odpovídá novému významu, než se k němu kdokoli dostane. Příznak je bezpečnostní mechanismus, nikoli chyba.

Proč se příznaky „fuzzy“ stále objevují?

Příznaky „fuzzy“ nejsou náhodné. Jsou generovány automaticky nástroji gettext ve dvou hlavních situacích a pochopení obou vám řekne, jak jim zabránit.

Změnil se zdrojový řetězec

Nejčastější příčinou je aktualizace zdroje. Představte si, že vývojář změní řetězec v další verzi pluginu z "Add to cart" na "Add to basket." Když sloučíte novou šablonu do svého stávajícího překladu, gettext zjistí, že zdroj již neodpovídá tomu, co jste původně přeložili. Namísto zahození starého překladu ho ponechá, ale označí ho jako „fuzzy“, v podstatě říká: "angličtina se změnila, proto prosím zkontrolujte, zda váš překlad stále odpovídá."

Automatické porovnávání pomocí překladové paměti a msgmerge

Druhou příčinou je „fuzzy“ porovnávání během slučování. Nástroj msgmerge aktualizuje starý překladový soubor proti nové šabloně, a když najde zdrojový řetězec, který je podobný, ale ne identický s předchozím, zkopíruje starý překlad a označí ho jako „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

Překladová paměť v desktopových editorech se chová stejně: když automaticky doplní návrh z blízké shody, označí výsledek jako „fuzzy“, abyste si pamatovali ho ověřit. V obou případech příznak plní svou funkci. Problém je pouze v tom, že „fuzzy“ položky pak zůstanou nezkontrolované a WordPress je potichu skryje.

Existuje třetí, zákeřnější zdroj, o kterém je dobré vědět: nástroje pro kopírování a vkládání a hromadný import. Některé překladové platformy a importní skripty označují každou položku jako „fuzzy“ ve výchozím nastavení jako konzervativní opatření, očekávajíc, že člověk každou následně potvrdí. Pokud importujete katalog z jiného systému a zjistíte, že každý jednotlivý řetězec je najednou „fuzzy“, je to obvykle důvod. Překlady mohou být perfektně v pořádku, ale dokud nejsou příznaky vymazány, žádný z nich se na vašem webu nezobrazí. Znalost zdroje příznaků vám napoví, zda skutečně potřebujete zkontrolovat každou položku, nebo zda je bezpečné hromadné vymazání.

Jak najít a opravit „fuzzy“ řetězce?

Vymazání „fuzzy“ řetězců znamená zkontrolovat každý z nich a poté, co potvrdíte, že překlad je správný, odstranit příznak. Existují tři praktické způsoby, jak to udělat, v závislosti na velikosti úkolu.

Oprava „fuzzy“ řetězců v Poeditu

Poedit to usnadňuje nejvíce. Otevřete soubor .po a použijte ovládací prvky pro vyhledávání a filtrování, abyste zobrazili pouze „fuzzy“ položky, ty jsou barevně odlišeny (obvykle oranžově), takže okamžitě vyniknou. Klikněte na každou z nich, potvrďte nebo opravte překlad, poté vypněte „fuzzy“ stav pomocí klávesové zkratky (Upravit a poté "Translation is Fuzzy," nebo zkratka zobrazená v menu). Když uložíte, Poedit zkompiluje čistý soubor .mo a nyní potvrzené řetězce se zobrazí na vašem webu. Pokud jste v tomto editoru noví, kompletní průvodce Poedit podrobně popisuje pracovní postup filtrování a kontroly.

Oprava „fuzzy“ řetězců na příkazovém řádku

Pro automatizaci nebo velké katalogy je příkazový řádek rychlejší. Můžete spočítat „fuzzy“ položky a jakmile je hromadně ověříte, odstranit příznaky, aby je WordPress načetl.

# 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

Buďte opatrní při hromadném vymazávání. Odstranění „fuzzy“ příznaků bez kontroly překladů maří účel příznaku a může doručit skutečně špatný text vašim uživatelům. Použijte přístup z příkazového řádku, když důvěřujete zdroji překladů, a manuální cestu v Poeditu, když nedůvěřujete.

Bezpečným kompromisem je exportovat „fuzzy“ řetězce do samostatného souboru, zkontrolovat pouze ty a poté je sloučit zpět. Tím zůstanou vaše potvrzené překlady nedotčené, zatímco se zaměříte pouze na položky, které skutečně vyžadují pozornost.

# Extract only the fuzzy entries for focused review
msgattrib --only-fuzzy --no-obsolete awesome-plugin-de_DE.po \
  --output-file=fuzzy-only.po

Kontrola padesáti izolovaných řetězců je mnohem méně náchylná k chybám než procházení tisíců řádků katalogu a hledání oranžových řádků, a poskytuje vám čistý záznam přesně toho, co se změnilo v poslední aktualizaci.

Po vymazání příznaků vždy znovu uložte nebo zkompilujte soubor .mo. „Fuzzy“ stav žije v .po, ale WordPress čte binární .mo, takže dokud ho znovu nevygenerujete, váš frontend bude stále zobrazovat angličtinu, i když .po vypadá čistě. Poedit se automaticky rekompiluje při uložení; na příkazovém řádku spustíte msgfmt awesome-plugin-de_DE.po -o awesome-plugin-de_DE.mo. Zapomenutí tohoto konečného kroku kompilace je jedním z nejčastějších důvodů, proč se nově vyčištěný katalog stále nezobrazuje – překlad je potvrzen ve zdrojovém souboru, ale binární soubor, který web skutečně načítá, je zastaralý.

Všimněte si, že „fuzzy“ položky se často objevují vedle řetězců s množným číslem, kde změněný msgid_plural může označit celý blok množného čísla jako „fuzzy“. Pokud váš „fuzzy“ backlog obsahuje mnoho počtů a množství, náš průvodce Gettext plurals and complex pluralization vysvětluje, proč jsou tyto položky obzvláště křehké během slučování.

Hromadné vymazání „fuzzy“ nevyřízených překladů

Jeden „fuzzy“ řetězec je oprava na třicet sekund. Katalog se čtyřmi sty „fuzzy“ řetězci po velké aktualizaci pluginu je jiný problém, a napříč tuctem jazyků se stává skutečným úzkým hrdlem. Pokušení hromadně vymazat příznaky bez kontroly je přesně to, jak se poškozené překlady dostávají do produkce.

Čistším řešením je znovu přeložit „fuzzy“ položky zcela nově, spíše než jen slepě schvalovat zastaralé shody. Když zpracujete katalog přes SimplePoTranslate, kontextově uvědomělá umělá inteligence vytvoří aktuální, potvrzený překlad pro každý změněný řetězec, takže nejen odstraňujete varovný příznak, ale nahrazujete nejisté shody skutečnými překlady. Syntax Locking zachovává každý %s, %1$s, {count} a HTML tag beze změny během procesu a Smart Batching zpracovává velké katalogy po aktualizaci najednou. Získáte zpět čistý ZIP soubor s .po, .mo, .json, .php a .xliff, bez přetrvávajících „fuzzy“ překladů, připravený k nasazení z cloudu.

Stojí za to odlišit to od širší otázky, proč se překlady vůbec nezobrazují. „Fuzzy“ příznaky jsou jednou specifickou příčinou, ale chybějící soubory .mo, špatné názvy souborů a neshody locale způsobují stejný symptom. Úplný diagnostický kontrolní seznam naleznete v našem průvodci řešením problémů, kdy se překlady nezobrazují ve WordPressu, který považuje „fuzzy“ řetězce za jednu položku v širším seznamu.

Jste připraveni vyčistit celý „fuzzy“ backlog a zajistit, aby se každý řetězec zobrazil na vašem webu? Vyzkoušejte SimplePoTranslate zdarma – není vyžadována kreditní karta. Bezplatná úroveň znovu přeloží váš soubor .po úplně nově, nahrazuje nejisté „fuzzy“ shody čistými, potvrzenými překlady.

Související témata