Alessio Treglia

everybody lies
  • Quality Assurance
  • EN blog
  • rss
  • Inizio
  • Chi sono
  • pyRisk
  • Roma3 WiFi Authenticator
  • Installation Report Generator
  • Contattami

Il giro del mondo in pochi minuti con PyGTK, Glade e gettext!

quadrispro | 27 Febbraio 2008

Tada-aa!

Un pitone multilingua

Ci credereste se vi dicessi che il pitone qui sopra sa parlare tutte le lingue del mondo? No? Se siete così sicuri delle vostre conoscenze fino a scommetterci sopra una somma più che discreta oppure se, con i miei precedenti articoli, sono riuscito a farvi innamorare di Python, allora non potete non leggere il resto!

Ricordo a tutti i miei lettori che questo, come tutti i miei articoli, è solo una piccola raccolta di miei appunti personali: appena terminata la lettura, se l’argomento stimola il vostro interesse, vi consiglio caldamente di approfondire i vari aspetti qui trattati nella documentazione del linguaggio.

Insomma, questa non è altro che una mini guida all’utilizzo di Python + GTK + Glade + gettext. Ed è proprio grazie a gettext che il mio amico della foto riesce ad esprimersi in qualsiasi lingua conosciuta (preparate i soldi…)!

Ma andiamo al sodo: abbiamo sviluppato un’applicazione in Python, abbiamo provveduto a costruire un’interfaccia con Glade e infine abbiamo bindato il tutto grazie a PyGTK, ora manca solo una cosa: internazionalizzarla. Come esempio pratico utilizzerò il mio autenticatore per GNOME.

Come prima cosa bisogna esportare le stringhe da mettere a disposizione del traduttore, ed è qui che viene in nostro aiuto xgettext. Questo simpatico comando consente di estrarre le stringhe da file sorgenti e supporta innumerevoli linguaggi di programmazione (C/C++, Python, Java, PHP e Glade formano solo una piccola selezione di essi), e senza neanche dover specificare in quale linguaggio sono scritti i nostri sorgenti: fa tutto da solo!

xgettext riconosce le stringhe presenti all’interno del codice e le raccoglie in un file .po, pronto per essere utilizzato come modello per le traduzioni, la sua sintassi è simile alla seguente:


xgettext modulo1.py modulo2.py interfaccia.glade > modello.pot

L’utility riconosce i linguaggi utilizzati nei singoli sorgenti e li esporta in un unico file, modello.pot, specificato alla fine della riga. Nota importante: gli elementi dell’interfaccia preparata con Glade devono essere impostati come «Translatable» all’interno del designer, altrimenti xgettext non esporterà nulla!

Una volta pronte le traduzioni andranno compilate, e qui posso consigliarvi un metodo piuttosto veloce, che consiste nell’utilizzare poEdit, il quale, oltre a salvare la traduzione nel formato .po la converte anche nel formato compilato .mo.

Finito? Mannò, dobbiamo ancora trovare il modo di caricare la traduzione del sistema a tempo di esecuzione!

Datemi il tempo di pensarci un po’ su… Trovato! :D Come al solito, i commenti sono embedded:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, gtk, gtk.glade
import gettext, locale

# Questo attributo memorizza il percorso dei nostri file .mo,
# i quali dovranno essere organizzati in un percorso del tipo:
# po/LINGUA/LC_MESSAGGES
# Per quanto riguarda la traduzione italiana della mia
# applicazione, per esempio, ho salvato il file .mo in:
# po/it_IT/LC_MESSAGES
local_path = os.path.realpath(os.path.dirname(sys.argv[0])) + '/po'

# Configura la localizzazione per la categoria scelta: con LC_ALL
# le prendo tutte!  L'altro parametro lo lasciamo vuoto,
# in questo modo verrà caricata la lingua di sistema
locale.setlocale(locale.LC_ALL, '')

# Configura le traduzioni e le binda al codice
for module in gtk.glade, gettext:
        module.bindtextdomain('gtk-rm3wifi-authenticator', local_path)
        module.textdomain('gtk-rm3wifi-authenticator')

# Ridefinisce _, in questo modo si potranno importare le
# traduzioni con una sintassi più breve.
import __builtin__
__builtin__._ = gettext.gettext

######### ......

Ecco fatto! Per caricare le traduzioni in tempo reale, tutte le stringhe presenti nel codice andranno modificate come nel seguente esempio:


# prima...
stringa = 'Stringa di prova'
# dopo!
stringa = _('Stringa di prova')

