Uživatelské jazykové překlady

Ú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.

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

    nonbrake
    Participant

    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

    #18335

    admin
    Keymaster
    Web

    Ano, 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/

    #18341

    nonbrake
    Participant

    Dobrý 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.

    #18343

    admin
    Keymaster
    Web

    Bude 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).

    #18350

    nonbrake
    Participant

    Add 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.

    #18352

    admin
    Keymaster
    Web

    Ad 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().

    #18354

    nonbrake
    Participant

    Ad 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ě?

    #18374

    admin
    Keymaster
    Web

    Na 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…

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

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

WordPress – novinky, návody a zajímavosti