WordPress è installato in un quarto dei siti di tutto il mondo e, per tale ragione, è tradotto in 169 lingue, grazie al contributo volontario di diverse persone che, a vario titolo, si occupano di internazionalizzare e localizzare WordPress, temi e plugin.

WordPress pesca le traduzioni delle stringhe, segnate come da tradurre, utilizzando gettext, un pacchetto di strumenti, creato da GNU, utile all’internazionalizzazione e alla localizzazione di un software. È compatibile con un gran numero di linguaggi, tra cui Php, con cui è scritto WordPress.

Quando si sviluppa un tema o un plugin è bene che le stringhe da stampare a video siano in inglese (la lingua di default); se vogliamo fare anche la versione nella nostra lingua creiamo dei file di traduzione con tutte le frasi. Questa procedura ha tre vantaggi:

  • il plugin è internazionale in quanto è scritto tutto in inglese;
  • le stringhe sono comunque disponibili nella lingua dello sviluppatore;
  • viene permesso ad altre persone di tradurre le stringhe nella loro lingua.

Il codice Php del plugin: identificare le stringhe da tradurre

Partiamo da un semplicissimo plugin che, al caricamento del sito, stampa un messaggio di benvenuto per il visitatore. Vogliamo salutare l’utente nella lingua del gestore del sito.

Vediamo il codice Php che compie quest’operazione.

add_action('wp_footer','greet');
function greet(){
    ?>
    <script>
        alert('<?php _e('Wellcome on my website!','greet-visitor'); ?> ');    
    </script>
    <?php
}

Viene agganciato al footer un codice Javascript che produce un alert con il messaggio di saluto. Possiamo notare che la stringa, prodotta da alert(), è racchiusa nella funzione _e( $text, $domain ), la quale, accettando la stringa da tradurre e il text domain, stampa a video il saluto tradotto, se la traduzione è disponibile. Una funzione analoga è __( $text, $domain ), che compie la stessa operazione ma il valore prodotto viene restituito e non stampato a video.
Il text domain coincide con la prima parte dei nomi dei file .po e .mo; il primo è editabile dall’essere umano, il secondo è nel linguaggio macchina ed è quello in cui viene cercata, dal software, la traduzione della stringa.

Dire a WordPress dove cercare le traduzioni

Una volta scritto il plugin, nel modo appena visto, dobbiamo dire a WordPress dove andare a cercare le traduzioni da caricare. Vediamo il codice.

add_action('init','translate_greet_visitor');
function translate_greet_visitor(){
    load_plugin_textdomain('greet-visitor',false, 'greet-visitor/languages');
}

All’inizializzazione di WordPress agganciamo la funzione che si occupa di caricare le traduzioni del plugin, che è load_plugin_textdomain( $domain, $abs_rel_path__DEPRECATED, $plugin_rel_path ), la quale accetta il text domain, un secondo argomento deprecato che viene valorizzato a false e la path, relativa alla directory wp_content/plugins, dove sono presenti i file di traduzione.

Produrre i file di traduzione

Abbiamo detto prima che i file di traduzione sono due:

  • uno, con l’estensione .po, può essere editato da altri traduttori;
  • un altro, nel formato .mo, che contiene le medesime traduzioni nel linguaggio macchina.

È importante averli entrambi nella cartella prevista e che le traduzioni, contenute nei due file, corrispondano.

Ma come produrli da zero, considerato che stiamo scrivendo un plugin da pubblicare?
Ci serviremo di Poedit, un programma da scaricare e installare. Ce n’è una versione gratuita, che implementa delle funzionalità base, e una premium, più completa. Per i nostri scopi è sufficiente quella gratuita.

Una volta installata la lanciamo e ci troveremo questa schermata.

Schermata di Poedit all'avvio

A questo punto dobbiamo creare un nuovo progetto, facendo File → Nuovo… e ci trovamo una finestra che ci consente di scegliere la lingua di traduzione. Scegliamo Italiano (Italia), perché esiste anche Italiano (San Marino) e Italiano (Svizzera). C’è anche solo Italiano ma è bene localizzare la lingua altrimenti WordPress potrebbe non trovare i file necessari per la traduzione.

