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
Ausgabe in deutsch?
-
- 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].
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].
Okay, etwas konkreter: Inspiriert durch BlackJacks Beitrag im UU-Forum schrieb ich mir ein kleines Skript:
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...
Code: Alles auswählen
import sys
import unicodedata
for char in sys.argv[1]:
print '%s : %s' % (char, unicodedata.name(char.decode('utf-8')))
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?
Der Quelltext dazu ist:
Das muss ja an der Shell (Bash) liegen, denn im Interpreter funktioniert es. Da allerdings mit utf-8:
Setze ich utf-8 in den Quelltext ein, bekomme ich wiederum ne Exception:
Hat jemand ne Idee wie meine Umlaute auch außerhalb des Interpreters richtig behandelt werden?
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
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))
Code: Alles auswählen
In [47]: unicodedata.name('ä'.decode('utf-8'))
Out[47]: 'LATIN SMALL LETTER A WITH DIAERESIS'
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
-
- 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))
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.
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'