Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Uživatelské jazykové překlady
Zvolené téma obsahuje celkem 7 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel admin a poslední změna je stará 10 let.
-
AutorPříspěvky
-
14. dubna 2014 (13:51) #18334
Jak by šly přidat do tématu vlastní jazykové soubory (něco jako uživatelské překlady). Nechci je dávat do normální tématových překladů, protože při aktualizaci tématu se přemažou (řešením je udělat child theme a pokaždé mergovat jazykové soubory, načíst pomocí load_child_theme_textdomain, ale.. viz dále) Nevíte jak na to?
Standardně se přidávají třeba takto:
load_theme_textdomain( 'nazevtematu', get_template_directory() . '/languages' );
Ale já bych potřeboval přidat do stejného tématu ještě další jazykové soubory a načíst je, nevíte jak na to? Díky
14. dubna 2014 (14:01) #18335Ano, jde to snadno pomocí filtru load_textdomain_mofile, takže lze lokalizační soubory šablony načítat i prostřednictvím pluginu, např. Čeština pro WordPress (konkrétní příklad).
Mimochodem, jazykové soubory nemusí být vůbec v adresáři se šablonou, ale stačí je nahrát do nezávislého adresáře wp-content/languages/themes/
14. dubna 2014 (17:21) #18341Dobrý den,
1) vím, že jazykové soubory stačí dát do dresáře wp-content/languages/themes/ , ale když změním ve function.php load_theme_texdomain na cokoliv jiného, tak se takový jazykový soubor vůbec nenačte (pojmenuji ho samozřejmě nově na nazevtematu-cs_CZ.mo). Je to třeba ještě někde jinde změnit? Používám jako výchozí twenty twelve, kterou si přetvořím k obrazu svému.2) Pokud chci přidat další jazykový soubor pomocí load_textdomain_mofile, tak se mi to nedaří, zkoušel jsem následující:
if (!function_exists('load_custom_text') ) { // for filter function load_custom_text( $mofile, $domain='' ) { //only do for the plugins/themes you want if (!in_array($domain, array('nazevtematu', 'nazevtematu2'))) return $mofile; $pathinfo = pathinfo($mofile); $custom_mofile = WP_CONTENT_DIR."/languages/" . $pathinfo["basename"]; if (file_exists($custom_mofile)) return ($custom_mofile); else return $mofile; } } add_filter ('load_textdomain_mofile','load_custom_text',10,2 );
Ale nefunguje mi to, prosím o radu.
14. dubna 2014 (21:32) #18343Bude tam asi nějaký jiný problém…
1) Pokud použijete funkci load_theme_textdomain(), tak by to mělo bez problémů fungovat. Pokud ale používáte šablonu Twenty Twelve a všechny její soubory a řetězce, tak je u nich definována textdomain “twentytwelve”. A pokud šablonu jen přejmenujete na “nazevsablony”, tento parametr voláte prostřednictvím funkce load_theme_textdomain() a chcete načítat “nazevsablony-cs_CZ.mo”, tak to fungovat nebude, protože všechny řetězce použité v šabloně mají textdomain “twentytwelve”.
2) Uvedený kód jsem zkoušel a bez problémů funguje. Problém ale bude patrně někde jinde (viz bod 1).
14. dubna 2014 (23:27) #18350Add 1) Máte pravdu, protože veškeré konstanty jsou definovány s řetězci twenty twelve např. takto:
<?php esc_attr_e('Skip to content', 'twentytwelve'); ?>
To mne ale netrápí, to bych chtěl zachovat, ale zajímá mne spíš bod 2.Add 2) Nefunguje mi to zřejmě z důvodu, že je textdomain stále twentytwelve, já tu funkci z bodu 2) načítám ve functions.php za funkcí:
function twentytwelve_setup() { load_theme_textdomain( 'twentytwelve', get_template_directory() . '/languages' ); }
Kde se načítá textdomain a pole array(‘nazevtematu’,..), vůbec neobsahuje “nazevtematu”.
Nevíte jak to vyřešit nebo elegantněji udělat?
Díky za rady.14. dubna 2014 (23:39) #18352Ad 2) Nejsem si jist, zda tomu dobře rozumím, ale load_theme_textdomain() musíte načítat hned po inicializaci šablony, tedy využít akci after_setup_theme. Stejnou akci využívá i funkce twentytwelve_setup().
15. dubna 2014 (11:34) #18354Ad 2) load_theme_textdomain() je načítána standardně (jen jsem neuváděl celé). Kam tedy umístit tu funkci pro načítání “mo” souboru (load_custom_text), umístil jsem ji ve functions.php pod load_theme_texdomain(), resp. pod
add_action( 'after_setup_theme', 'twentytwelve_setup' );
Pokud nadefinuji jazykovou konstantu třeba jako
<?php _e('Nextx', 'nazevtematu'); ?>
Udělám k tomu jazykový soubor
wp-content\languages\themes\nazevtematu-cs_CZ.mo
Tak to nefunguje. Co dělám špatně?
17. dubna 2014 (13:11) #18374Na pořadí té funkce v souboru functions.php by nemělo záležet, jde o filtr load_textdomain_mofile, který se spouští vždy při načítání příslušné lokalizace.
Není problém spíše s vytvořeným jazykovým souborem? Jakým způsobem ho generujete a kompilujete? Zkuste mi poslat emailem přístupy nebo šablonu + jazykové soubory, mohu se na to zkusit podívat…
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.