Jak přeložit texty ve WordPressu

WordPress je přeložený do češtiny, ale není to 100% překlad. Určitě najdete místa, která jsou anglicky. V případě šablon a pluginů je to spíše pravidlem – pouze některé jsou přeloženy. V tomto textu najdete vysvětlení, jak překlady fungují a jakými způsoby si nepřeložené texty přeložit nebo překlad opravit, pokud třeba obsahuje překlep nebo nevhodné slovo.

Technické okolnosti: Jak to funguje – .po a .mo

Překlady pro WordPress (a obecně pro aplikace vytvořené v PHP) jsou uloženy v textových souborech .po, které se zkompilují (typicky programem poEdit) do binární podoby .mo. Ta se načítá pomocí funkcí PHP (tedy i ve WordPressu). Soubory .pot jsou šablony a obsahují fráze jednoho jazyka, obvykle angličtiny, připravené k překladu. Stránka, která má být po svém načtení v prohlížeči přeložena, potřebuje načíst soubory .mo (k úpravě překladu potřebujeme soubory .po).

Textová doména (text domain) je identifikátor množiny překladů. Tato množina bývá uložena v jednom souboru, ale není to podmínka, může být ve více. Například samotný WordPress používá identifikátor default, takže když v kódu chci použít názvy měsíců v roce a chci mít jistotu, že je Němec uvidí německy a Francouz francouzsky, vložím je takto: _e('Januar', 'default'). Jako základ je anglický název. Pokud běží WordPress v němčině, pak hledá překlad slova “Januar” v sadě německých překladů a zobrazí nalezený text. Pokud se nenajde, použije anglický – pak se text zobrazí nepřeloženě. Toto je obecný princip překladů.

Každá šablona nebo plugin definuje svou textovou doménu, tedy vytváří množinu svých textů k překladu. Aby mohl text projít překladem, musí být v kódu vložen prostřednictvím některé z funkcí. Pokud ho tam programátor napíše přímo, bez některé z těchto funkcí, aplikaci nelze snadno přeložit. Také překlady nepatřící do žádné textové domény nelze spravovat, zachytit. Tohle všechno jsou chyby, které lze občas v kódu najít. Výsledkem je nepřeložený (nepřeložitelný) řetězec.

Cesty k překladovým souborům v instalaci WordPressu

Skoro každý plugin nebo šablona si ukládá v adresáři languages překladové soubory, minimálně jejich šablonu .pot. Sem je umisťuje autor pluginu a s každou aktualizací se pochopitelně přepisují. Proto sem nemůžeme umisťovat upravené verze, protože bychom o ně přišli.

Upravené verze překladů se ukládají do adresáře wp-content/languages/, tam pak do plugins nebo themes. Teorie říká, že by to mělo být takto, ale klidně se může stát, že lajdák programátor tuto možnost ignoruje nebo se překlady načítají odjinud (setkal jsem se s tím, proto to píšu). To se dá zjistit čtením PHP kódu. Technicky vzato může programátor napsat kód jakkoliv a načítat překladové soubory odkudkoliv. Pokud se překlady nenačítají a měly by, pomůže asi jen analýza kódu a hledání chyby (tzn. co tam ten autor napsal a jak to vymyslel).

WooCommerce a výjimky

Některé texty mají jakýsi význam navíc – například popisky nákupních tlačítek ve WooCommerce mají marketingový význam a je zcela běžné, že je bude zákazník chtít změnit, třeba podle kontextu (přidat na tlačítko cenu produktu) nebo produktu (u každého na míru). Toto nelze řešit překladovým souborem. Tato úprava se provádí v kódu, kde je potřeba popsat podmínky a reakce na kontext. Nelze toho docílit vložením HTML nebo úpravu souboru šablony, WordPress používá tzv. hooky (háky), kterými lze ovlivňovat chování skoro všeho. Úprava pomocí hooku je velmi efektivní, zacílená na konkrétní detail a je perfektně přenositelná a udržitelná. To překlad v .po souboru není, dřív nebo později se v něm něco změní (podle toho jak programátoři program upravují, je třeba překlady aktualizovat).

