Úvodní stránka › Fórum podpory WordPressu › Čeština pro WordPress › Problém s překladem
Štítky: Gettext, Lokalizace
Zvolené téma obsahuje celkem 2 odpovědi. Do diskuze (2 účastníci) se naposledy zapojil uživatel Lukenzi a poslední změna je stará 13 let.
-
AutorPříspěvky
-
16. března 2011 (3:42) #916
Zdravím,
protože jsem se docela zasekl u řešení jednoho problému, zkusím se zeptat tady jestli nemá někdo nějaký nápad nebo mně nemůže alespoň nějak “nakopnout” :)
Problém je takový:
Mám šablonu vzhledu, do které bych nerad jakkoliv zasahoval (není to můj výtvor). Daná šablona sice používá funkce _e() a __(), ale problém je v identifikátoru přeložených řetězců. Používá totiž dva druhy a v docela dost případech dokonce nepoužívá žádný.
Příklad možností použití:
<?php _e('text', 'id_prekladu'); ?>
<?php _e('text', 'id_prekladu_2'); ?>
<?php _e('text'); ?>První dvě možnosti mi starosti nedělají, to jsem vyřešil použitím dvou funkcí pro načtení překladových souborů jdoucí za sebou (WP to vezme bez problémů):
<?php load_theme_textdomain( 'id_prekladu', TEMPLATEPATH); ?>
<?php load_theme_textdomain( 'id_prekladu_2', TEMPLATEPATH); ?>Problém je, ale v třetí možnosti, kdy WP (pokud není uveden identifikátor překladu)hledá text v *.mo souborech ve složce “wp-content/languages/” a nejde jej žádným způsobem přesvědčit ať použije *.mo soubor ve složce vzhledu (TEMPLATEPATH). Pokud takový text není přeložen již v základním překladu pro celý wordpress, nelze už pak žádným způsobem přeložit.
Zkoušel jsem X různých možností a prostě to nelze, mimochodem jsem narazil i na to, že pokud funkci “load_theme_textdomain” použiji bez identifikátoru překladu tak se vůbec nic nestane i když je v dokumentaci uvedeno, že je povinný…
Pokud má někdo nějaký nápad jak tohle vyřešit, bez zásahu do šablony, budu moc rád za pomoc.
16. března 2011 (8:20) #8047Bez uvedení identifikátoru (domény) se opravdu automaticky prohledává složka wp-content/languages, respektive se načítají soubory lokalizace WordPressu. Předpokládám, že jde o chybějící řetězce víceuživatelské verze? Protože jinak by mělo být všechno přeloženo?
Každopádně máš dvě možnosti:
1) Pokud je řetězců jen několik, tak si je můžeš sám definovat a ignorovat stávající lokalizaci, a to jednoduše pomocí filtru s názvem gettext.
// Změna textu "Nastavení zobrazených informací"... add_filter( 'gettext', 'separatista_nazev_zobrazeni', 10, 2 ); function separatista_nazev_zobrazeni( $translation, $original ) { if ( 'Screen Options' == $original ) { return 'Zobrazení'; } return $translation; }
Nebo máš druhou možnost (pokud chceš měnit hodně řetězců), a to použít filtr load_textdomain_mofile (nějaké podrobnosti a příklad najdeš třeba zde). To ale nedoporučuji, protože tím zcela odstavíš stávající český překlad a budeš muset dělat pravidelně svůj vlastní :-)
O těchto i dalších možnostech úprav lokalizace připravujeme podrobný článek, ale zatím nebyl čas na dokončení. Každopádně WordPress je i v těchto případech velmi flexibilní nástroj a lze jednoduše upravit téměř cokoliv…
16. března 2011 (10:10) #8048nn takhle zmršený kód je v jedné šabloně, která se mi dostala do ruk. S wp a jeho překladem to nemá co dělat.
1) jj o tomhle způsobu vím, ale právě tomu jsem se chtěl vyhnout, protože těch řetězců tam je asi 40-50…
2) o tomhle jsem nevěděl, díky za tip, i když pro můj problém je to nepoužitelné
Každopádně nechápu, proč když už funkce “load_theme_textdomain” pracuje jak s tak i bez identifikátoru není upravena tak, aby když se identifikátor neuvede hledala mo soubor tam kde určím pomocí druhého parametru (v tomto případě v TEMPLATEPATH). Koukal jsem na to a úprava té funkce je naprosto jednoduchá a vyřešili by se tím tento problém.
btw jak jsem psal, že funguje i bez toho povinného identifikátoru tak pokud ji použiji takhle:
<?php load_theme_textdomain(TEMPLATEPATH); ?>
tak proti tomu nic nenamítá a určená cesta k souboru s překladem se stane identifikátorem překladu. Podle mně je to bug, povinný by mněl být identifikátor (i když ani ten by nemusel) a nepovinná by mněla být cesta (pokud by nebyla uvedena hledalo by se třeba v aktuální složce se souborem functions.php). Tím by se najednou vyřešili úplně všechny problémy.
Samozřejmně děkuji za reakci, trochu mně to nakoplo a dám vědět jak jsem to vyřešil :)
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.