====== WordPress: La Localizzazione ====== ===== Tecnologia di Localizzazione ===== Gli sviluppatori di [[http://wordpress.org|WordPress]] hanno deciso di usare come motore di localizzazione il [[http://www.gnu.org/software/gettext/gettext.html|GNU gettext]]. gettext traduce ogni singolo messaggio mostrato all'utente, sia esso un intero paragrafo o una semplice parola. WordPress dispone di due funzioni per la localizzazione, **''%%__()%%''** che viene usata per passare parametri ad altre funzioni e **''_e()''** che viene usata per mostrare direttamente a video il messaggio. **''%%__($message)%%''** \\ Cerca nel modulo di localizzazione la traduzione di ''$message'', e restitusce la traduzione ad una eventuale altra funzione PHP. Se non trova la traduzione restituisce ''$message''. **''_e($message)''** \\ Cerca nel modulo di localizzazione la traduzione di ''$message'', e la passa alla funzione ''echo'' di PHP. Se non trova la traduzione restituisce ''$message''. Il framework di gettext è usato quasi ovunque in WordPress. Tuttavia ci sono alcuni punti del codice sorgente di WordPress in cui non si è reso possibile usarlo. Vedere [[http://codex.wordpress.org/Files_For_Direct_Translation|Files da Tradurre Direttamente]] per maggiori dettagli. ===== gettext Files ===== Nel framework di gettext ci sono tre tipi di files. Durante il processo di localizzazione tali files vengono usati e/o generati dai tools dilocalizzazione nel modo seguente: **POT (Portable Object Template) files**\\ Il primo passo nel processo di localizzazione è l'uso di un programma che cerca attraverso il codice sorgente di WordPress ed estrae tutti i messaggi passati alle funzioni ''%%__()%%'' e ''_e()''. Questo elenco di messaggi in lingua inglese viene messo in uno speciale template file formattato (POT file) che è alla base di qualsiasi traduzione. Generalmente il file POT di WordPress può essere scaricato dal sito quindi non dovrebbe essere necessario crearlo. Possono essere realizzati dei POT separati per i temi ed i plugins (se, ovviamente lo sviluppatore del tema / plugin ha avuto cura di usare le funzioni ''%%__()%%'' e ''_e()''). **PO (Portable Object) files**\\ Il secondo passo nel processo di localizzazione consiste nel lavoro di traduzione nella lingua desiderata di tutti i messaggi contenuti nel file POT (lavoro svolto da un traduttore umano visto che i programmi di traduzione sono inaffidabili). I messaggi in Inglese e quelli tradotti vengono salvati in un file PO. **MO (Machine Object) files**\\ L'ultimo passo nel processo di localizzazione consiste nel far processare il file PO da un programma che lo traduca in binario. Questo file compilato ed ottimizzato rende più veloci le operazioni di ricerca da parte del software localizzato. ===== L'Header del File PO ===== All'inizio di un file PO si trova l'header. Questa porzione di file fornisce informazioni sul software e la versione ai quali la traduzione è destinata, chi è il traduttore, e quando è stato creato. Alcune parti dell'header sono universali per tutte le traduzioni di WordPress: # LANGUAGE (LOCALE) translation for WordPress. # Copyright (C) YEAR WordPress contributors. # This file is distributed under the same license as the WordPress package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: WordPress VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-02-27 17:11-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" ===== Formato dei Messaggi ===== Quello che segue è un esempio di ciò che è contenuto nella versione originale del file. #: wp-comments-post.php:13 msgid "Sorry, comments are closed for this item." msgstr "" #: wp-comments-post.php:29 msgid "Sorry, you must be logged in to post a comment." msgstr "" #: wp-comments-post.php:35 msgid "Error: please fill the required fields (name, email)." msgstr "" Mentre questo è l'esempio qui sopra con implementata la traduzione italiana. #: wp-comments-post.php:13 msgid "Sorry, comments are closed for this item." msgstr "Spiacente, i commenti per questo post sono chiusi." #: wp-comments-post.php:29 msgid "Sorry, you must be logged in to post a comment." msgstr "Spiacente, devi essere loggato per postare un commento." #: wp-comments-post.php:35 msgid "Error: please fill the required fields (name, email)." msgstr "Errore: compilare i seguenti campi (nome, email)." ===== Editing di un file .po ===== I file .po possono essere generati analizzando i sorgenti o partendo dal file //.pot// descritto nella sezione seguente. Un buon editor per i file .po è [[http://sourceforge.net/projects/poedit/|poEdit]] scaricabile liberamente. Quelli che seguono sono i passi necessari per localizzare un tema / plugin che non dispone del file .POT. - Aprire poEdit. - Selezionare **''File -> Nuovo Catalogo...''**. - Inserire il nome del progetto e gli altri dati relativi al traduttore ed ai alla lingua. - Spostarsi sul tab **''Percorsi''**. - Selezionare l'icona **''Nuovo Oggetto''**. - Inserire il percorso dei files da analizzare e premere ''Invio''. - Spostarsi sul tab **''Parole chiave''**. - Selezionare l'icona **''Nuovo Oggetto''**. - Inserire **''%%__%%''** e premere **''Invio''**. - Selezionare l'icona **''Nuovo Oggetto''**. - Inserire **''_e''** e premere **''Invio''**. - Premere **''Ok''**. - Inserire il nome del file .po (E' tutto più semplice se come percorso si imposta **''.''** e si salva il file .po nella cartella dove risiede il codice da analizzare). - Dovrebbe apparire una finestra dal titolo //''Update Summary''// contenente l'elenco di tutti i messaggi da tradurre rilevati. Premere **''Ok''**. - Localizzare i messaggi. - Salvare nuovamente il file .po . ===== Dal file .po al file .mo ===== Con //poEdit// è possibile generare il file .mo semplicemente andando su **''File -> Salva con nome...''** ed indicare il file .mo. In alternativa, molto più semplicemente, in **''File -> Preferenze...''** spostarsi sul tab **''Editor''** e flaggare //**''Compila automaticamente il file .mo al salvataggio''**//. :!: **N.B.:** Nell'attuale versione 1.4.1 quest'ultima opzione è attiva di default. ===== Localizzazione di WordPress ===== Ecco i semplici passi per trasformare il software nella nostra lingua. * Scaricare il file .mo della lingua desiderata (Vedere la documentazione originale alla pagina [[http://codex.wordpress.org/WordPress_in_Your_Language|WordPress in Your Language]] per trovare i files più recenti). I nomi dei files .mo sono formati da due codici, il primo dato dalla direttiva ISO-639 sui codici di lingua (p.e. //pt// per il Portoghese) seguito dal codice paese dato dalla direttiva ISO-3166 (p.e. //_PT// per il Portogallo o //_BR// per il Brasile). Quindi il file per il Portoghese Brasiliano si chiamerà //pt_BR.mo// mentre un Portoghese generico si chiamerà //pt.mo//. Per l'Italiano il file da scaricare è **it_IT.mo**. * Aprire il file **//wp-config.php//**, presente nella root di wordpress, con un qualsiasi editor e cercare:\\ \\ define ('WPLANG', ''); * Modificare tale linea sulla base del file .mo precedentemente scaricato (che nel caso dell'italiano è //it_IT//).\\ \\ define ('WPLANG', 'it_IT'); * Salvare il File. * Sul server, nella cartella **''/wp-content''** (che si trova sotto la root di wordpress), creare la cartella **''/languages''**. (La documentazione dice che dovrebbe funzionare anche creandola sotto **''/wp-includes''** ma non ho provato). * Uploadare il file .mo nella cartella **''languages''**. * Uploadare il file **//wp-config.php//** nella root di WordPress. * Aprire il browser e posizionarsi sulla pagina iniziale di WordPress. Se tutto è stato fatto correttamente ora dovrebbe apparire nella lingua desiderata. ===== Localizzazione di Temi e Plugins ===== Il procedimento per la localizzazione dei plugins è analogo a quello dei temi. ==== Text Domains ==== Il primo passo nel preparare un tema o un plugin è decidere il //text domain//. \\ Il text domain serve per distiguere i messagi localizzati del tema o plugin da localizzare rispetto a quelli di altri temi o plugins e dal resto di WordPress. \\ Un text domain è tipicamente una stringa che identifica il tema o plugins da localizzare (tipicamente si usa il nome del tema o plugin senza estensione). \\ Per esempio il trext domain del tema di default di WordPress è **kubrick**. \\ Una volta deciso il text domain bisogna istruire WordPress rigurdo la sua esistenza. \\ Per i plugins è necessario inserire la seguente funzione in un punto che preceda l'output di qualsiasi messaggio. load_plugin_textdomain ($domain); Un buon posto è il metodo //init// del plugin. add_action ('init', 'my_plugin_init'); function my_plugin_init () { load_plugin_textdomain ('mydomain'); } Per i temi sarà sufficente mettere all'inizio del file **//functions.php//**, contenuto nella directory del tema, la seguente funzione: load_theme_textdomain ($domain); Il tema o plugin è pronto per essere localizzato. E'necessario specificare il text domain in tutte le chiamate alle funzioni di localizzazione.