Pro úpravu překladu nákupního tlačítka nebo klíčových pojmů, které jsou důležité pro návštěvníka, se často nepoužívají překladové soubory, ale upravuje se kód prostřednictvím hooků.

function rx_change_cart_button_text($default) {
 return 'Koupit'; // text na všech nákupních tlačítkách
}

add_filter( 'woocommerce_product_single_add_to_cart_text', 'rx_change_cart_button_text' ); // single product
add_filter( 'woocommerce_product_add_to_cart_text', 'rx_change_cart_button_text' ); // archive page

Špatné postupy: Co určitě nedělat

Obecně platí, že se nikdy nezasahuje do kódu a ani se nenahrávají soubory do adresářů wp-content/plugins a wp-content/themes k samotným pluginům nebo šablonám. Ale občas je potřeba přistupovat k řešení kreativně:

  • V případě šablony lze vytvořit podřízenou šablonu (child theme) a zkusit načíst překlady v ní.
  • Pokud dojde k extra výjimce, kdy je plugin blbě napsaný a nenačítá překlady odnikud kromě svého adresáře, pak nahrání překladů „přímo k němu“ řeší akutní situaci. Ale je třeba to dokumentovat a nahlásit chybu autorovi pluginu, protože aktualizace tyto úpravy přepíše a překlady zmizí.

Rozhodně nedoporučuji instalovat WPML nebo Polylang jen proto, že umí překládat. Setkal jsem se s tím a je to špatně. Oba dva slouží k vytvoření jazykových mutací webu, nikoliv k překladům textů – i když to dokážou.

Jak postupovat při překladu

Pomocí poEditu

Klasická cesta je, že si zkopírujete šablonu překladu .pot nebo existující překlad .po – ten bývá součástí pluginu nebo šablony. V editoru ho přeložíte nebo upravíte, uložíte jako .mo a oba soubory – správně pojmenované – uložíte do adresáře wp-content/languages/plugins nebo wp-content/languages/themes. Soubor s překladem se musí jmenovat podle textové domény: nazev-xx_YY, např. domena-cs_CZ.po, kód jazyka pro češtinu je cs_CZ, pro slovenštinu sk_SK.

poedit
Překladatelský editor poEdit

Někdy může být oříšek zjistit správnou textovou doménu. Měla by být uložena v hlavičce pluginu i šablony, nebo i překladového .po souboru, ale znáte lidi. Nejlepší je pak hledat v některé z php skriptů pluginu/šablony. Hledejte funkci __ nebo _e (ano, funkce se jmenuje „dvě podtržítka“ a „podtržítko e“). Textová doména je její poslední parametr. Zde je příklad:

<?php submit_button( __( 'Update settings', 'explanatory-dictionary' ), 'primary', 'submit', false ); ?>

Zde se k překladu nabízí text „Update settings“, doména se jmenuje „explanatory-dictionary“, soubor s překladem tedy bude explanatory-dictionary-cs_CZ.po.

Pomoci pluginu, třeba Loco Translate

Uspokojivé řešení je instalace pluginu Loco Translate. V podstatě dělá to, co popisuji výše – načítá .po soubory, nabídne vám možnost je přeložit, vytvoří z nich .mo soubory v adresáři wp-content/languages a zařídí jejich korektní načtení. To vše přímo ve WordPressu. Je to stejný postup, který můžete absolvovat ručně s využitím poEditu. Jen v případě Loco Translate pamatujte na vytvoření záloh svých překladů, protože když si dopřeložíte třeba známou šablonu nebo WooCommerce, lze očekávat, že aktualizace vám může překlady přepsat (ano, i v adresáři wp-content/languages/).

Nehledejte řešení na „jeden klik“ a ujasněte si, kterou část webu (administraci, výsledný web, konkrétní plugin, konkrétní šablona) překládáte. Hrozí zde riziko, že se vám jednotlivé překlady promíchají – tedy že budou z různých komponent a textových domén a vaše práce se bude špatně spravovat a udržovat.

Pomáháme rozvíjet české překlady

