Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 15 Strings
  Pfeil 15.1 Arbeiten mit Zeichenketten – string
    Pfeil 15.1.1 Ein einfaches Template-System
  Pfeil 15.2 Reguläre Ausdrücke – re
    Pfeil 15.2.1 Syntax regulärer Ausdrücke
    Pfeil 15.2.2 Verwendung des Moduls
    Pfeil 15.2.3 Ein einfaches Beispielprogramm – Searching
    Pfeil 15.2.4 Ein komplexeres Beispielprogramm – Matching
  Pfeil 15.3 Lokalisierung von Programmen – gettext
    Pfeil 15.3.1 Beispiel für die Verwendung von gettext
  Pfeil 15.4 Hash-Funktionen – hashlib
    Pfeil 15.4.1 Verwendung des Moduls
    Pfeil 15.4.2 Beispiel
  Pfeil 15.5 Dateiinterface für Strings – StringIO


Galileo Computing - Zum Seitenanfang

15.3 Lokalisierung von Programmen – gettext  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul gettext der Standardbibliothek ist bei der Internationalisierung und Lokalisierung von Python-Programmen von Nutzen. Mit Internationalisierung, auch als »I18N« abgekürzt, wird der Vorgang bezeichnet, die Benutzerschnittstelle eines Programms so zu abstrahieren, dass sie sehr leicht an fremde sprachliche oder kulturelle Umgebungen angepasst werden kann. Als Lokalisierung, was auch mit »L10N« abgekürzt wird, wird dann das Anpassen des Programms an die Gegebenheiten eines bestimmten Landes oder einer Region bezeichnet. Beachten Sie, dass sich das Modul gettext dabei auf die Übersetzung von Strings beschränkt. Andere Unterschiede, wie beispielsweise Datumsformate oder Währungssymbole, werden nicht berücksichtigt.

Das Modul gettext lehnt sich an die GNU gettext API an, die als Teil des GNU-Projekts weit verbreitet ist und die rein sprachliche Anpassung eines Programms gewährleistet. Das Modul erlaubt es, eine möglichst genaue Nachbildung der GNU gettext API zu verwenden. Zudem ist eine gegenüber der GNU gettext API etwas abstraktere, objektorientierte Schnittstelle vorhanden, auf die wir uns in diesem Abschnitt beziehen werden.

Zunächst ein paar Worte dazu, wie die Lokalisierung eines Programms vonstattengeht. Der Programmierer schreibt sein Programm, in dem die Benutzerführung vorzugsweise in englischer Sprache stattfindet. Zur Internationalisierung des Programms wird jeder String, der ausgegeben werden soll, durch eine sogenannte Wrapper-Funktion geschickt. Das ist eine Funktion, die den nicht-lokalisierten englischen String als Parameter übergeben bekommt und die passende Übersetzung zurückgibt.

Intern verwendet gettext zur Übersetzung verschiedene Sprachkompilate. Das sind Binärdateien, die die Übersetzung des Programms in jeweils eine bestimmte Sprache enthalten. Diese Binärdateien werden aufgrund ihrer Dateiendung .mo-Dateien genannt. Wie diese Dateien erzeugt werden, wird unter anderem Inhalt des nächsten Abschnitts sein.


Galileo Computing - Zum Seitenanfang

15.3.1 Beispiel für die Verwendung von gettext  topZur vorigen Überschrift

Das Modul gettext spielt immer dann eine Rolle, wenn ein Programm veröffentlicht und somit einer großen Gruppe von Anwendern zugänglich gemacht wird. Dabei ist es besonders bei Open-Source-Projekten üblich, dass das Programm ursprünglich nur in einer oder zwei Sprachen veröffentlicht wird und weitere Übersetzungen später von den Anwendern erstellt und an den Autor geschickt werden. Damit dies funktioniert, sollte der Programmierer jedoch zumindest die Übersetzbarkeit seines Programms gewährleisten.

An dieser Stelle soll die Verwendung von gettext an einem kleinen Beispielprogramm gezeigt werden. Dabei kann selbstverständlich nicht die vollständige Funktionalität von gettext zum Tragen kommen. Der Quellcode des Beispielprogramms sieht folgendermaßen aus:

import gettext 
import random
trans = gettext.translation("meinprogramm", "locale", ["de"]) trans.install()
werte = [] while True: w = raw_input(_("Please enter a value: ")) if not w: break werte.append(w) print _("The random choice is: %s") % random.choice(werte)

Das Programm selbst ist unspektakulär, es liest so lange Strings vom Benutzer ein, bis einer dieser Strings leer ist, der Benutzer also gedrückt hat, ohne eine Eingabe zu tätigen. Dann wählt das Programm zufällig einen dieser Strings und gibt ihn aus. Mit diesem Programm könnte also beispielsweise eine zufällig gewählte Person einer Gruppe für den nächsten Samstagabend zum Fahrer ernannt werden. Beachten Sie aber besonders, dass die Interaktion mit dem Benutzer ausschließlich auf Englisch geschieht, jeder String, der ausgegeben wird, aber vorher durch eine Funktion namens _ geschickt wird. Beachten Sie außerdem bei der print-Ausgabe, dass die Funktion _ um den mit einem Platzhalter behafteten String geschrieben wurde, also bevor der Platzhalter durch dynamischen Inhalt ersetzt wurde. Das ist wichtig, da sonst keine Übersetzung erfolgen kann.

