FunkcePluginCeníkZdroje
Změnit jazyk
Zdroje.po vs .mo vs .pot: Vysvětlení souborů pro překlad ve WordPressu

.po vs .mo vs .pot: Vysvětlení souborů pro překlad ve WordPressu

SimplePoTranslate Team21. dubna 2026
.po vs .mo vs .pot: Vysvětlení souborů pro překlad ve WordPressu

Otevřete složku languages šablony WordPressu a najdete tři soubory, které vypadají téměř stejně: twentytwentyfour.pot, twentytwentyfour-de_DE.po a twentytwentyfour-de_DE.mo. Stejná šablona, stejný jazyk, tři různé přípony. Který z nich byste měli upravit? Který WordPress skutečně načítá? A proč úpravou špatného souboru vaše překlady potichu zmizí?

Pokud jste si někdy kladli otázku, který soubor je důležitý v diskuzi souborů .po vs .mo, nejste sami. Tyto tři přípony tvoří páteř každého přeloženého webu WordPress, přesto jejich rozdíly matou začátečníky i zkušené vývojáře. Upravíte-li špatný soubor, vaši němečtí návštěvníci stále uvidí angličtinu. Upravíte-li správný, ale vynecháte krok, nic se také nezmění.

Tento průvodce přesně vysvětluje, co jsou soubory .pot, .po a .mo, jak souvisí v rámci pracovního postupu GNU Gettext, kde se nacházejí ve WordPressu a proč byste nikdy neměli otevírat soubor .mo v textovém editoru. Nakonec budete vědět, kterého souboru se dotknout a kterého se nedotýkat.

Co jsou soubory .pot, .po a .mo?

Stručně řečeno: soubor .pot je prázdná šablona, soubor .po je váš upravitelný překlad a soubor .mo je zkompilovaný binární soubor, který WordPress čte za běhu. Tvoří řetězec a každý článek má přesně jednu funkci.

Všechny tyto tři formáty pocházejí z GNU Gettext, lokalizačního systému, na který spoléhají WordPress, Drupal a tisíce projektů v PHP a C. Gettext odděluje zdrojové řetězce, které píše vývojář, od překladů, které poskytuje překladatel, takže stejná kódová základna může mluvit desítkami jazyků, aniž by se dotkla jediného řádku PHP.

Představte si to jako kartu s receptem. Soubor .pot je prázdná karta s políčky pro ingredience, ale bez množství. Soubor .po je karta vyplněná pro jedno konkrétní jídlo. Soubor .mo je laminovaná, strojově čitelná kopie, kterou kuchyně skutečně používá během servisu. Píšete na papírovou kartu; nikdy nečmárejte na laminovanou.

Soubor .pot: Hlavní šablona

Soubor .pot (Portable Object Template) obsahuje každý přeložitelný řetězec v šabloně nebo pluginu, přičemž překlady jsou ponechány prázdné. Je to hlavní seznam, který vývojáři dodávají, aby překladatelé přesně věděli, co je potřeba přeložit. Řádky msgstr jsou prázdné, protože ještě nebyl vybrán žádný jazyk.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr ""

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr ""

Všimněte si prázdného msgstr "". Soubor .pot je šablona, nikoli překlad. Zkopírujete jej jednou pro každý jazyk a vyplníte prázdná pole. Soubor .pot se zřídka upravuje ručně; je generován ze zdrojového kódu vždy, když se změní řetězce.

Soubor .po: Váš lidsky upravitelný překlad

Soubor .po (Portable Object) je kopie souboru .pot s vyplněnými řádky msgstr pro jeden jazyk. Toto je soubor, který skutečně upravují překladatelé a vývojáři. Je to prostý text, čitelný pro člověka a přátelský k řízení verzí.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr "In den Warenkorb"

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr "Ihre Bestellung wurde an %s versandt"

msgid je původní anglický zdrojový řetězec a nesmí se nikdy změnit. msgstr je váš překlad. %s je zástupný symbol, který musí zůstat v překladu nedotčený – jeho vynechání nebo přeřazení je nejčastější příčinou rozbitých rozvržení, což podrobně rozebíráme v článku jak překládat soubory PO bez narušení kódových proměnných.

Soubor .mo: Zkompilovaný binární soubor

Soubor .mo (Machine Object) je zkompilovaná binární verze vašeho .po. WordPress nedokáže efektivně číst soubory .po za běhu, takže místo toho načte předkompilovaný .mo. Otevření .mo v textovém editoru zobrazuje nečitelné bajty – je určen pro stroje, nikoli pro lidi.

Když WordPress zavolá load_textdomain() nebo load_theme_textdomain(), hledá soubor .mo, parsuje jeho binární hash tabulku a za běhu vymění každý msgid za odpovídající msgstr. Tento binární formát zrychluje vyhledávání i na webech s tisíci řetězci.

Jak spolu souvisí tyto tři soubory v pracovním postupu Gettext?

Tvoří jednosměrný pipeline: zdrojový kód se stane .pot, .pot se stane .po pro každý jazyk a každý .po se zkompiluje do .mo. Překlady vždy proudí jedním směrem.

Zde je kompletní životní cyklus v pořadí:

  1. Vývojář obalí řetězce určené pro uživatele do funkcí Gettext jako __() a _e() uvnitř zdrojového kódu PHP.
  2. Skenovací nástroj přečte zdrojový kód a vygeneruje šablonu .pot obsahující každý obalený řetězec.
  3. Překladatel zkopíruje .pot do jazykově specifického .po (například de_DE.po) a vyplní každý msgstr.
  4. Dokončený .po je zkompilován do binárního .mo.
  5. WordPress za běhu načte .mo a zobrazí přeložený web.