Když už něco překládáme, pak bychom to měli poskytnout i ostatním uživatelům. Takže své přeložené soubory .po zašlete autorovi pluginu nebo šablony. Velké projekty ale fungují na bázi automatických online překladových nástrojů. Ty jsou často založeny na softwaru GlotPress. Proto v případě, kdy potřebujete něco dopřeložit na svém systému, navrhuji tento postup:

  1. Zjistěte, jestli je požadovaný plugin/šablonu možné přeložit online na portálu wordpress.org. Mělo by se týkat velké části doplňků, nikoliv ale placených verzí šablon (možná ještě jejich neplacených verzí, pokud tam vůbec jsou). Na portál potřebujete mít registraci.
    1. Pokud ano, tak překládejte online přímo pro upstream, tedy přímo do projektu (trunk, development). Správce projektů pak překlady schválí nebo upraví a dostanou se do další verze produktu.
    2. Jakmile vše dopřeložíte, v dolní části si stáhněte překlady ve formátu .po a nebo .mo.
    3. Soubor .po si otevřete v poEditu, vytvořte z něj .mo soubor.
    4. Soubory .mo nahrajte ho do správného adresáře.
  2. Pokud nejde překládat online, pokračujte překladem podle bodů na začátku (poEdit, Loco). Pak zbývá otázka, jestli poslat offline přeložený soubor autorům pluginu nebo šablony. Placeným šablonám asi ne, ostatním bych je poslal.
Online platforma pro překládání WordPressu a jeho komponent
Online platforma pro překládání WordPressu a jeho komponent

Proč tak složitě?

Práci na překladu využijí ostatní uživatelé, má dvojitý dopad – ihned pro vás, v budoucnu pro ostatní. Je dobré přispívat ke komunitní práci. WordPress máme „zadarmo“, občas je férové kousek vrátit. A tohle je dobrá příležitost. Ostatní uživatelé to ocení.

Nemusíme se zabývat správou našeho překladu – teď je překlad ok a až bude aktualizace softwaru, bude tam ten samý překlad, protože jsme ho sami vložili. Je nepravděpodobné, že by ho v online nástroji někdo změnil nebo odmítl. Moc lidí se tomu nevěnuje, takže když tam nenapíšete naprosté nesmysly, správce (např. Pavel Hejn – Separatista nebo Vláďa Musílek a jiné známé persony) ho prostě schválí a budou rádi, že je zas další kus přeložený.

Ostatní velké open-source projekty používají stejný princip překladu (.po a .mo), ale jiné online nástroje. Program poEdit ale zůstává jako jistota a hlavní nástroj pro všechny. Ostatní známé platformy jsou třeba Transifex, Launchpad, Pootle.

8 komentářů u „Jak přeložit texty ve WordPressu“

  1. Zdravim,
    děkuji za vysvětlení pluginu. Nyní používám Loco translate, ale mám problém. Mám web, který by měl být vícejazyčný, tudíž možnost překlikávat mezi českým, anglickým a například německým jazykem. Dají se šablony a pluginy přeložit do více jazyku a následně publikovat do více jazyčných verzí?
    Předem děkuji

  2. Dobrý den, na našem webu, kde používáme šablonu Stockholm jsem také nainstaloval WooCommerce. Ale zápasím s tím, že popisky (Add to cart, Description, Reviews…) se mi ve WooCommerce stále zobrazují anglicky, přestože jsem je přeložil v Loco Translate. Na webu již používáme jazykové pluginy (WPBakery Visual Composer & qTranslate-X, qTranslate-X a qTranslate slug) pro různé jazykové mutace webu (CS, EN, FR…). Jak mám prosím správně nastavit propojení jazykového souboru s WooCommerce nebo šablonou Stockholm? Rád bych, že když jsem na české verzi webu jsem měl tlačítko „přidat do košíku“ a na anglické verzi webu bylo nadále „add to cart“. Jak mám prosím správně přeložit WooCommerce nebo Stockholm šablonu? Předem moc děkuji za radu a pomoc.

  3. Hezký den, prosím o radu. Jsem naprostý začátečník. Instalovala jsem Loco translate, píše mi, že je to z 86% procent přeloženo. Ale to, co potřebuju přeložit, se mi k přeložení v Loco.. vůbec nenabízí… jedná se konkrétně o Počet komentářů / Previous a Next Post, co je vždy pod článkem. Dělám něco špatně nebo kde to najdu k přeložení?? Děkuji moc za radu!

Napsat komentář