Der eigentlich interessante Teil des Programms sind die beiden Zeilen nach den import-Anweisungen:

trans = gettext.translation("meinprogramm", "locale", ["de"]) 
trans.install()

Hier wird ein sogenanntes Translation-Objekt erstellt. Das ist eine Instanz, die die Übersetzung aller Strings in eine bestimmte Sprache gewährleistet. Um ein solches Objekt zu erstellen, wird die Funktion gettext.translation aufgerufen. Diese bekommt einen frei wählbaren Namen, die sogenannte Domain, als ersten Parameter. Der zweite Parameter ist das Unterverzeichnis, in dem sich die Übersetzungen befinden, und der dritte Parameter ist schließlich eine Liste von Sprachen. Das Translation-Objekt übersetzt nun in die erste Sprache aus der Liste, für die ein Sprachkompilat gefunden werden kann.

Durch Aufruf der Methode install des Translation-Objekts installiert dieses seine interne Übersetzungsmethode als Funktion _ im lokalen Namensraum. Damit werden alle Strings, mit denen die Funktion _ aufgerufen wird, in die Sprache übersetzt, für die das Translation-Objekt steht, sofern denn eine Übersetzung verfügbar ist.

Erstellen des Sprachkompilats

Zum Erstellen des Sprachkompilats muss zunächst eine Liste aller zu übersetzenden Strings erstellt werden. Das sind all jene, die vor der Ausgabe durch die Funktion _ geschickt werden. Da es eine unzumutbare Arbeit wäre, diese Liste von Hand anzufertigen, ist in Python ein Programm namens pygettext.py [Unter Windows finden Sie das Programm pygettext.py im Unterordner Tools/i18n Ihrer Python-Installation. Unter Unix-ähnlichen Betriebssystemen wie beispielsweise Linux sollte sich die Programmdatei im Systempfad befinden und direkt ausführbar sein. ] im Lieferumfang enthalten, das genau dies für Sie erledigt. Das Programm erstellt eine sogenannte .po-Datei. Das ist eine für Menschen lesbare Variante des .mo-Dateiformats. Diese .po-Datei wird dann von den Übersetzern in verschiedene Sprachen übersetzt. Dies kann von Hand geschehen oder durch Einsatz diverser Tools, die für diesen Zweck existieren. Die für unser Beispielprogramm erzeugte .po-Datei sieht folgendermaßen aus:

[…]
#: main.py:9 msgid "Please enter a value: " msgstr "Bitte geben Sie einen Wert ein: "
#: main.py:13 msgid "The random choice is: %s" msgstr "Die Zufallswahl ist: %s"

Anstelle der Auslassungszeichen enthält die Datei Informationen wie etwa den Autor, die verwendete Software oder das Encoding der Datei.

Eine übersetzte .po-Datei kann durch das Programm msgfmt.py [Unter Windows finden Sie das Programm msgfmt.py im Unterordner Tools/i18n Ihrer Python-Installation. Unter Unix-ähnlichen Betriebssystemen wie beispielsweise Linux sollte sich die Programmdatei im Systempfad befinden und direkt ausführbar sein. ] , das ebenfalls im Lieferumfang von Python vorhanden ist, in das binäre .mo-Format kompiliert werden. Ein fertiges Sprachkompilat muss sich in folgendem Ordner befinden, damit es von gettext als solches gefunden wird:

Programmverzeichnis/Unterordner/LC_MESSAGES/Sprache/Domain.mo

Der Name des Verzeichnisses Unterordner wird beim Aufruf der Funktion gettext.translate angegeben und war in unserem Beispiel locale. Dieses Verzeichnis muss ein Unterverzeichnis namens LC_MESSAGES haben, in dem für jede vorhandene Sprache ein weiteres Unterverzeichnis existieren muss. Das Sprachkompilat selbst muss die im Programm angegebene Domain als Namen haben.

In unserem Beispielprogramm muss das Sprachkompilat also in folgendem Verzeichnis liegen:

Programmverzeichnis/locale/LC_MESSAGES/de/meinprogramm.mo

Wenn das Sprachkompilat nicht vorhanden ist, wird beim Aufruf der Funktion gettext.translate eine entsprechende Exception geworfen:

Traceback (most recent call last): 
  […] 
IOError: [Errno 2] No translation file found for domain: 'meinprogramm'

Wenn das Sprachkompilat an seinem Platz ist, werden Sie beim Ausführen des Programms feststellen, dass alle Strings ins Deutsche übersetzt wurden:

Bitte geben Sie einen Wert ein: Donald Duck 
Bitte geben Sie einen Wert ein: Daisy Duck 
Bitte geben Sie einen Wert ein: Onkel Dagobert 
Bitte geben Sie einen Wert ein: 
Die Zufallswahl ist: Donald Duck

Mit dem Modul gettext ist es also möglich, ein Programm ohne großen Aufwand in mehrere Sprachen zu übersetzen und darüber hinaus zu einem späteren Zeitpunkt weitere Sprachen hinzuzufügen, ohne große Änderungen am Programm selbst durchführen zu müssen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo