Come tradurre (localizzare) un tema WordPress

Come tradurre (localizzare) un tema WordPress

Hai appena installato il tema dei tuoi sogni sul blog WordPress che gestisci con tanto amore e… ed è tutto in inglese, damn! Che delusione…

Ma non ti preoccupare, ora ti mostro come tradurre (a mano) tutto il tema per avere un risultato impeccabile.

Prenderò come esempio per questo articolo il tema Nova, un bellissimo tema professionale di Elegant Themes, ma purtroppo fornito senza traduzione in italiano.

1. Includere la cartella di localizzazione

Per prima cosa scarica sul tuo computer via FTP l’intera cartella del tuo tema, solitamente all’indirizzo wp-content/themes/nome-tema/.  Fai una copia di backup per sicurezza. A questo punto, controlla se esiste la cartella lang all’interno della cartella del tuo tema, che è quella adibita alla localizzazione del tema. Se non c’è, creala appena dentro la cartella del tema. Dovresti ottenere questo: ./nome-tema/lang/ .

Ora devi dire a WordPress qual è l’indirizzo dove deve cercare i file per la localizzazione del tema, che hanno estensione .po e .mo (in realtà WordPress usa solo il file .mo, mentre a te serve il file .po). Per farlo, aggiungi all’interno del file functions.php (presente nella cartella del tema) il seguente codice prima della chiusura del tag php ?> :

[php]load_theme_textdomain( ‘nome-tema’, TEMPLATEPATH.’/lang’ );[/php]

Cambia nome-tema con il nome del tema, in questo caso scriverò Nova.

2. Prepara il tema alla localizzazione

Questa è la parte più noiosa e lunga di tutto il processo di traduzione.

Per poter localizzare correttamente un tema, WordPress ha bisogno di codici ben precisi, e non tutti i temi (soprattutto quelli gratuiti) ne sono dotati. Altri, hanno questi codici ma solo in parte, quindi il tema sarà localizzato ad esempio al 50%, la restante parte rimarrà in lingua originale (che oscenità).

Per cui, armati di pazienza e comincia a preparare il tema. Devi controllare tutti i file del tema scrupolosamente.

Modifica le echo

Al posto di usare la funzione echo per “stampare a video” del testo …

[php]<?php echo ‘Qualsiasi stringa’; ?>[/php]

usa la funzione _e(‘ ‘):

[php]<?php _e(‘Qualsiasi stringa’,’nome-tema’); ?>[/php]

Modifica le stringhe mantenendo la echo

Se vuoi mantenere la funzione echo per “stampare” a video del testo …

[php]<?php echo ‘Qualsiasi stringa’; ?>[/php]

usa la funzione __(‘ ‘):

[php]<?php echo __( ‘Qualsiasi stringa’,’nome-tema’); ?>[/php]

Modifica il testo HTML

Hai del testo HTML semplice?

[php]Qualsiasi testo[/php]

usa la funzione _e(‘ ‘):

[php]<?php echo _e( ‘Qualsiasi testo’,’nome-tema’); ?>[/php]

Ricordati di modificare sempre il nome-tema con il nome del tema da localizzare, nel mio caso scriverò sempre Nova.

3. Crea i file .po e .mo

Una volta che hai preparato il tema per la localizzazione, non devi fare altro che creare i file contenenti la traduzione del tema.

Scarica ed installa il programma gratuito poedit.

Apri il programma e clicca su File > Nuovo catalogo >. Inserisci nel campo Nome e versione del progetto il nome del tema, nel mio caso Nova.

Volendo puoi anche inserire tutte le altre informazioni, ma non sono indispensabili.

Nuovo progetto

Ora devi inserire il path relativo dei file che vuoi tradurre. Assumendo che i file .po e .mo che andrai a generare, si troveranno nella cartella ./nome-tema/lang/, i file da tradurre si trovano nella cartella superiore, quindi il path relativo è ../ (i due punti indicano la cartella superiore).