# prima...
print 'Ciao %s' % utente
# dopo!
print _('Ciao %s') % utente

# prima...
amici = ['Gwaihir',
        'BugMaN',
        'l3on',
        'guglielf',
        'totopalma']
# dopo!
amici = [_('Gwaihir'),
        _('BugMaN'),
        _('l3on'),
        _('guglielf'),
        _('totopalma')]

Ecco uno screenshot della mia applicazione in lingua inglese (il titolo della finestra in realtà è Preferences, questa schermata risale a qualche giorno fa):

aggiornamento_gtk-rm3wifi-authenticator

 

Ed eccola italianizzata (il titolo della finestra non si vede, ma è Preferenze…):

GTK Roma3 WiFi Authenticator in Italiano

 

 

Beh, io ho concluso, contento e soddisfatto di aver vinto anche questa scommessa: PAGARE! :D

 

Risorse

Link

Categorie
GTK Rm3WiFi Authenticator, GTK+, Guide e howto, Python, Traduzioni
Commenti RSS
Commenti RSS
Trackback
Trackback

« Ancora sull’autenticatore… Troppo figo per Internet Explorer »

2 risposte

poEdit?!?! Ma per piacere! Che traduttore sei!?!? Emacs rulez! :D PS: ma se

Milo | 28 Febbraio 2008 | 01:09

poEdit?!?! Ma per piacere! Che traduttore sei!?!?

Emacs rulez!

:D

PS: ma se metto un sito porno come website per i commenti va bene lo stesso? :D

[Reply]

Magari! Così mi rinfreschi la memoria! :D

quadrispro | 28 Febbraio 2008 | 21:40

Magari! Così mi rinfreschi la memoria! :D

[Reply]

Lascia un commento

Puoi usare questi tag : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Click to cancel reply

Argomenti

Aggiornamento Ambienti di sviluppo Audio Bug e problemi vari C Cazzate varie Compiz Fusion Comunità Italiana Documentazione e wiki Feisty Firefox GNOME GTK+ GTK Rm3WiFi Authenticator Guide e howto Gutsy Hardy Installation Report Generator Installazione e problemi all'avvio Intrepid Jaunty Java Kernel e moduli Last.fm Musica Notizie Open source & free software Planet Ubuntu-it Programmazione e sviluppo Python Siti,servizi & blog Società e media Traduzioni Ubuntu Università e scienza Viaggi Video Windows Wordpress Xfce Xubuntu

Ultimi commenti

  • quessin@mi su Il mio nuovo laptop: Acer Aspire One A150
  • Roberto su Ubuntu 9.04, chiamiamola per nome
  • Flavio su Roma3, anche Ingegneria esprime il suo dissenso
  • iced su Si riparte!
  • Fabio su Si riparte!

Tutti gli articoli

RSS Planet di Ubuntu-it

  • Aldo Latino (aldolat): Spammoni di fine luglio
  • Paolo Garbin (paolettopn): Intervista al Prof. Ing. Antonio Cantaro
  • Paolo Garbin (paolettopn): Come registrare le vostre chiamate con Skype…
  • Paolo Garbin (paolettopn): Licenza Creative Commons: perchè usarla…
  • Milo Casagrande: @ LA - Day 1

Blogroll

  • (LS) Lorenzo Sfarra
  • Bubuntu
  • crisis
  • Dagospia
  • Divilinux Lost Blog
  • Embrace’s Blog
  • Fradeve OpenBlog
  • Il blog di Totò
  • Il mondo di Paolettopn
  • Leo
  • Maurizio Moriconi
  • Milo Casagrande
  • Parzialmente scremato
  • TuxLinux
  • Ubuntu block notes

RSS alessio and friends on identi.ca

  • milo: back from Universal Studios, getting ready for dinner @ Fogo de Chao
  • milo: tired... but happy owner of a new fotocamera! :)
  • milo: is getting ready for another day in LA
  • milo: is tired... walking all day in LA...
  • milo: enjoyed breakfast with flapjacks+bananas @ TART
  • milo: is hating Los Angeles jet lag...
  • milo: is enjoying Los Angeles...
  • alessio: working
  • alessio: Workin on darcs package
  • alessio: packaging in progress, I think to leave Italian Doc Team seriously

Accedi o registrati

  • Registrati
  • Collegati
  • Voce RSS
  • RSS dei commenti
  • WordPress.org
rss Commenti RSS valid xhtml 1.1 design by jide powered by Wordpress get firefox