Polylang: pll_e() & pll__() su functions.php non funzionano

13 feb 2013, 12:34:42
Visualizzazioni: 16K
Voti: 2

Ho alcune funzioni in functions.php che stampano blocchi di HTML. Il problema riguarda il plugin Polylang, che utilizza le funzioni personalizzate pll_e() e pll__().

Queste funzionano correttamente in index.php su ogni tema, ma non funzionano bene in functions.php, che fondamentalmente mi restituisce sempre le stringhe nella lingua predefinita, anche se sono registrate correttamente nell'area di amministrazione.

Quindi i blocchi stampati in index.php usando le funzioni pll_ funzionano bene. Ma gli stessi blocchi stampati in functions.php, vengono sempre in inglese.

Ho postato questo problema sul forum ufficiale di supporto del plugin. Nessuna risposta ancora.

Qualcuno qui ha un'idea di cosa potrebbe essere?

Grazie mille!

1
Commenti

Ho utilizzato pll__ in functions.php senza alcun problema. Sei sicuro di aver fornito la traduzione richiesta usando pll_register_string o tramite la dashboard?

RRikesh RRikesh
29 apr 2013 09:31:13
Tutte le risposte alla domanda 1
3

Non ho esperienza con il plugin Polylang, ma penso sia sicuro assumere che questo abbia a che fare con l'ordine di caricamento del plugin Polylang e il file functions.php del tuo tema. Quando chiami una funzione nell'ambito globale (cioè non all'interno di un'altra funzione) di index.php o qualsiasi altro file template, verrà eseguita in una fase avanzata del processo di caricamento della pagina, dopo che WordPress è stato completamente inizializzato e persino dopo che il server ha iniziato a inviare la risposta al client.

Una funzione chiamata dall'ambito globale del file functions.php, tuttavia, verrà eseguita in un momento molto precedente. Durante un tipico caricamento di pagina, essenzialmente ciò che accade è che prima WordPress si configura, poi carica i plugin e infine il tema. Tuttavia, questo processo non è così lineare come potresti pensare, poiché alcuni plugin potrebbero dipendere da funzionalità che potrebbero non essere disponibili fino a quando WordPress non è completamente inizializzato, il tema è caricato o la risposta del server della pagina è iniziata. WordPress risolve questo problema utilizzando hook, che consentono a un plugin o a un tema di eseguire codice in determinate fasi durante il processo di caricamento.

Per rendere una risposta lunga breve ancora più lunga, quello che devi fare è assicurarti di non chiamare pll_e() o pll__() finché non sei certo che il plugin Polylang sia pronto. Questo può essere determinato guardando il suo codice sorgente (o forse la sua documentazione), ma immagino che agganciarsi all'hook init sarà sufficiente. Le funzioni chiamate nell'ambito globale di functions.php verranno eseguite prima dell'hook init, ma aggiungendo un hook init puoi fare in modo che una funzione venga eseguita in una fase successiva. Ecco come:

function my_setup() {
    global $some_var;
    $some_var = pll__('Una stringa che necessita di localizzazione', 'localization_domain'); // Questo presuppone che questa funzione si comporti in modo analogo a __() 

    pll_e("Stampiamo semplicemente questo, da qualche parte", 'localization_domain');
}
add_action('init', 'my_setup');
13 feb 2013 13:11:10
Commenti

No... non funziona... :( Non so cosa fare!

Lightworker Lightworker
14 feb 2013 11:25:11

Cosa hai provato? Hai usato altri hook oltre a init? Inoltre, spero che tu non abbia semplicemente copiato/incollato il mio codice perché conteneva un errore. :)

Simon Simon
14 feb 2013 12:52:25

Ho dato un'occhiata a Polylang e pll__($string) è semplicemente un wrapper di __($string, 'pll_string') che è integrato in WordPress. Tuttavia, il plugin aggiunge filtri a override_load_textdomain, gettext e gettext_with_context. Carica anche il suo textdomain sugli hook wp, login_init, admin_init quindi probabilmente le funzioni sarebbero disponibili dopo uno di questi. Inoltre, una volta completato il setup, viene attivato pll_language_defined che potrebbe valere la pena esaminare. In generale, il mio miglior consiglio è dare un'occhiata al codice sorgente di Polylang per capire come funziona.

Simon Simon
14 feb 2013 13:02:36