WordPress návody

Jak fungují překlady pomocí .po .mo a využití pluginu Codestyling Localization

Autor příspěvku Martin H.

Drtivá většina dostupných šablon a pluginů pro WordPress samozřejmě jako hlavní (a často jediný) jazyk používá angličtinu. U některých si ale můžeme všimnout, že ve složce languages (ať už u pluginu nebo šablony) se nachází soubory se zkratkami různých jazyků a příponami .po.mo (pro češtinu cs_CZ.po, cs_CZ.mo) a čeština se pro ně automaticky aktivuje (pokud máme nastavený český jazyk v wp-config.php a pokud je ve složce příslušný soubor s českým překladem). V tomto článku si vysvětlíme základy práce s překlady v obecné rovině a poté si ukážeme práci s pluginem Codestyling Localization, který nám překládání značně zjednoduší.

GNU Gettext

WordPress pro veškeré překlady používá knihovnu vydanou pod GNU licencí v roce 1995 nazvanou GNU gettext. Pomocí gettextu jsou realizovány lokalizace WordPressu samotného i většiny pluginů a šablon. Gettext musí implementovat samotný tvůrce šablony nebo pluginu – ne všechny tedy tento způsob překladu podporují.

.po .mo soubory

Pro ukládání jednotlivých textových řetězců gettext používá soubory s příponami .po.mo, kde jsou uvedeny veškeré texty v původním i přeloženém jazyce. Soubory s příponou .po jsou snadno měnitelné v jakémkoliv textovém editoru (i když doporučuji nějaký specializovaný .po editor, např. Poedit – pro WordPress pluginy a šablony však budeme používat plugin zmíněný níže v textu). Soubory .mo jsou zkompilované .po do binární podoby. Skript následně využívá pouze soubor .mo, proto při jakékoliv změně musíte znovu kompilovat (to už v běžném textovém editoru neuděláte, je k tomu potřeba zmíněný Poedit nebo jiný nástroj).

Jak se gettext implementuje do kódu?

Vývojáře bude zajímat implementace gettextu do kódu vytvářeného díla. Základní použití je velmi jednoduché, stačí veškeré texty v kódu obalit do funkce gettext() nebo případně jejího aliasu _().

Příklad kódu určeného k překladu:
echo _("How are you?");
– toto je nejjednodušší zápis, variant je několik, jiné funkce se používají pro plurály, jiné pro kontextové překlady atd. – další možnosti najdete např. zde

