Chiudi

 

Blog ad Improbabilità Infinita

L'unico blog che può trasformarvi in una balena o in un vaso di petunie

Feed RSS / Commenti RSS APML

WordPress - Localizzazione Parziale

Scritto il 13 August 2008 alle 15:03

Differentemente rispetto alla versione precedente di questo blog, ho deciso di rendere finalmente uniforme l'interfaccia per quanto riguarda la lingua: prima la maggior parte delle parole erano in italiano, ma si potevano trovare frasi come "Posted on October 10th, 2007 by Jhack", "Select category" o simili. La "localizzazione" o "internazionalizzazione" è appunto l'atto di rendere un prodotto conforme alla lingua o ad altri aspetti culturali degli utenti che  ne fanno utilizzo, in questo caso degli italiani, ma è ovviamente estendibile a qualsiasi altra lingua.

Localizzare completamente l'interfaccia di WordPress in un'altra lingua è decisamente semplice, visto che è spiegato un po' ovunque (anche nel seguito di questo post) e consiste nell'aggiungere un riga in un file e copiarne un altro in una directory, o, più semplicemente, installare una versione già modificata di WordPress nella propria lingua. Tuttavia, quello che volevo ottenere era solo la traduzione dell'interfaccia che si presenta a voi utenti, lasciando tutta la parte amministrativa in inglese, che è meglio, come direbbe il Puffo Quattrocchi!

Come fare ciò e dove procurarsi gli strumenti non è particolarmente chiarissimo, quindi mi accingo a descrivervi cosa dovete fare.

Prima, però, può essere utile una premessa riguardo ai file che andremo a maneggiare, perché difficilmente ne avrete già sentito parlare. Il framework utilizzato da WordPress per l'internazionalizzazione dell'interfaccia è gettext, un software ampiamente diffuso per la scrittura di programmi multilingua. Opportunamente marcati con una sintassi riconosciuta da gettext i programmi da tradurre, processandoli con il comando xgettext, si ottiene un file con estensione POT (Portable Object Template) che non è altro che un lungo elenco di blocchi del tipo:

#: wp-includes/widgets.php:726
msgid "Select Category"
msgstr ""

dove la prima riga indica il file e la riga in cui è presente l'identificativo della stringa da tradurre, la seconda l'identificativo stesso, e la terza è lasciata naturalmente vuota per la traduzione. Un'istanza di quel template è un file PO (Portable Object), che è sostanzialmente uguale al template per quanto ci riguarda (il comando per ottenerlo è "msginit --locale=it --input=nome.pot", dove "it" indica la lingua di destinazione, ma può essere qualsiasi stringa). Tramite un editor testuale o grafico è sufficiente specificare le frasi da tradurre, ottenendo qualcosa come:

#: wp-includes/widgets.php:726
msgid "Select Category"
msgstr "Scegli una Categoria"

Con il comando "msgfmt nome.po"  o tramite un editor grafico si ottiene un file MO (Message Object), che, a differenza dei precedenti, è un file binario e, pertanto, in generale non è portabile su architetture diverse, quindi deve essere generato appositamente per l'architettura di destinazione. Non vi riporto l'output di questo file per ovvi motivi :).

Veniamo ora alla ricetta da seguire pedissequamente per ottenere risultati sensati:

  1. innanzitutto, è il caso di procurarsi un editor visuale, a meno che non siate masochisti e vogliate fare tutto a mano; da quel che ho visto in giro, quello maggiormente utilizzato è Poedit, disponibile per i sistemi operativi più diffusi;
  2. poi ci serve una copia vergine del POT di WordPress (wordpress.pot), che si può trovare nelle versioni stabile (scegliete quello che corrisponde alla vostra versione di WordPress) o di sviluppo;
  3. a questo punto aprite il file wordpress.pot con Poedit e selezionate dal menu "Catalog -> Settings..." ottenendo una finestra di dialogo che permette di specificare informazioni riguardanti la traduzione che volete eseguire. L'unico campo strettamente necessario da specificare è "Plural forms", nel quale dovete inserire, per una traduzione italiana, "nplurals=2; plural=(n != 1);" (senza virgolette, magari); quella stringa non vuol dire altro che "ci sono due forme ed il plurale va utilizzato solo quando la quantità è diversa da 1"; se siete particolarmente curiosi, potete leggere, ad esempio questa pagina, dove scoprirete formule apparentemente bizzarre che descrivono le forme plurali in altre lingue; vi consiglio anche di impostare i campi "Charset" e "Source code charset" a "utf-8", lasciando gli altri al vostro buon senso; fatto ciò, salvatelo tramite "File -> Save as..." con estensione PO (ad es., jWordpress.po), ottenendo incidentalmente anche la versione con estensione MO (jWordpress.mo) e dimenticatevi del POT, non serve più;
  4. utilizzando l'interfaccia grafica, identificate tramite la funzionalità di ricerca ("Edit -> Find...") le frasi che vi interessano e traducetele, stando attenti a mantenere i marcatori delle parti variabili del testo; ad esempio, se vi trovate a tradurre "%s hour", l'interfaccia grafica vi proporrà le due forme, singolare e plurale, da aggiungere rispettivamente come "%s ora" e "%s ore" nei rispettivi campi; per quanto riguarda la traduzione di date ed ore (ad. es., Y/m/d in italiano è d/m/Y), vi rimando a questa pagina, in cui sono spiegate le notazioni utilizzate; una volta tradotto quello che vi interessa, salvate il file;
  5. come ultimo punto, dovete spiegare a WordPress che volete utilizzare un'altra lingua e per fare ciò:
    1. copiate i file jWordpress.po e jWordpress.mo nella directory wp-includes/languages/ (se non c'è, createla!);
    2. specificate nel file wp-config.php la stringa "define('WPLANG', 'jWordpress');", dove il valore "jWordpress" deve corrispondere al nome del file con estensione MO contenuto nella directory wp-includes/languages.

Se qualche passaggio è oscuro, ci sono apposta i commenti per chiedere chiarimenti.


Post attinenti:

Nessun commento ↓

  • Non ci sono commenti. Vuoi essere il primo?

Commentami!

Puoi utilizzare i seguenti tag XHTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>