Když vývojář později přidá nové řetězce, soubor .pot se znovu vygeneruje, nové položky se sloučí do každého existujícího .po (zachovávajíc staré překlady), překladatel doplní mezery a soubor .po je znovu zkompilován do .mo. Cyklus se opakuje po celou dobu životnosti projektu.

Klíčový poznatek: upravujete .po, poté kompilujete do .mo. Nikdy neupravujete .mo přímo a nikdy nepřekládáte uvnitř .pot. Pokud chcete hlubší a komplexní pohled, kompletní průvodce lokalizací WordPressu provede celým procesem s příklady.

Konvence pojmenování a kde se soubory nacházejí

WordPress je přísný ohledně názvů souborů. Pokud pojmenování uděláte špatně, váš perfektně přeložený soubor .mo bude jednoduše ignorován, protože WordPress hledá přesnou shodu na základě textové domény a lokality.

Vzor pojmenování pro překlady šablon a pluginů je:

# Pattern: textdomain-locale.po / .mo
twentytwentyfour-de_DE.po      # German (Germany) translation
twentytwentyfour-de_DE.mo      # compiled binary WordPress loads
twentytwentyfour-fr_FR.po      # French (France)
twentytwentyfour.pot           # template, no locale suffix

textdomain odpovídá řetězci předanému jako druhý argument funkcím Gettext, jako je __( 'Add to Cart', 'twentytwentyfour' ). locale je kód lokality WordPressu, například de_DE, fr_FR nebo pt_BR. Šablona .pot nemá příponu lokality, protože je jazykově neutrální.

Umístění je stejně důležité jako pojmenování. WordPress prohledává několik předvídatelných cest:

  • Překlady šablon se dodávají ve vlastní složce šablony wp-content/themes/your-theme/languages/.
  • Překlady pluginů se dodávají ve složce wp-content/plugins/your-plugin/languages/.
  • Překlady z translate.wordpress.org a uživatelské přepsání se ukládají do globálních adresářů wp-content/languages/themes/ a wp-content/languages/plugins/, které mají prioritu a přežijí aktualizace.

Pokud umístíte správně pojmenovaný soubor de_DE.mo do správné složky, němečtí návštěvníci uvidí němčinu. Pokud ho umístíte o jednu složku hlouběji, nebo špatně napíšete textovou doménu, WordPress se tiše vrátí k angličtině bez chybové zprávy. Pokud se vaše překlady nezobrazují, je obvyklým viníkem nesoulad v názvu nebo cestě, a průvodce řešením problémů s chybějícími překlady pokrývá všechny běžné příčiny.

Proč byste nikdy neměli přímo upravovat soubor .mo

Protože .mo je zkompilovaný binární soubor, neexistuje bezpečný způsob, jak ho ručně upravovat – a jakákoli změna, kterou vynutíte, bude přepsána při příští rekompilaci souboru .po. Soubor .po je zdrojem pravdy; .mo je dočasný artefakt sestavení.

Toto jediné pravidlo vysvětluje obrovský podíl dotazů podpory „můj překlad se změnil, ale web se neaktualizoval“. Někdo upraví řetězec, uloží .po a zapomene rekompilovat .mo. WordPress stále načítá starý binární soubor, takže se nové znění nikdy neobjeví. Oprava je vždy: upravit .po, rekompilovat na .mo, znovu načíst.

Existuje druhý důvod, proč je toto pravidlo důležité: soubory .mo nejsou přátelské k porovnávání (diff) v řízení verzí. Protože jsou binární, malá změna znění vytvoří v historii Gitu nečitelný binární blok, který žádný recenzent nemůže přečíst. Udržování .po jako sledovaného zdroje pravdy a zacházení s .mo jako s generovaným artefaktem udržuje váš repozitář přehledný a vaše překlady auditovatelné.

Ruční provádění těchto kroků napříč desítkami jazyků je únavné a náchylné k chybám. Zde cloudový pracovní postup šetří skutečný čas. Nástroje jako SimplePoTranslate přeloží vaše řetězce .po a vrátí jeden ZIP obsahující odpovídající .po a .mo dohromady – již zkompilované, správně pojmenované, připravené k vložení do wp-content/languages/. Nic není potřeba kompilovat ručně a nehrozí, že by soubor .mo byl zastaralý.

Také používá Syntax Locking, který před překladem zmrazí každý zástupný symbol, jako je %s, %1$s a {name}, plus HTML tagy. Vaše proměnné zůstanou nedotčené, takže nikdy nedodáte soubor .mo, který by rozbil rozvržení. A protože běží zcela v cloudu, nezatěžuje váš web žádný další plugin – nahrajete soubor a stáhnete hotové, zkompilované překlady.

Shrnutí

Jakmile se rozdíl mezi soubory .po vs .mo objasní, celý překladový systém WordPressu přestane působit záhadně. .pot je šablona vývojáře, .po je upravitelná pracovní kopie překladatele a .mo je zkompilovaný binární soubor, který WordPress skutečně zobrazuje návštěvníkům. Překlady proudí jedním směrem – šablona na .po na .mo – a ručně upravujete pouze ten prostřední.

Zapamatujte si tři pravidla, která zabrání devadesáti procentům potíží s překladem: nikdy nepřekládejte uvnitř .pot, vždy rekompilujte .mo po úpravě .po a přesně dodržujte pojmenování textdomain-locale. Dodržujte je a vaše přeložené řetězce se zobrazí pokaždé.

Jste připraveni přestat se trápit s ruční kompilací a pojmenováním překladových souborů? Vyzkoušejte SimplePoTranslate zdarma – není vyžadována kreditní karta. Nahrajte svůj .po nebo .pot a získejte hotový balíček .po + .mo zpět v bezplatné verzi během několika minut.

Související témata