Nella sezione Percorsi sorgente, nel campo Percorso, premendo il pulsante evidenziato nell’immagine, inserisci il percorso relativo.

Inserisci il percorso relativo

Nella sezione Parole chiave, devi inserire il prefisso di tutte le funzioni che sono state utilizzate per la localizzazione. Possono essere anche diversi da __(‘ ‘) e _e(‘ ‘), varia da tema a tema. Ad esempio, in Nova trovo anche le funzioni esc_html_e(‘ ‘) e esc_attr__(‘ ‘) .

Io inserirò: __, _e, esc_html_e, esc_attr__ .

Clicca sul pulsante Ok, e salva il file con il nome it_IT nella cartella lang del tema. Verranno creati i file it_IT.po e it_IT.mo. Il nome it_IT serve per indicare che la traduzione sarà in italiano. Se volessi cambiare lingua, ad esempio in spagnolo, dovrai usare es_ES. In questo articolo mostro i codici delle lingue più comuni.

Ho trovato 41 stringhe pronte da tradurre 🙂

Stringhe da tradurre

Premi sul pulsante Ok e ti troverai di fronte a tutte le stringhe che potrai tradurre.

Poedit

A sinistra ci sono le stringhe nella lingua originale, a destra quelle tradotte o che tradurrai, come puoi vedere al punto (1). Selezionando una stringa, questa comparirà nel punto (2), e potrai tradurla nel punto (3).

Non devi “fare altro” che tradurre tutte le stringhe e alla fine, salvare. In automatico, Poedit aggiornerà i file .po e .mo. Ora, trasferisci l’intera cartella del tema (oppure tutti i file che hai modificato e creato) in wp-content/themes/ della tua installazione di WordPress online, sempre via FTP. Sovrascrivi tutto, non è un metodo pulito ma è pur sempre veloce e funzionale 😉

4. Modifica la localizzazione di WordPress

L’ultimo passo è la modifica della lingua predefinita di WordPress, che poi andrà ad influire anche sulla lingua selezionata per il tema.

Scarica via FTP il file wp-config.php che si trova nella root della tua installazione di WordPress. Fanne una copia di backup.

Apri questo file con un normale editor di testo ed aggiungi a questo codice:

[php]define (‘WPLANG’, ”);[/php]

la lingua predefinita di WordPress, per l’italiano inserisci it_IT, ottenendo:

[php]define (‘WPLANG’, ‘it_IT’);[/php]

Salva e carica il file nella root dell’installazione di WordPress online e sovrascrivi il file precedente.

Et voilà, dopo tanto lavoro, il tuo tema è finalmente tradotto e localizzato nella lingua che hai scelto!

5. Non mi localizza alcune parti

Sei Eri tutto bello felice del tuo lavoro ma il tema non è ancora completamente localizzato?

Per prima cosa, controlla bene i file del tema. Dagli una seconda passata, controlla bene riga per riga, a volte il testo viene inserito nel tema utilizzando il codice php nelle maniere più improbabili.

Ancora niente?

Magari è il testo prodotto da un plugin e non dal tema! Assicuratene! Se è “colpa” del plugin, leggi come localizzare un plugin.

Di nuovo?

Ma sta’ a vedere che… è un testo prodotto da WordPress e non dal tema. In questo caso, leggi come localizzare WordPress.

… … … e adesso basta però 🙂

6. Ho inserito delle nuove stringhe nel tema, come le traduco?

Innanzitutto, l’hai inserita pronta per la localizzazione ed in lingua originale (solitamente in inglese), vero? 🙂

Accertati di aver utilizzato la funzione __(‘ ‘) oppure _e(‘ ‘).

Dopodichè, scarica la cartella del tema come hai fatto al punto 2 e salvane una copia di backup. Apri il file .po relativo alla lingua che vuoi modificare, ad esempio ./nome-tema/lang/it_IT.po .

