Ausgabe in deutsch?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hallo!

Ich hab vor ein paar Wochen hier mal gelesen, dass man die Ausgabe von Python auch auf deutsch umstellen kann. Leider weiß ich gerade absolut nicht wonach ich suchen soll, um den Thread wiederzufinden. Wäre nett, wenn mir das hier jemand verraten könnte. :)

Optimal wäre eine Umstellung, die nur während Laufzeit meines Skriptes gilt, weil ich da eben über Optionen eine deutsche und eine englische Ausgabe verwirklichen möchte.

Gruß

Sebastian
Fabian Kochem
User
Beiträge: 36
Registriert: Mittwoch 5. April 2006, 14:11
Wohnort: Köln

Welche Ausgabe von Python meinst du?
Die Texte, die ausgegeben werden, wenn z.B. ein Fehler geschmissen wird? Definier einfach eigene Exceptions und überschreibe damit die vorhandenen (siehe [mod]exceptions[/mod]).

Ansonsten, wenn du auch deinen eigenen Programmtext ändern willst, würde ich dir vorschlagen, mal nach i18n zu googlen. Das würde ich schon fast als Standard für solche Sachen bezeichnen, das Python-Modul hierfür heißt [mod]gettext[/mod].
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Okay, etwas konkreter: Inspiriert durch BlackJacks Beitrag im UU-Forum schrieb ich mir ein kleines Skript:

Code: Alles auswählen

import sys
import unicodedata

for char in sys.argv[1]:
    print '%s : %s' % (char, unicodedata.name(char.decode('utf-8')))
Ich dachte nun, das mein Skript vielleicht auch die deutschen Bezeichnungen für die Zeichen angeben könnte. Vielleicht geht das auch gar nicht, keine Ahnung...
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Das geht deswegen nicht, weil es keine offizielle deutsche Bezeichnung dafür gibt.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Okay, schade. Trotzdem danke für die Info.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eine Frage habe ich noch, auch wenn sie nicht wirklich zum Thread-Thema passt: Ich hab's jetzt mal zum Testen mit einem deutschen Encoding probiert. Weiß jemand wieso ich hier zwei Zeichen zurückbekomme, mal ganz davon ab, dass keins davon ein 'ä' ist?

Code: Alles auswählen

sebastian@hardy:~$ python get_char_name.py 'bäh'
b : LATIN SMALL LETTER B
à : LATIN CAPITAL LETTER A WITH TILDE
¤ : CURRENCY SIGN
h : LATIN SMALL LETTER H
Der Quelltext dazu ist:

Code: Alles auswählen

import sys
import unicodedata

for char in sys.argv[1]:
    char = char.decode('iso-8859-1')
    print '%s : %s' % (char, unicodedata.name(char))
Das muss ja an der Shell (Bash) liegen, denn im Interpreter funktioniert es. Da allerdings mit utf-8:

Code: Alles auswählen

In [47]: unicodedata.name('ä'.decode('utf-8'))
Out[47]: 'LATIN SMALL LETTER A WITH DIAERESIS'
Setze ich utf-8 in den Quelltext ein, bekomme ich wiederum ne Exception:

Code: Alles auswählen

sebastian@hardy:~$ python get_char_name.py 'bäh'
b : LATIN SMALL LETTER B
Traceback (most recent call last):
  File "get_char_name.py", line 5, in <module>
    char = char.decode('utf-8')
  File "/usr/lib/python2.5/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: unexpected end of data
Hat jemand ne Idee wie meine Umlaute auch außerhalb des Interpreters richtig behandelt werden?
Fabian Kochem
User
Beiträge: 36
Registriert: Mittwoch 5. April 2006, 14:11
Wohnort: Köln

Code: Alles auswählen

import sys
import unicodedata

inp = sys.argv[1].decode('utf-8')

for char in inp:
    print '%s : %s' % (char, unicodedata.name(char))
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Danke, darauf kam ich nicht.
BlackJack

Und das liegt daran, dass Du in Deiner Schleife nicht über die drei Zeichen sondern über die vier Bytes itertiert hast, die 'bäh' in UTF-8 kodiert belegt. Die beiden Bytes, die zusammen das 'ä' kodieren, machen einzeln als UTF-8 keinen Sinn.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Danke für die Erklärung. Sowas hatte ich schon vermutet als ich das probiert habe:

Code: Alles auswählen

In [7]: char = 'a'

In [8]: char
Out[8]: 'a'

In [9]: char = 'ä'

In [10]: char
Out[10]: '\xc3\xa4'
Antworten