Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1199 Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1199 Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1199 Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1199 Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1244 Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1391 Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1391 Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1391 Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1391 Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/classes.php on line 1442 Strict Standards: Redefining already defined constructor for class wpdb in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/wp-db.php on line 306 Deprecated: Assigning the return value of new by reference is deprecated in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/cache.php on line 103 Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/cache.php on line 431 Deprecated: Assigning the return value of new by reference is deprecated in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/query.php on line 61 Deprecated: Assigning the return value of new by reference is deprecated in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/theme.php on line 1109 Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/comment-template.php on line 1266 Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/comment-template.php on line 1266 Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/comment-template.php on line 1266 Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/comment-template.php on line 1266 Strict Standards: Redefining already defined constructor for class WP_Dependencies in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/class.wp-dependencies.php on line 31 Strict Standards: Redefining already defined constructor for class WP_Http in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/http.php on line 61 Deprecated: Non-static method WP_Http_ExtHTTP::test() should not be called statically, assuming $this from incompatible context in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/http.php on line 94 Deprecated: Non-static method WP_Http_Curl::test() should not be called statically, assuming $this from incompatible context in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/http.php on line 97 Deprecated: Non-static method WP_Http_ExtHTTP::test() should not be called statically, assuming $this from incompatible context in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/http.php on line 142 Deprecated: Non-static method WP_Http_Streams::test() should not be called statically, assuming $this from incompatible context in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-includes/http.php on line 145 Blog Multilingua - Heracleum Pages

    Articoli precedente e prossimo:
Friday, 2 March, 2007

Parola d’ordine: multilingua.

O meglio, “bilingue”. Nel mio caso, fondamentalmente avevo bisogno di scrivere articoli in due lingue (italiano e inglese). Durante le mie prime ricerche ho trovato numerosi plugin che supportano lingue multiple in un singolo post con feature per passare da una all’altra lato-client. Non è esattamente quello che cercavo: post distinti in differenti lingue ma legati tra di loro da una relazione del tipo “uno traduzione dell’altro”. Lo switch di lingua deve essere “globale”, a livello di sito: navigando il blog in inglese l’utente deve vedere solo post in inglese; ogni articolo deve esporre un link alla sua traduzione -se presente- nell’altra lingua altrimenti indicare che esiste solo la versione in quella lingua.

Tutto questo -ed altro- è reso possibile aggiungendo il plugin “Gengo” per wordpress.
In realtà Gengo -così com’è- non copre proprio tutte le mie necessità specifiche (e ci mancherebbe…) sicché ho dovuto metter mano al suo codice -piccolo hack- per farlo funzionare a dovere.

Prima di tutto, Gengo si aspetta di ricevere la lingua corrente come parametro nella query-string (ad es. ?language=en) che, una volta attivato l’opzione URL rewrite di wordpress -come ho fatto subito-, verrà mostrata nell’URL come un “/en/” aggiunto a sinistra in ogni contesto, per esempio un URL completo sarà:
host/wordpress/2007/02/17/post-title/en/
Questa soluzione, a parer mio e di altri -come ho potuto leggere nel loro Forum- risulta poco gradevole (proprio bruttarella, per dirla tutta).
Visto che al di fuori della sezione d’installazione di Wordpress (/pages/ in questo sito) la definizione della lingua corrente è determinata da un sottodominio (3° livello), it.heracleums.org per la versione italiana e nessun sottodominio (heracleums.org) per quella inglese, volevo che Gengo determinasse la lingua corrente secondo lo stesso criterio.
Questa è la prima modifica rilevante che ho dovuto applicare.

L’altro aspetto da considerare usando Gengo è che -ad oggi- anche nella’ultima versione non supporta ancora WP 2.1! Comunque, da quanto ho potuto vedere questo crea problemi solo quando si vuole assegnare una relazione di traduzioni nella pagina Write/Manage post di WP, associazione che fortunatamente è possibile fare (e funziona!) anche nella pagina “translations” del plugin Gengo.

