Alessio Treglia

everybody lies
  • Quality Assurance
  • EN blog
  • Inizio
  • Chi sono
  • Roma3 WiFi Authenticator
  • Installation Report Generator
  • Preventivi e consulenze

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

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 »

3 Responses to “Il giro del mondo in pochi minuti con PyGTK, Glade e gettext!”

  1. Milo scrive:
    28 febbraio 2008 alle 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

    Replica
  2. quadrispro scrive:
    28 febbraio 2008 alle 21:40

    Magari! Così mi rinfreschi la memoria! :D

    Replica
  3. Ivan! scrive:
    28 luglio 2009 alle 23:00

    grazie mille!

    questo tutorial mi è stato molto utile :D
    tutorial molto chiaro e semplice

    :)

    Replica

Leave a Reply

Fare clic per cancellare la replica.

Chi sono

Se volete contattarmi, potete utilizzare l'apposito form.

Powered by Netsons

Google Friend Connect

Argomenti

Acer Aspire One Aggiornamento Ambienti di sviluppo Arte,libri & Cultura Audio Bug e problemi vari C Compiz Fusion Comunità internazionale Comunità Italiana Cose varie Debian Documentazione e wiki Esperienze Feisty Firefox GNOME GTK+ GTK Rm3WiFi Authenticator Guide e howto Gutsy Hardy Iniziative Installation Report Generator Installazione e problemi all'avvio Intrepid Jaunty Java Karmic Kernel e moduli Last.fm Linpus Lucid MSI U90 Musica Netbook Remix Notizie ONDA MT503HSA Open source & free software Planet Ubuntu-it Programmazione e sviluppo Python Siti,servizi & blog Società e media Traduzioni Ubuntu Ubuntu Developer Summit Università e scienza Viaggi Video Windows Wordpress Xfce Xubuntu

Ultimi commenti

  • Pixel su Cinque fantastici ricordi di Londra
  • quadrispro su Ubuntu aiuta a diffondere i virus per Windows
  • gigi su Ubuntu aiuta a diffondere i virus per Windows
  • DarkJackAho su Windows 7, un silenzioso terrorista
  • quadrispro su Windows 7, un silenzioso terrorista

Tutti gli articoli

RSS Planet di Ubuntu-it

  • Fabio Colinelli (Pixel): Sotto il vestito niente… speriamo di no!!!
  • Riccardo Filippone (ethernaly): Ubisoft-DRM: Online richiesto per il single player
  • Divilinux: Linux kernel 2.6.33: does not match current version
  • Luca Ferretti: A New Deal
  • Salvatore Palma (totò): Newsletter italiana numero 9 del 2010

Blogroll

  • (LS) Lorenzo Sfarra
  • Antonio Doldo Linux Blog
  • Bubuntu
  • crisis
  • Dagospia
  • Divilinux Lost Blog
  • Embrace’s Blog
  • Fabrizio Balliano
  • Fradeve OpenBlog
  • Il blog di Totò
  • Il mondo di Paolettopn
  • Leo
  • Maurizio Moriconi
  • Milo Casagrande
  • Palla's Home
  • Parzialmente scremato
  • sottovoce per non svegliare il cane
  • TuxLinux
  • Ubuntu block notes

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