• La traduzione dei prodotti aggiuntivi

last modified March 7, 2010 by giorgio

I ferri del mestiere

Per la traduzione dei prodotti Plone sono necessari alcuni strumenti:

  • gettext
  • i18ndude

Il primo viene distribuito solitamente con Linux o simili. Ad esempio per l'installazione in Debian è sufficiente eseguire il seguente comando:

apt-get install gettext

Il secondo è possibilie trovarlo a questo indirizzo: http://pypi.python.org/pypi/i18ndude

Consiglio di installarlo utilizzando virtualenv per evitare di sporcare il python di sistema:

~$ virtualenv i18ndude
~$ cd i18ndude
~/i18ndude$ source bin/activate
~/i18ndude$ easy_install i18ndude

In questo modo avremo il comando i18ndude nella cartella bin del nostro virtualenv; basterà creare un link a questo comando nel path degli eseguibili del nostro sistema per averlo disponibile.

locales

Le traduzioni devono essere poste nella directory locales del nostro pacchetto e questa directory dev'essere registrata all'avvio di Zope attraverso una configurazione in configure.zcml

<configure
    ...
    xmlns:i18n="http://namespaces.zope.org/i18n">

    <i18n:registerTranslations directory="locales" />
    ...
</configure>

A differenza delle vecchie directory i18n la struttura della directory locale è impostata diversamente.

Per esempio la directory i18n veniva strutturata nel seguente modo:

i18n/mydomain.pot
i18n/mydomain-nl.po
i18n/mydomain-it.po

mentre la directory locales nel seguente:

locales/my.package.pot
locales/nl/LC_MESSAGES/my.package.po
locales/it/LC_MESSAGES/my.package.po

Per ricreare il file .pot è possibile utilizzare il seguente comando:

i18ndude rebuild-pot --pot locales/my.package.pot --create my.package .

una volta creato il file .pot è possiblie sincronizzare i file .po delle varie lingue nel seguente modo:

i18ndude sync --pot locales/my.package.pot locales/*/LC_MESSAGES/my.package.po

Compilazione dei file .po

I file delle traduzioni vengono compilati all'avvio di Zope attraverso il PlacelessTranslationService. Nel caso sia necessario eseguire a mano questa operazione possiamo farlo nel modo seguente:

# Compile po files
PRODUCTNAME=my.package
for lang in $(find locales -mindepth 1 -maxdepth 1 -type d); do
    if test -d $lang/LC_MESSAGES; then
        msgfmt -o $lang/LC_MESSAGES/${PRODUCTNAME}.mo $lang/LC_MESSAGES/${PRODUCTNAME}.po
    fi
done
(Libera traduzione di i18n, locales and Plone 3.0 di Maurits van Rees)