Seite 1 von 1
Ausgabe in deutsch?
Verfasst: Donnerstag 28. August 2008, 13:48
von snafu
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
Verfasst: Donnerstag 28. August 2008, 14:04
von Fabian Kochem
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].
Verfasst: Donnerstag 28. August 2008, 14:16
von snafu
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...
Verfasst: Donnerstag 28. August 2008, 14:25
von Darii
Das geht deswegen nicht, weil es keine offizielle deutsche Bezeichnung dafür gibt.
Verfasst: Donnerstag 28. August 2008, 14:28
von snafu
Okay, schade. Trotzdem danke für die Info.
Verfasst: Donnerstag 28. August 2008, 15:48
von snafu
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?
Verfasst: Donnerstag 28. August 2008, 16:16
von Fabian Kochem
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))
Verfasst: Donnerstag 28. August 2008, 16:27
von snafu
Danke, darauf kam ich nicht.
Verfasst: Donnerstag 28. August 2008, 17:00
von 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.
Verfasst: Donnerstag 28. August 2008, 18:39
von snafu
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'