Siti Multilingua con Plone

Facciamo il punto su come trasformare il nostro portale Plone in un potente sito multilingua.

L'interfaccia utente di Plone è da anni tradotta in decine di lingue (http://plone.org/documentation/faq/translations), comprese quelle RTL come l'arabo o quelle basate su ideogrammi come cinese e giapponese.

Cosa ben diversa è invece poter costruire un sito multi-lingua dove contenuti in diverse lingue convivono, e possibilmente risultano sincronizzati. Per fortuna anche per questa faccia della medaglia Plone ha validissime risposte, che a oggi si basano principalmente sul prodotto LinguaPlone (http://plone.org/products/linguaplone).

NB: tutto il sito dell'Agenzia Europea per l'Ambiente fa largo uso di LinguaPlone, come potrete verificare facendo clic su "EEA homepage in your language" in alto a destra nella pagina.

LinguaPlone ha un meccanismo di funzionamento piuttosto semplice: dopo aver impostato nel pannello di controllo delle lingue di Plone quali lingue vogliamo gestire col nostro sito, su ogni contenuto LinguaPlone aggiunge un menu "traduci in", in cui compariranno le lingue verso cui il contenuto non è stato ancora tradotto.

Menu Traduci di Lingua Plone

Scegliendo una delle lingue disponibili, viene generato un nuovo contenuto, traduzione di quello originale nella lingua scelta, e si ha la possibilità di editare la versione tradotta nella lingua di destinazione avendo di fianco ad ogni campo il suo corrispondente nella lingua originale.

 

Modifica contenuti con LinguaPlone

Dove viene creata la pagina tradotta?

Alla richiesta di generare una traduzione per un certo contenuto, LinguaPlone controlla se la cartella che ospita il contenuto originale risulta tradotta nella lingua di destinazione (sì, perchè anche le cartelle hanno il menu "traduci in"!): se si ha la cartella tradotta, la traduzione viene generata al suo interno, se invece tale cartella non esiste, la pagina viene creata nella stessa cartella della pagina originale.

Questo avviene perchè LinguaPlone non impone un modo specifico di organizzare le traduzioni: i legami tra i vari contenuti tradotti sono basati su referenze, e non sulla posizione fisica dei contenuti o sugli id. Questo è anche causa di potenziali errori da parte degli editori, che, quando non hanno chiaro tale meccanismo, finiscono facilmente per perdersi durante lavoro fatto con LinguaPlone.

Come ritrovare la bussola se ci si perde

Prima di tutto dovremmo leggere il README di LinguaPlone (http://pypi.python.org/pypi/Products.LinguaPlone/4.1.1) e seguire il suggerimento di definire nella radice del sito una cartella per ogni lingua gestita, ottenendo in cambio miglioramenti in termini di facilità d'uso, SEO e caching. Un modo rapido per farlo è quello di usare la vista @@language-setup-folders, dopo aver impostato le lingue che ci interessano nel pannello di configurazione @@language-controlpanel.

Alcune semplici nozioni da tenere in mente lavorando con LinguaPlone:

  • l'installazione di LinguaPlone modifica il comportamento del motore di ricerca in modo da restituire come risultati solo contenuti della lingua corrente. Questo comporta anche che, nelle pagine di gestione dei contenuti e nella navigazione, solo i contenuti relativi alla lingua corrente sono visualizzati. Fate attenzione a questo, che è uno dei principali motivi per cui i contenuti sembrano "sparire"! :)

  • un contenuto può essere "neutro" rispetto alla lingua, se non ha specificata nessuna lingua associata, e viene sempre presentato all'utente, quale che sia la lingua corrente, sia in fase di navigazione che di ricerca

  • il contenuto originale viene creato nella lingua corrente, a meno che non si chieda nel pannello di configurazione di far nascere i contenuti come "neutri",

  • tutte le traduzioni fanno capo al contenuto originale, definito "canonico".

  • non ci possono essere due traduzioni per la medesima lingua

  • quando una cartella con all'interno contenuto in diverse lingue viene tradotta, tutti i contenuti nella lingua richiesta vengono spostati nella cartella tradotta

  • quando il contenuto di default di una cartella viene tradotto, automaticamente viene generata la traduzione della cartella che lo ospita, se non è già esistente

Se si ha bisogno di capire lo stato delle traduzioni di un certo contenuto, nel menu "traduci in" abbiamo disponibile un link "gestione traduzioni", tramite il quale è possibile modificare la lingua del contenuto, collegare delle traduzioni già esistenti, controllare quali sono le traduzioni già collegate ed eventualmente eliminarle.

Qualche nota sparsa: la lingua di un contenuto può essere cambiata solo scegliendo tra le lingue ancora non tradotte per quel contenuto; quando viene cambiata la lingua di un contenuto, questo viene spostato nella cartella tradotta della nuova lingua selezionata.

 

LinguaPlone gestione traduzioni

Cosa mostra LinguaPlone all'utente finale

Al primo contatto, LinguaPlone usa l'header "HTTP_ACCEPT_LANGUAGE" per impostare il cookie della lingua. Da questo momento verranno presentati all'utente solo contenuti nella lingua impostata e contenuti neutri.

Nel caso in cui si chieda direttamente la URL di un contenuto in una lingua diversa da quella impostata, anche l'interfaccia utente viene tradotta nella lingua del contenuto richiesto.

Se si chiede una traduzione mentre si sta visitando un certo contenuto, LinguaPlone offre all'utente direttamente la traduzione corrispondente. Nel caso in cui tale traduzione non sia disponibile, LinguaPlone risale la gerarchia di cartelle che ospitano il contenuto originale fino a trovare la prima con una traduzione disponibile, che sarà usata per fornire una traduzione all'utente. Perciò, se una pagina non ha una certa traduzione, ma la cartella che la ospita sì, all'utente verrà presentata la traduzione della cartella padre, seguendo il criterio di "prossimità".

Lavorare con LinguaPlone in modo efficiente

LinguaPlone induce nel nostro sito un ottimo servizio di traduzione, efficace e piuttosto efficiente, tuttavia se si devono gestire molte lingue o parecchi contenuti, la sequenza di azioni puntuali richieste per mantenere allineate le varie traduzioni può essere lunga e onerosa.

Per questo ci sono una serie di ulteriori estensioni di plone che aumentano le possibilità, cercando di rendere la vita dei nostri editori-traduttori ancora più semplice.

Il primo strumento consigliato, anche se destinato ad utenti esperti, è slc.LinguaTools (http://plone.org/products/slc.linguatools), che permette di operare una stessa operazione in simultanea su tutte le traduzioni di un certo contenuto: cambiare il titolo o la descrizione, impostare gli stessi portlet, applicare una transizione di workflow, creare in un unico clic tutte le traduzioni per un contenuto esistente, etc.

LinguaTools interfaccia di gestione

Altra estensione da tenere in considerazione è LinguaPlus (http://pypi.python.org/pypi/LinguaPlus), che offre una serie di utili caratteristiche, come la possibilità di marcare come "da revisionare" le traduzioni relative a contenuti canonici modificati (appoggiandosi a slc.outdated), o l'integrazione delle funzionalità di traduzione con plone.app.iterate tramite una serie di trigger per il content rules engine o l'interfaccia di modifica con i valori dei campi del contenuto canonico a lato.

Un'utile fonte di ispirazione è la presentazione di Sasha Vincic che trovate qui: http://www.slideshare.net/vincic/manage-multilingual-sites-5612141

Nota per sviluppatori

La comunità Plone ha designato Dexterity (http://plone.org/products/dexterity) quale successore di Archetypes, il framework di gestione dei tipi di contenuto. Purtroppo LinguaPlone è fondamentalmente ancorato ad Archetypes nei suoi meccanismi di funzionamento, e una risposta al problema del "multi-lingua" per Dexterity non è ancora disponibile. La tecnologia che promette meglio da questo punto di vista è Multilingual (http://pypi.python.org/pypi/plone.app.multilingual/), che tuttavia da diversi anni non riesce a trovare una sua maturità e adozione comunitaria.

Share this on

Share |

On same topics

Commenti

comments powered by Disqus