I18n is a abbreviation for internationalization, or the process of making an application ready for translation. In the WordPress case it means marking strings, which should be translated in a special way. It is called i18n, because there are 18 letters between the I and the n.
Realizzare un tema per Wordpress multilingua non è semplice:
- richiede, ovviamente, una decente conoscenza dell’inglese scritto, altrimenti rischiamo di inserire sempre frasi incomplete o eccessivamente impersonali;
- siamo costretti a scrivere molto più codice. Infatti, ogni stringa che debba essere tradotta diventerà nella forma
<?php un_certa_funzione('Stringa da tradurre', 'dominio_del_tema'); ?>
Detto questo, andiamo a vedere come funziona.
Il dominio del testo
Ogni tema “traducibile” ha un suo dominio del testo associato. In questo esempio sceglieremo mydom. Vedremo bene dopo cosa significa questo passaggio.
Rendere il tema “traducibile”
Abbiamo bisogno fondamentalmente di 3 funzioni PHP: __(), _e() e infine printf().
La prima funzione traduce la stringa e restituisce la stringa tradotta in base al dominio scelto, senza stampare il risultato. Ci è utile quando questa stringa deve diventare un paramentro di input di una altra funzione, ad esempio:
<?php comments_rss_link(__('RSS Feed for this entry','mydom')); ?>
In questo caso la stringa ‘RSS Feed for this entry’ verrà tradotta e poi diventerà input per la funzione comments_rss_link, la quale stampa il link ai Feed dei commenti di un certo articolo.
La funzione _e(), invece, si comporta come un echo. Per cui
<h3 id="respond"><?php _e('Leave a Reply', 'mydom'); ?></h3>
diventerà , in italiano (letteralmente)
<h3 id="respond">Lascia una Risposta</h3>
E cosa succede nel caso in cui nella stringa da tradurre dovessimo includere il valore di una variabile o restituito da una funzione?
In questo caso ci viene incontro la funzione printf:
<?php printf(__('Permanent Link to %s', 'mydom''), the_title_attribute('echo=0')); ?>
Dove il la stringa speciale %s verrà sostittuita dal valore restituito dalla funzione the_title_attribute('echo=0'), ovvero dal titolo del post. Esiste la possibilità di sostituire più stringhe, in tal caso la sintassi è la seguente:
printf(__('Your city is %1$s, and your zip code is %2$s.', 'mydom'), $city, $zip_code);
dove %1$s verrà sostituito dal valore della variabile $city, mentre %2$s dal valore di $zip_code.
Attenzione alle date!
Anche le date vanno “tradotte”. Infatti, il tipico formato anglossasone è:
the_time('F jS, Y'); => December 16th, 2008
Mentre quello italiano
the_time('d F Y'); => 16 Dicembre 2008
Caricare il dominio del testo
A questo punto apriamo il file functions.php del tema (se non esiste, creiamolo) e prima di dichiarare qualsiasi funzione inseriamo:
<?php load_theme_textdomain('mydom'); ?>
In questo modo le stringhe verrano tradotte secondo il dominio da noi scelto.
Abbiamo finito?
Neanche un po’! Ora dobbiamo creare i file .POT e .MO.
PoEdit
Installiamo PoEdit, disponibile per Windows, Linux e MacOS. Una volta installato apriamo il programma e scegliamo File > Nuovo Catalogo. Le impostazioni corrette sono:
- Nome progetto: quello che ci pare a noi, ad esempio il nome del tema o del dominio del testo
- Lingua: English
- Insieme dei caratteri: utf-8
- Percorso di base: inseriamo il percorso completo della cartella in cui si trova il tema. Nel mio esempio
C:\Programmi\xampp\htdocs\viklog\wp-content\themes\just-typo\ - Percorsi: clicchiamo su “Nuovo oggetto” (il secondo pulsante evidenziato nell’immagine seguente) e incolliamo di nuovo il percorso completo. Se necessario aggiungiamo le sottocartelle
- Parole chiavi: clicchiamo due volte sul pulsante nuovo oggetto e inseriamo
__e_e, ovvero il nome delle funzioni utilizzate per la localizzazione.
Salviamo il file come en_EN.
Se tutto è andato a buon fine, ci dovremmo trovare davanti a una finestra come questa:
A questo punto non manca che tradurre una stringa alla volta stando attenti a non tradurre tutto ciò che non è testo, come i tag HTML, %s, %d e simili. La stringa tradotta và scritta nel campo sottostante a quella originale.
Una volta finito salviamo come it_IT, con l’accorgimento che questi file siano nella directory del tema.
Abbiamo finito! Ora la lingua con cui è localizzato il nostro tema dipende dal valore della costante WPLANG definita nel file wp-config.php.










Questo solo perchè non usi nessun motore di templateing… prova con questo … http://phptal.motion-twin.com/
non so se su php implementa i18n ma come motore è eccezionale
Ciao Mucca! Sembra interessante, è molto simile al motore di tumblr ma non so quanto sia utilizzabile con Wordpress.
Grazie mille per questa splendida guida. Finalmente posso localizzarmi un tema senza impazzire nel gestirlo!
[...] non si parla di politica! Ma di WordPress, ancora una volta. Grazie ad uno splendido tutorial (questo), il neoneonato tema di questo sito, che si chiama Quadruple Blue MOD potrà essere finalmente [...]
^.^
[...] con WPML, grazie ad alcuni suggerimenti, riassunti bene qui da Viklog, WPML estrae le stringhe di testo usate nel template e vi permette di [...]