Selezioniamo Italiano (Italia)

Fatto questo dobbiamo impostare alcune proprietà ma Poedit non ci consente di farlo prima di aver salvato il progetto; pertanto lo salviamo col nome del text domain (greet-visitor, nel nostro caso) seguito da un trattino e, sopratutto, da it_IT. Questa desinenza serve a WordPress per capire a che lingua e a quale nazione sono riferite le traduzioni.

Il nostro progetto sarà quindi composto da due file: greet-visitor-it_IT.po e greet-visitor-it_IT.mo; Poedit li salva entrambi contemporaneamente.

Adesso possiamo impostare alcune proprietà fondamentali facendo Catalogo → Proprietà…

Finestra proprietà della traduzione

Ci troveremo in questa schermata dove dobbiamo impostare la codifica dei caratteri del file .php e dei file di traduzione che genereremo: quella consigliata è la UTF-8 per entrambi.

Finestra percorsi dei sorgenti

Nella seconda finestra dobbiamo aggiungere il o i file .php contenenti le stringhe interessate. Cliccando sul tasto + comparirà un menù con due voci

  • aggiungi cartelle… per aggiungere tutti i file racchiusi in una o più cartelle;
  • aggiungi file… per prendere un singolo file.

Nel nostro caso aggiungiamo l’unico file da cui è composto il plugin, greet-visitor.php.

Finestra parole chiave sorgenti

In quest’altra schermata aggiungiamo le funzioni usate per localizzare le stringhe; nel nostro caso abbiamo solo _e ma, in molti casi, potrebbe esserci anche __. Le funzioni vanno scritte senza parentesi.

Fatti questi passaggi in modo corretto ci troveremo una finestra come questa con la stringa da tradurre.

Poedit con la stringa Wellcome on my website

Nel campo Traduzione aggiungiamo la frase nella nostra lingua, che nel nostro esempio è “Benvenuto sul mio sito!”.

La stringa Wellcome on my website è tradotta con Benvenuto sul mio sito

A questo punto salviamo e carichiamo il plugin sul sito. Dopo l’attivazione, se navighiamo normalmente, leggeremo il messaggio di saluto in italiano.

Viene prodotto un alert con il messaggio Benvenuto sul mio sito

Il plugin è tradotto ma ancora non abbiamo finito.

Tradurre la description

Nell’immagine seguente noteremo che la descrizione del plugin è ancora in inglese ma noi vogliamo leggere in italiano anche quella.

La descrizione del plugin è makes an alert with a greeting for current visitor

La description si trova nelle headers ed è difficile aggiungere, in Poedit, una stringa da tradurre che non sia nel codice php, passata come argomento della funzione prevista.
Una strada può essere aprire il file con un editor di testo e aggiungere questo codice:

msgid "Makes an alert with a greeting for current visitor"
msgstr "Produce un alert con un saluto per il visitatore corrente"

Il problema è che comunque, una volta salvato, dobbiamo aprirlo ancora con Poedit per la produzione del .mo. Poedit, spesso, crea problemi nell’apertura di un file .po modificato con un editor di testo generico.

Per risolvere questo problema aggiungiamo al codice php la stringa da tradurre come se dovessimo stamparla allo stesso modo di quella dell’alert, quindi scriviamo _e(‘Makes an alert with a greeting for current visitor’,’greet-visitor’);, poi sincronizziamo il progetto col codice sorgente, premendo il tasto, in alto a sinistra, con l’icona del foglio, e nel file vedremo aggiunta la stringa che ci interessa.

A questo punto non resta che inserire la nostra traduzione, salvare e caricare sul server i file aggiornati. La description viene tradotta da WordPress di default perciò, nella pagina dei plugin installati, leggeremo anche la descrizione in italiano, come illustra l’immagine seguente.

La descrizione del plugin è Produce un alert con un saluto per il visitatore corrente