Ú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ů.
-
AutorPříspěvky
-
7. září 2014 (12:49) #20231
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!
7. září 2014 (13:50) #20232Když 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?
7. září 2014 (14:11) #20233Soubor .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.7. září 2014 (20:24) #20237Tam 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?
7. září 2014 (20:45) #20238Př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!1. října 2014 (14:45) #20521Koneč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 akceplugins_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 akceplugins_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.
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.