Clicca sul pulsante Aggiorna, e vedrai magicamente comparire le nuove stringhe (e scomparire quelle che non ci sono più se le hai eliminate). Poi traduci, salva e carica anche solo i file di localizzazione it_IT.po e it_IT.mo.

Goditi il frutto del tuo lavoro!

VUOI CREARE IL TUO SITO O BLOG WORDPRESS?

Scegli uno tra i migliori hosting per WordPress

HOSTING

Scegli uno tra i migliori hosting per WordPress

Hosting

Scegli uno tra i migliori temi WordPress professionali

GRAFICA

Scegli uno tra i migliori temi WordPress professionali

Grafica

Guide e risorse per gestire il sito WordPress a 360°

GESTIONE

Guide e risorse per gestire il sito WordPress a 360°

Gestione
  
con le dita sempre in costante, frenetico movimento sulla tastiera… vengo spesso trascinato e catturato “in rete” per colpa delle mille idee che mi girano per la testa (prima o poi troverò quella giusta)… dal futuro incerto (nonostante una laurea, e chi non lo è?..siamo in tanti!) .. credo fortemente nella condivisione della conoscenza!
22 Commenti
  • Grazie per tutte le informazioni che condividi, ho scoperto da poco il tuo sito e lo trovo illuminante.

    Ho un problema con la customizzazione del more link (per tradurre il testo del link da “more” a, per esempio, “altro”) di un tema themeforest. In functions.php se vado a sostituire il testo, rimane il link “more”… il codice PHP è il seguente (sostituisco le parentesi…)

    function more_link() {
    global $post;
    if (strpos($post->post_content, ‘[!–more –]’)) :
    $more_link = ‘[p class=”moreLink”][a href=”‘.get_permalink().'” title=”‘.get_the_title().'”]’;
    $more_link .= ‘[span]altro[/span]’;
    $more_link .= ‘[/a][/p]’;
    echo $more_link;
    endif;
    }

    • Roberto Iacono

      Ciao dTeo,
      probabilmente non è quello il codice che devi modificare. Se hai cambiato more in altro e a video non si vede altro, prova a cancellare la cache del browser. Se non si vede ancora vuol dire che non è quello il codice.

  • Ciao Roberto, ho trovato il tuo articolo davvero interessante, dopo un lungo peregrinare sul web finalmente qualcuno in grado di affrontare l’argomento in modo semplice e chiaro. Mi mancano però dei passaggi (per mie mancanze, non tue) e sono ste fantomatiche funzioni. Nella documentazione del mio tema (Themeforest – Equilibrium) sta scritto:

    «The theme doesn’t contain the .pot, .po, or .mo files, but all the text that needs to be translated is properly wrapped in the following translation functions: __, _e, _x, and _n, so you can easily translate the theme using a tool like poEdit.»

    E va bene, i file .po e .mo gli ho crearti, quello tutto sommato è facile, ma per uno come me che di programmazione non ne capisce un’acca il problema sono le funzioni. Dove sono, quante sono, cosa devo fare con __, _e, _x, and _n? e soprattutto devo usarle tutte, una, tre, cosa? In quali file del tema sono contenuti?

    • Roberto Iacono

      Ciao Roberto 🙂
      capisco il tuo dubbio, praticamente devi trovare le funzioni che generano il testo in inglese, per farlo ti consiglio di leggere https://www.robertoiacono.it/come-dove-modificare-wordpress/, così riuscirai a capire come fare a trovare le stringhe di testo.

      Una volta trovate, leggi attentamente questo post alla sezione “Modifica le echo” e “Modifica il testo HTML”, ed utilizza i metodi che ti ho descritto (a seconda che il testo in inglese sia visualizzato tranite echo oppure come testo HTML semplice).

  • Ciao Roberto, rieccomi. Le ho provate tutte ma ancora non appare alcuna traduzione.

    Andiamo con ordine:
    1) Ho creato un tema child, creato la cartella lang, modificato il file functions.php aggiungendo la stringa: load_theme_textdomain( ‘equilibrium-child’, TEMPLATEPATH.’/lang’ );
    2) Ho modificato le funzioni, o meglio, erano già predisposte come specificato nella documentazione del tema: «The theme doesn’t contain the .pot, .po, or .mo files, but all the text that needs to be translated is properly wrapped in the following translation functions: __, _e, _x, and _n, so you can easily translate the theme using a tool like poEdit».
    3) Ho creato la traduzione con PoEdit e inserito i file dentro la cartella lang precedentemente creata.
    4) La localizzazione di WordPress è in italiano e presentava già la stringa: define (‘WPLANG’, ‘it_IT’);

    Beh, nonostante questo, e tutto il mio tempo perso a tradurlo, il sito è ancora completamente in inglese. Sinceramente non saprei che altro fare. Roberto salvami. Ti viene in mente qualcosa che ho saltato e/o omesso?

    • Roberto Iacono

      Prima di tutto, fai questa prova:

      Aggiungi i file di localizzazione nella cartella del tema originale, poi attiva il tema originale. Se si vede, il problema riguarda il child, se non si vede, il problema riguarda (penso) la creazione del file .po .

  • P.s. naturalmente avevo già anche:
    5) Caricato tutta la cartella Equilibrium-Child appena creata e modificata via ftp.
    6) Ricaricato il sito.

    Nessuna traduzione. Disastro :((((((

  • Ciao Roberto, volevo sapere, visto che ho installato nova e lo sto settando:
    nel caso non lo si voglia localizzare in italiano, e poi uno ci scrive in italiano, a livello SEO creo qualche problema?

    • Roberto Iacono

      Ciao Riccardo,
      cioè, hai un sito con menù in inglese e testi in italiano?
      Beh, non è il massimo 🙂 sia per i motori di ricerca che per gli utenti.

  • Si effettivamente non è il massimo.
    Tradurrò i testi in inglese che è meglio.
    Volevo chiederti un’altra cosa sul tema nova:
    l’Epanel si può tradurre in italiano?
    per farlo basta modificare il file .po in inglese che trovo all’interno della cartella /lang di epanel e lo salvo come it_IT?
    Inoltre già che ci sono volevo sapere se per caso c’è un plugin o, se non c’è, come si può creare all’ingresso nel sito la possibilità di scegliere se vedere il sito in italiano o in inglese?

    grazie mille per il tuo tempo.

    • Roberto Iacono

      Ciao Riccardo,
      si può tradurre l’ePanel, l’avevo fatto e mi sembra proprio come hai descritto te.

      Per impostare la lingua in italiano/inglese puoi utilizzare qTranslate https://www.robertoiacono.it/come-creare-sito-wordpress-multilingua/

  • Scusa se ti continuo a rompere le scatole roberto, ma non essendo espertissimo non vorrei sbagliare cercando di tradurre tutti i file php.

    Se mi trovo una stringa di questo tipo:

    value=””

    per modificare l’echo come dicevi tu diventa cosi:

    value=””

    o cosi:

    value=””

    per intenderci qualsiasi cosa ci sia scritta dopo echo va inserita in __( ‘ ‘ )

    grazie in anticipo per la risposta.

  • Ciao Roberto, ma è normale che dopo aver modificato i file echo nel file function.php il sito risulti con questo errore: Parse error: syntax error, unexpected T_STRING in /membri/tecnostore/home/wp-content/themes/eshop/functions.php on line 59
    fammi sapere per favore.

    • Roberto Iacono

      Dipende da come lo modifichi 🙂

  • Ciao Roberto, ti chiedo un ultima cosa che non riesco a fare….sperando che il codice sotto lo pubblichi sta volta :).
    array sotto dà il nome ad alcuni pulsanti del pannello di amministrazione di worpress, che però appartengono al tema.(nel senso che si creano solo se si installa quel tema, altrimenti non ci sono).
    se inserisco __(‘qualsiasi cosa’, ‘nome-tema’), poedit me lo riconosce, ma non viene visualizzato nessun cambiamento sul pannello di amministrazione.
    non riesco ad inserire in php con la funzione echo, mi dà errore e non capisco dove.
    spero riuscirai a darmi un consiglio perchè sto impazzendo :D!
    a piccola cosa, ho provato a cambiarli uno ad uno direttamente sul file php, e cosi si vedono anche sul pannello di amministrazione.devo farlo cosi?

    grazie ancora per il supporto.

    $labels = array(
    ‘name’ => __(‘Photos’, ‘post type general name’,’invictus’),
    ‘singular_name’ => __(‘Photos’, ‘post type singular name’,’invictus’),
    ‘add_new’ => __(‘Add New’, ‘gallery’,’invictus’),
    ‘add_new_item’ => __(‘Add a New Photo to a Gallery’,’invictus’),
    ‘edit_item’ => __(‘Edit Photo’,’invictus’),
    ‘new_item’ => __(‘New Photo’,’invictus’),
    ‘view_item’ => __(‘View Photo’,’invictus’),
    ‘search_items’ => __(‘Search Photos’,’invictus’),
    ‘not_found’ => __(‘No Photos found’,’invictus’),
    ‘not_found_in_trash’ => __(‘No Photos found in Trash’,’invictus’),
    ‘parent_item_colon’ => ”,
    ‘menu_name’ => __(‘Photos’,’invictus’)
    );

    • Roberto Iacono

      1. controlla che il file di traduzione sia associato alla lingua desiderata
      2. controlla che effttivamente traduca qualcosa che sia all’interno di questo file di traduzione
      3. controlla che l’hai tradotto
      4. cancella la cache del browser

      5. Se lo modifichi a mano, poi non potrai utilizzare questo tema con una versione in inglese… ma se il sito è solo in italiano, allora puoi anche farlo 🙂

  • 1.In Poedit mi ridà le stringhe di testo, quindi credo sia associato.(per associato intendi che sia it_IT ?)

    2 e 3.tradotto tutte le stringhe al 100%.

    4.l’ho fatto ma non cambia nulla.

    non riesco a capire proprio cosa sia…..la formula che ti ho scritto nel precedente messaggio è giusta?essendo un Array non vorrei aver toppato qualcosa. la funzione echo all’interno dell’array non si può mettere giusto?se si come?

    scusami se ti continuo a rompere ma non riesco proprio ad andare avanti.

    grazie Rik

    • Roberto Iacono

      Il problema potrebbe essere proprio l’array ma dovrei fare dei test per esserne sicuro… hai già provato con _e anzichè __ ?

  • Ciao Roberto.
    Il mio tema aveva già ALCUNE stringhe tradotte.
    Altre no, quindi ho visto che nel tema erano già previste le __(
    ( ecco l’esempio: for-rent’ => __(‘For Rent’,’locality’), )
    Ho aperto PoEdit, ma il tasto aggiorna non è cliccabile.
    E non riesco a configurarlo..
    Un aiutino? 😉

    • Roberto Iacono

      mmm… non saprei, mi pare che tu debba configurarlo, ma hai già detto che non riesci. Non è che il file è protetto da scrittura?

      • mmm, potrebbe anche essere. Come lo verifico?
        Cmq ho scritto a quelli del tema che ho acquistato su ThemeForest e mi hanno detto di sostituire tradurre dal file, senza modificare il .po
        Infatto ho fatto: for-rent’ => __(‘In affitto’,’locality’),
        Una soluzione abbastanza barbara…

        • Roberto Iacono

          Sulle Proprietà del file… altrimenti creane uno nuovo, e fai prima 🙂