Internationalisierung mittels gettext *grübel*

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
Stromb
User
Beiträge: 2
Registriert: Mittwoch 21. September 2011, 14:35

Hallo zusammen,
ich versuche verzweifelt es einmal hinzubekommen, einige Strings zu
lokalisieren/internationalisieren (was ein Wort).

Mein Modul gettextExample.py ist daher sehr einfach gehalten und sieht
wie folgt aus:

Code: Alles auswählen

import gettext 
import locale 
import random 
current_locale, encoding = locale.getdefaultlocale() 

trans = gettext.translation('myapp', 'locale', [current_locale]) 
trans.install() 

values = [] 
while True: 
    w = raw_input(_(u"Please enter a value: ")) #wrapper 
    if not w: 
        break 
    values.append(w) 
print _(u"The random choice is: %s") % random.choice(values) #wrapper 
Dieses kompilierte Sprachfile "myapp.mo" (Yippiyeihooo, ich habs
hinbekommen) liegt auch schon unter:

<pyModulDir>/locale/de_DE/LC_MESSAGES

wenn ich nun obige Datei ausführe, kommt aber immer:
Traceback (most recent call last):
File "Z:\_PROJECTS\_PYTHON\0007_MathStrDate\gettextExample.py", line
16, in <module>
trans = gettext.translation('myapp', 'locale', [current_locale])
File "C:\Programme\Python\lib\gettext.py", line 478, in translation
t = _translations.setdefault(key, class_(fp))
File "C:\Programme\Python\lib\gettext.py", line 180, in __init__
self._parse(fp)
File "C:\Programme\Python\lib\gettext.py", line 337, in _parse
tmsg = unicode(tmsg, self._charset)
LookupError: unknown encoding: CHARSET
Es liegt also wohl an dieser Zeile:
trans = gettext.translation('myapp', 'locale', [current_locale])
Hat vielleicht einer Ahnung von Internationalisierung und kann mir
helfen?

Ich raffs nicht ... :x

Beste Grüße
Zuletzt geändert von Anonymous am Mittwoch 21. September 2011, 15:39, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Stromb: Das sieht so aus als wenn Du die `*.pot`-Datei nicht korrekt angepasst hast. Da stehen am Anfang ein paar Zeichenketten die Platzhalter enthalten, zum Beispiel ``CHARSET`` für den Zeichensatznamen der in dem die `*.pot`-Datei vorliegt.
jgillich
User
Beiträge: 16
Registriert: Donnerstag 15. September 2011, 16:20

Sollte

Code: Alles auswählen

import gettext 
nicht

Code: Alles auswählen

from gettext import gettext as _
heißen?
BlackJack

@jgillich: Kann man so machen, aber der `install()`-Aufruf stellt ein an die `gettext()`-Funktion gebundenes `_` global zur Verfügung.
Stromb
User
Beiträge: 2
Registriert: Mittwoch 21. September 2011, 14:35

Aaaaaaah, natürlich. Ein Encoding muss man in jedem Fall setzen. Gerade bei Internationalisierung gibt es da wohl keinen default :)

Manchmal sieht man den Wald vor lauter Bäumen nicht. Danke Euch BlackJack, jgillich

+1, gefällt mir :)

Hier mein angepasstes po-file...
# A basic language file.
# Copyright (C) 2011 kentuckeyschreitjodeldidoe
# Stromb del Stromboli <x@x.com>, 2011
#
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"POT-Creation-Date: 2011-09-21 17:22+Westeuropäische Sommerzeit\n"
"PO-Revision-Date: 2011-09-21 17:22+ZONE\n"
"Last-Translator: Stromb del Stromboli <x@x.com>\n"
"Language-Team: none <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-15\n"
"Content-Transfer-Encoding: iso-8859-15\n"
"Generated-By: pygettext.py 1.5\n"
jgillich
User
Beiträge: 16
Registriert: Donnerstag 15. September 2011, 16:20

BlackJack hat geschrieben:@jgillich: Kann man so machen, aber der `install()`-Aufruf stellt ein an die `gettext()`-Funktion gebundenes `_` global zur Verfügung.
Achso ok das war mir neu, wieder was gelernt. :)
Antworten