Všechny texty označené gettext funkcí budou následně vyhledány v souboru .mo a nahrazeny jejich překladem. Gettext zvládá i plurály, různé překlady v různém kontextu a mnohem více, ale o všech možnostech si zde vykládat nebudeme, každý vývojář jistě angličtinu ovládá a bude schopný postupovat podle skvělého návodu, který sepsal Abdullah Abouzekry (zde: http://www.sitepoint.com/localizing-php-applications-1/).

poznámka: pro použití gettextu musíte mít tuto knihovnu na serveru nainstalovanou a aktivovanou v php.ini (windows: extension=php_gettext.dll, unix: extension=gettext.so)

Codestyling Localization

Práci s veškerými soubory překladu nám značně usnadní plugin Codestyling Localization. Po jeho instalaci můžete vidět v administraci v sekci Nástroje novou položku nazvanou Lokalizace. Když ji rozkliknete, zobrazí se vám výpis všech pluginů a šablon, které podporují překlady pomocí gettextu. Pro lepší orientaci si můžete vyfiltrovat např. pouze pluginy:

codestyling

Výhodou Codestyling Localization je, že za vás obstará opravdu všechno včetně kompilace do .mo souborů a automaticky jazyk aktivuje v případě, že ho máte zvolený ve wp-config.php. U každého překladatelného pluginu nebo šablony vidíte seznam aktuálně podporovaných jazyků, které můžete libovolně editovat, ale především si lze vytvořit nový jazyk (např. češtinu).

jazyky

Postup při tvorbě nového jazyka

  1. Nejprve klikněte na Přidat nový jazyk
  2. Ze seznamu vyberte jazyk (např. češtinu) a klikněte na Vytvořit PO
  3. Nyní máte prázdný .po soubor, do kterého je potřeba nahrát původní řetězce z kódu – tak učiníte tlačítkem Skenovat
    skenovat
  4. V dalším kroku už provedete samotný překlad. Stačí kliknout na tlačítko Editovat a můžete překládat. V textech lze poměrně snadno a rychle hledat pomocí textových políček nad řetězci. Odkazem Editovat můžete upravovat každý text naskenovaný přímo z kódu. Překlady se budou automaticky ukládat do .po souboru. Při editaci stačí kliknout na Save & Next a načte se vám rovnou další řetězec. V textech najdete i řetězce z administrace pluginu/šablony, které není tak nutné překládat, pokud se vám do toho nechce, protože je uživatelé stejně neuvidí. Někdy je ale obtížné takové texty rozlišit (pokud tvůrce nepoužívá textové domény pro odlišení různých skupin textů).
  5. Až budete mít přeloženo, bude nutné provést zmíněnou kompliaci do binárního formátu. Naštěstí stačí jednou kliknout na Vyvtořit MO a kompilace je hotová. Nezapomeňte kompilovat po každé změně překladu!
    vytvoritmo
  6. To by mělo být vše, samozřejmě je tu možnost, že narazíte na nějaké problémy – v takovém případě neváhejte napsat do poradny.
  7. Občas se stane, že některé texty tvůrce zapomene obalit do příslušných funkcí gettextu a řetězec se vůbec neobjeví v .po souboru k překladu. V takovém případě nezbývá než hledat v samotném kódu.

Jak uchovat překlad při aktualizaci pluginu/šablony?

Při aktualizaci pluginu však může dojít ke ztrátě překladu, což nikoho nepotěší. Nejjednodušší způsob, jak se tomu bránit, je uložení souborů *.po a *.mo do /wp-content/languages/, kam si od verze 3.8 umí WordPress sáhnout a přiřadit překlad.

Celá adresa složky pro pluginy: /wp-content/languages/plugins/textdomain-locale.mo
Celá adresa složky pro šablony: /wp-content/languages/themes/textdomain-locale.mo

Pokud máte z nějakého důvodu starší WordPress než 3.8, můžete využít plugin Translation Preserver, který pomáhá uchovat soubory překladu.

Alternativou k tomuto postupu je kontaktovat vývojáře pluginu a zaslat mu danou lokalizaci. Tímto pak přispějete celé komunitě a nemusíte se už žádných aktualizací obávat.

Tolik k překladům, doufám, že jste si udělali alespoň základní obrázek o tom, jak celá lokalizace ve WordPressu funguje. Komentáře uvítáme.

O autorovi

Martin H.

Hobby programátor, IT nadšenec a nepoučitelný kritik.

12 komentářů

  • Čauko, vďaka za dosť podrobné vysvetlenie ako to celé funguje, že existuje nejaká GNU Gettext knižnica kódu. Taktiež som v minulosti napísal návod ako prekladať wordpress pluginy a témy, no tou pre neznalých trochu ťažšou možnosťou, stiahnuť súbory na preklad a prekladať pomocou Poedit. Prekladaním pomocou pluginu Codestyling Localization je výhoda v tom že preklad máte vždy nahraný na webe/hostingu, teda ho hneď môžete rýchlo skontrolovať. Zoznam pluginov, ktoré som preložil je tu: http://patwist.com/preklady/

  • Bohužel je to pro běžného uživatele pořád příliš složité. A neřeší to aktualizace pluginu. Musí se dopřekládat znova a znova. To je lepší používat plugin v angličtině nebo zajistit překlad rovnou u autora přes lokalizační tým.

    • Neřekl bych, práce s tímto pluginem je velmi jednoduchá a intuitivní. Nicméně to je k debatě. Co se týče aktualizace pluginu/šablony a ztráty překladu, tak se tomu dá zabránit. Upřednostněním vybraného překladu z /wp-content/languages/ namísto ze složky pluginu. (Myslím, že od verze WP 3.8 si tam umí pluginy i šablony sáhnout). Případně pro starší verze WP jsem našel plugin, který to řeší a uchová překlad pluginu po aktualizaci. https://wordpress.org/plugins/translation-preserver/

    • V článku mi šlo především o to, aby i běžný uživatel alespoň přibližně tušil, jak celá problematika překladů funguje, nikoliv aby byl schopný implementovat sám překlady do kódu (pak by už nešlo o běžného uživatele). A překlad pomocí Codestyling Localization musí zvládnout i batole 🙂

      PS: Zachování překladu samozřejmě už v současné verzi WordPressu není problém (viz Tomášův komentář).

  • Rád bych si přeložil některé pluginy a to jsem úplný začátečník, ale bohužel jsem zatím nenašel Codestyling Localization.
    Máte nějaký tip kde hledat?

    • Codestyling Localization už bohužel skončil. Za jeho nástupce se dá považovat Loco Translate, případně bych doporučil program PoEdit.

    • Tak loco mi přeložil šablonu, ale dost špatně. Teď se mi v tom objevuje nějaká norština a nevím jak to vrátit zpět. To jsem si zase naběhl. 🙁

      • Překlad lze smazat na FTP, případně v nastavení pluginu je seznam všech překladů.

        • Děkuji, už jsem to vyřešil. Nakonec, ačkoli jsem začátečník, tak se mi v Loco podařilo manuálně přeložit 370 textů a uložit pro šablonu ColorMag Pro a vše funguje. Sice to není profi překlad, ale pro mou potřebu to stačí. A ve webu je to vidět taky, jsem spokojen. Trávil jsem u překladu jen cca 5 hodin 😀 po i mo mám uložené v PC.

  • Já mám jiný problém. Stále nechávám na webu dva pluginy neaktualizované právě kvůli překladům. Tyto dva pluginy v nových verzích mají nové funkce a můj překlad na ně nefunguje. Jakým způsobem aktualizuji anglický originál již přeložený český? nevím jak to vysvětlit – zkusím to jinak:

    Jde mi o to, když po aktualizaci pluginu použiji původní český překlad, nahradí se anglický originál, ve kterém jsou některé další (nové) fráze, které v tom původním českém nejsou.

    Je možné v POEDIT nejdříve naimportovat původní český překlad a „dopřeložit“ jen nové fráze? Přece nemusím kvůli aktualizaci pluginu znovu překládat všech 1200 vět…?

Zanechat komentář

Získejte více informací o WordPress!

Připojte se do našeho emailového seznamu a nenechte si ujít informace, novinky a návody ze světa WordPressu.

Úspěšně jste se zapsali do našeho newsletteru. Děkujeme!

Tomáš Cirkl

Tomáš Cirkl

WordPress specialista

Blog WPlama.cz píši už více než 5 let. O WordPress přednáším a pořádám školení. Pro své klienty vytvářím a spravuji webové stránky.