Musilda.cz

Jak přeložit WordPress šablonu, nebo plugin

Jedna z nejčastějších otázek na diskuzích je, jak mám přeložit šablonu nebo plugin. Titulek dnešního článku je trochu zavádějící, protože mi si ukážeme nejen, jak takovou šablonu přeložit, ale i jak šablonu, kterou vytváříte, připravit pro překlady. Takže nejprve, jak přeložit šablonu, nebo plugin. 

Pro překlad šablony, je nejdůležitější zjistit, zda se ve složce šablony nachází složka, která je většinou pojmenovaná jako lang, nebo podobně a v ní soubory s koncovkou po a mo. Jedná se o soubory s překlady, které lze jednoduše editovat pomocí programu PoEdit, který najdete zde. Po stažení si otevřete po soubor, například en_US a uložte jej jako cs_CZ. Ve složce se vám uloží po soubor a zároveň i soubor cs_CZ.mo. A nyní již můžete překládat. Vždy vyberete frázi, kterou chcete přeložit a její českou variantu vepíšete do spodního řádku.

Úplně dole pak vidíte počet řetězců, i to kolik jich je nepřeložených.

Po přeložení všech řetězců se bude šablona zobrazovat kompletně v češtině. Pokud se vám některé části nepřeloží, je to protože nejsou použity funkce pro překlad. Budete muset soubory šablony otevřít v editoru a anglické části přeložit tam. Jak zjistit, zda je text připraven k překladu si ukážeme dále.

Textdomain

Pro nedostatek představivosti pro překlad, nazývám textdomain, prostě jazykovou doménou. Jedná se o definici domény, do které budou nahrány všechny přeložené řetězce z mo souboru, pro aktuální jazyk. V našem případě tedy cs_CZ.mo.

Definice jazykové domény:

add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
    load_theme_textdomain('simple', get_template_directory() . '/languages');
}

Tuto funkci vložte do functions.php a pomocí load_theme_textdomain() jste vytvořili jazykovou doménu ‚simple‘ a definovali cestu ke složce s překlady.

Funkce pro překlad řetězců

Titulek není zcela přesný, protože samotné tyto funkce řetězce nepřekládají, pouze je přidávají do seznamu frází k překladu. Celkem se jedná o 4 funkce

Funkce __()

Tato funkce vrací přeložený řetězec, pokud překlad existuje.
Použití:

$nadpis = '

‚.__(‚Nothing found‘,’simple‘).‘

';
echo $nadpis;

Uvnitř funkce je nejprve řetězec, který chceme nahradit přeloženým a následuje jazyková doména.
Důležité u této funkce je, že vrací řetězec jako proměnnou, pokud tedy napíšete:

__(‚Nothing found‘,’simple‘)

nebude to fungovat.

Z příkladu je také vidět, jak určit části šablony, které nejsou připraveny k přeložení:

Nothing found

Toto budete bohužel muset přeložit ručně.

Funkce _e()

Další funkce, která vrací přeložené řetězce. Rozdíl je v tom, že tato je rovnou vypíše.
Příklad:

 





Mám vyzkoušeno, že _e() nelze použít uvnitř jiných funkcí, toto vám nebude fungovat:

edit_comment_link(_e('(Edit)','simple'),'  ','')

Funkce _n()

Tato funkce vrací jednotné, nebo množné číslo podle zadané proměnné.

Zde příklad bude za tisíc slov:

$rating = '3';
$text = sprintf( _n( '1 star', '%s stars', $rating, 'simple' ), $rating );
echo $text;

$rating je číselná hodnota, 1 star je varianta pro jednotné číslo, %s stars je varianta pro množné číslo a simple je jazyková doména.
Díky tomu můžete definovat překlad i pro různé varianty textu, jako je například „1 komentář, 5 komentářů“ a podobně.

Funkce _x()

Poslední funkcí důležitou pro překlad, ale poměrně méně využívanou, je _x(). V případě, že máte jedno slovo, nebo frázi, kterou můžete ve stejném znění použít v různých případech – kontextech, stačí definovat jeden řetězec a k němu definovat kontexty, při který se bude používat.

Příklad:

echo 'Náš první '._x( 'pokus', 'první', 'simple' );
echo 'Náš druhý '._x( 'pokus', 'druhý', 'simple' );

Další funkce používané pro překlad

Pro úplnost zde uvedu i další funkce, které se pro výpis přeložených řetězců používají:

_ex(), _nx(), esc_attr__(), esc_attr_e(), esc_attr_x(), esc_html__(), esc_html_e(), esc_html_x(), _n_noop(), _nx_noop(), translate_nooped_plural()

Tyto funkce budou určitě obsahem jednoho z dalších článků.

Exit mobile version