Problém s překladem pluginu

Úvodní stránka Fórum podpory WordPressu Problémy s WordPressem Problém s překladem pluginu

Zvolené téma obsahuje celkem 5 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel  admin a poslední změna je stará 9 let, 6 měsíců.

Aktuálně je na stránce zobrazeno 6 příspěvků - 1. až 6. (z celkem 6)
  • Autor
    Příspěvky
  • #20231

    TomasE
    Participant

    Dobrý den,
    pokouším se pro vlastní potřebu přeložit (komerční) plugin cj-membership-modules. Všechno vypadá krásně a jednoduše – plugin má podporu pro překlady (složku languages se soubory .po a .mo), překlad jsem vytvořil pomocí poeditu s přispěním návodu , ale překlad bohužel funguje jen částečně.

    Jen pro příklad uvedu krátký kousek kódu ve kterém právě překlad nefunguje:

    array(
    		'type' => 'info-full',
    		'id' => 'modalbox_info',
    		'label' => '',
    		'info' => '',
    		'suffix' => '',
    		'prefix' => '',
    		'default' => __('Here you can manage login and registration forms that are displayed in a Modal box.', 'cjfm'),
    		'options' => '', 

    Sekvence “Here you can…..” je přitom rozhodně přeložená, což jsem ověřoval v Poeditu a pak i pomocí pluginu CodeStyling Localization.

    Napadá někoho, kde by mohl být problém?

    P.S.: Autor pluginu v dokumentaci píše, že plugin je pro překlady zcela optimalizovaný.

    Díky za případné nápady!

    #20232

    admin
    Keymaster
    Web

    Když vytváříte překlad pomocí pluginu Codestyling Localization, tak nezapomenete kliknout i na tlačítko “vytvořit MO”? Zkontroloval jste, jestli jsou lokalizované soubory uložené správně na FTP (správný název a adresář)? Má řetězec “Here you can…” zcela stejnou originální podobu v lokalizačním souboru i ve zdrojovém kódu?

    #20233

    TomasE
    Participant

    Soubor .mo mám vytvořen, web testuji lokálně, ale zkoušel jsem to i na testovacím hostingu, kam jsem plugin nakopíroval včetně překladů.
    Výsledek pořád stejný…
    Ty soubory budou asi v pořádku, protože některé přeložené řetězce se zobrazují správně. Ve zdrojových souborech jsem taky rozdíl nenašel, u funkčních i nefunkčních řetězců je “textdomain” nastaveno na “cjfm”.
    Je to prostě nějaká záhada….
    Díky za rady, Tomáš E.

    #20237

    admin
    Keymaster
    Web

    Tam bude určitě jen nějaká hloupá drobnost, ale zrovna mě nic nenapadá… Pokud se zobrazuje přeložené jen něco, tak to znamená, že základní funkce se načítají bez problémů. Zkoušel jste celý překlad přeskenovat pomocí pluginu Codestyling Localization? Respektive, jak jste překlad začal a lokalizační soubory vytvořil? Můžete mi poslat kompletní balíček s pluginem a lokalizovanými soubory, abych to mohl vyzkoušet?

    #20238

    TomasE
    Participant

    Překládat jsem začal pomocí Poeditu a tím jsem vygeneroval i .mo soubor.
    Přegenerovat soubory pomocí Codestyling Localization jsem také zkoušel, je to fakt záhada…
    Na e-mail Vám posílám tedy celou tu záhadu.
    Díky za ochotu!

    #20521

    admin
    Keymaster
    Web

    Konečně jsem se k tomu dostal a problém je přímo v používaném pluginu Front-end Membership Modules. Správně sice načítá lokalizační soubory pluginu (soubor index.php):

    add_action( 'plugins_loaded', 'cjfm_load_textdomain' );
    function cjfm_load_textdomain() {
    	$lang_path = dirname( plugin_basename( __FILE__ ) ) . '/languages/';
    	load_plugin_textdomain( 'cjfm', false, $lang_path );
    }

    Používá funkci load_plugin_textdomain(), která má být načítána pomocí akce plugins_loaded. Ale bohužel také ve stejném souboru načítá další .php soubory, které nejsou moc napojeny na API WordPressu, např.

    require_once('item_setup.php');
    require_once(sprintf('%s/framework/framework.php', dirname(__FILE__)));

    A tam už je pak problém. Soubory totiž následně načítají další soubory a obsahují i řetězce a funkce pro jejich překlad, ale překlad bohužel není aplikován, protože je vše zpracováno v podobě samostatného PHP kódu (bez využití API), takže je vlastně všechno načteno ještě dříve než dojde k realizaci funkce load_plugin_textdomain() v rámci akce plugins_loaded (až po načtení souborů pluginu). Takže se nakonec část lokalizace načte (pokud využívá správně API) nebo vůbec nenačte (čisté PHP bez napojení na WordPress API).

    Nahlásil bych to asi autorovi pluginu, aby to opravil, zatím je možná rychlá oprava tak, že budete na začátku souboru index.php načítat lokalizační soubory bez akce plugins_loaded (není to správný způsob):

    $lang_path = dirname( plugin_basename( __FILE__ ) ) . '/languages/';
    load_plugin_textdomain( 'cjfm', false, $lang_path );

    Tím ale zaručíte, že se bude lokalizace načítat všude, tedy i mimo WordPress API.

Aktuálně je na stránce zobrazeno 6 příspěvků - 1. až 6. (z celkem 6)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti