-
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)