Problém s překladem

Štítky: ,

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.

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (z celkem 3)
  • Autor
    Příspěvky
  • #916

    Lukenzi
    Participant

    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.

    #8047

    admin
    Keymaster
    Web

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

    #8048

    Lukenzi
    Participant

    nn 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 :)

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (z celkem 3)

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

WordPress – novinky, návody a zajímavosti