Un problema sempre collegato all’incompatibilità con WP2.1 accade quando si tenta di reperire le traduzioni del singolo post -il language switch- nel proprio theme: non funge dicendo “No translations” anche quando ne ha in realtà. Il workaround richiede query costanti a mySQL: questo mi ha portato rapidamente a prendere in considerazione l’utilizzo di un plugin di gestione del caching (ne parlerò in seguito).

Tutto il resto funziona inaspettatamente bene, giusto per accennare ad un’altra simpatica feature multilingue: le Categorie, pur essendo un oggetto comune nelle differenti lingue, hanno ciascuna la sua brava traduzione.

Il resto del lavoro riguarda lo sviluppo del custom Theme che deve mostrare un look coerente a quello del sito intero, traduzioni bilingui di messaggi al suo interno -che nella maggior parte dei temi penso siano “schiantate” in inglese nel codice dai loro autori-, gestione flessibile (e variabile di contesto in contesto) degli stili CSS e questioni varie.



3 Responses to “Blog Multilingua”

  1. lrnz Says:

    ciao

    sono alla mia prima esperienza con wordpress…
    sto testando in locale con easyphp la versione 2.2.1 it, tema freshy2 e ultima versione di gengo; pare però che l’abbonamento rss punti sempre alla versione italiana, anche dalla pagina in inglese.
    vedo invece che dalle tue parti la cosa funziona correttamente ;)
    qualche consiglio?
    grazie, buon lavoro
    lrnz

  2. Heracleum Says:

    Ciao lrnz (Lorenzo? :) )
    non so se hai letto il post qui sopra, ma appunto il mio Gengo l’ho dovuto modificare pesantemente soprattutto per quel che riguarda gli url e come Gengo deve dedurre la lingua corrente.
    Quindi funziona perché ci ho dedicato del tempo per far sì che sia Gengo sia Wordpress si comportassero come il resto del sito per dedurre la lingua (il sottodominio di terzo livello, it. = italiano, per gli altri o nessun dominio di 3° livello = inglese [default] ). Oltretutto ho creato un semplicissimo apposito WP Plugin che mi renda tutti gli url interni del blog relativi mentre proprio nei feed RSS deve lasciarli assoluti (non so perché non si comporti così di default WP, mi sembra assurdo).
    In conclusione, temo di non poterti consigliare visto che proprio su questo aspetto ci ho smanettato fin troppo e quindi neanche mi ricordo più qual è il comportamento senza le mie modifiche ;)
    ciao

  3. lrnz Says:

    >(Lorenzo? :) )
    eheh, corretto :)

    grazie comunque per la risposta…

Lascia un commento

Tag XHTML permessi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Strict Standards: Redefining already defined constructor for class sk2_plugin in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-content/plugins/SK2/sk2_plugin_class.php on line 45
It sounds like SK2 has recently been updated on this blog. But not fully configured. You MUST visit Spam Karma's admin page at least once before letting it filter your comments (chaos may ensue otherwise).
Strict Standards: Declaration of sk2_captcha_plugin::output_plugin_UI() should be compatible with sk2_plugin::output_plugin_UI($output_dls = true) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-content/plugins/SK2/sk2_plugins/sk2_captcha_plugin.php on line 70 Strict Standards: Declaration of sk2_pjw_simpledigest::output_plugin_UI() should be compatible with sk2_plugin::output_plugin_UI($output_dls = true) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-content/plugins/SK2/sk2_plugins/sk2_pjw_daily_digest_plugin.php on line 268 Strict Standards: Declaration of sk2_rbl_plugin::treat_this() should be compatible with sk2_plugin::treat_this(&$cmt_object) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-content/plugins/SK2/sk2_plugins/sk2_rbl_plugin.php on line 342 Strict Standards: Declaration of sk2_referrer_check_plugin::output_plugin_UI() should be compatible with sk2_plugin::output_plugin_UI($output_dls = true) in /storage/content/74/1007074/heracleums.org/public_html/pages/wp-content/plugins/SK2/sk2_plugins/sk2_referrer_check_plugin.php on line 78