Premesse sull'internazionalizzazione
medio
Innanzitutto, prima di iniziare, consiglio caldamente la lettura della seguente guida.
Per chi ha fretta di andare subito al sodo, posso fare delle anticipazioni: tutti (o quasi) i prodotti per Plone hanno nel codice al loro interno una cartella i18n. All'interno di tale cartella sono contenute le traduzioni per le varie lingue, in file separati. Per esempio:
- MailmanSubForm-it.po
- MailmanSubForm-en.po
- ecc...
Ognuno di questi file, codificati in maniera particolare, contiene un'intestazione in cui vengono specificate diverse informazioni oltre che una serie di codici a cui associare una traduzione. Gli elementi delle pagine che dovranno essere tradotti (per esempio titolo, label, ecc..) dovranno far riferimento a questi codici (in gergo msgid).
L'intestazione è forse la parte più importante, poiché in essa vengono specificate informazioni fondamentali come il dominio e la lingua (da modificare a seconda dei casi). Ecco un esempio di intestazione di un file po:
# Gettext Message File for PlacelessTranslationService. msgid "" msgstr "" "Project-Id-Version: MailmanSubForm\n" "POT-Creation-Date: 2003-10-04 12:51+0300\n" "Last-Translator: davide.moro@redomino.com\n" "Language-Team: <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "Language-code: it\n" "Language-name: Italiano\n" "Preferred-encodings: ascii latin1 utf-8\n" "Domain: MailmanSubForm\n
Esempio di associazione di una traduzione ad un codice identificativo (estratta dal file po di traduzione di MailmanSubForm in lingua italiana):
#. Added on Tue Jun 5 15:39:46 2007 #. #: file:MailmanSubForm/skins/MailmanSubForm/mmSubForm_view.cpt #. Line 131, Column 14 #. #. Orginal text: #. List Unsubscribe msgid "list_unsubscribe" msgstr "Cancellazione dalla lista"
Nel caso qualcuno voglia tradurre un qualsiasi prodotto predisposto per l'internazionalizzazione in un altra lingua (per esempio tedesco), non deve far altro che copiare il file po, modificare l'intestazione specificando il codice della lingua corretta e sostituire i vari msgstr.
Come predisporre un prodotto per essere internazionalizzato
Gli sviluppatori con pochi accorgimenti possono rendere i proprio prodotti pronti per essere tradotti in decine di lingue.
Internazionalizzazione script e viste
Nel caso si scrivessero da zero delle viste page template non bisogna far altro che marcare gli elementi da tradurre con degli msgid.
Ecco un estratto di codice:
<legend i18n:domain="MailmanSubForm" i18n:translate="list_unsubscribe">List Unsubscribe</legend>
Oppure, direttamente da codice Python:
testo_tradotto = context.translate(msgid='list_unsubscribe', default='List Unsubscribe', domain='MailmanSubForm')
Naturalmente questi sono solo dei casi semplici, nella guida segnalata all'inizio di questa pagina sono indicati altri casi d'uso più complessi.
Internazionalizzazione dei content type in Plone
La sezione precedente riguardava l'internazionalizzazione di una page template specifica di un prodotto, ancora da scrivere. Tuttavia, quando si crea un nuovo tipo di contenuto in Plone, vengono costruite automaticamente delle viste in modalità edit o view. Progettando i vari campi con qualche accorgimento particolare, si può rendere la vista del nostro oggetto automaticamente predisposta per il multilingua. In poche parole l'unico lavoro da fare è quello di creare una cartella i18n con dentro i file delle varie traduzioni. Facile, no?!
Le informazioni che dovremo aver cura di aggiungere sono:
- label_msgid
- description_msgid
- i18n_domain
Ecco un esempio:
StringField('mmListName',
searchable=0,
required=1,
widget=StringWidget(
label='List Name',
label_msgid='MailmanSubForm_label_mmListName',
description="""
The name of your Mailman list.
""",
description_msgid='MailmanSubForm_help_mmListName',
i18n_domain='MailmanSubForm',
),
), Nota bene:
utilizzando il prodotto ArchGenXML tutti i nuovi content type creati sono automaticamente predisposti per il multilingua!!
ArchGenXML è un generatore di codice automatico per applicazioni Plone/CMF basati sul framework Archetype. La generazione del codice avviene a partire da un file creato utilizzando un editor uml. Ciò significa che è possibile generare l'intero codice del prodotto, pronto per essere installato, progettandone prima graficamente la struttura (anche molto complessa).
Ecco una guida che illustra le potenzialità di questo prodotto: guida.
