Hallo,
ich erstelle gerade mit pygettexz eine multilinguale SW-Version. Das hat auch alles funktioniert. Nur ein Problem gibt es noch. Ich habe den Text in einem Modul ersetzt und weiss jetzt nicht wo Python nach dem übersetzten .mo File sucht ? In dem Pfad des aufrufenden Files in locale jedenfalls nicht. Hat jemand dami Erfahrung ?
Das ist die Struktur:
Hier steht das ausführende File
D:\Software-CD\software-CD
Hier liegen die anderen .mo Files:
D:\Software-CD\software-CD\locale\en\LC_MESSAGES
Hier liegt das Modul:
D:\Software-CD\software-CD\plugins\ToolsCD
ciao
Dominik
pygettext - wo locale ???
-
- User
- Beiträge: 8
- Registriert: Freitag 6. Februar 2009, 12:08
- Wohnort: Heidelberg
B-Q-L
Dominik
Dominik
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Es scheint keine gute Idee zu sein, noch pygettext zu verwenden: Zitat Pygettext manpage
pygettext is deprecated. The current version of xgettext supports many languages, including Python.
-
- User
- Beiträge: 37
- Registriert: Samstag 15. August 2009, 04:36
Ich versuche mich ja auch gerade an der Lokalisierung meines Programmes und verfolge gerade diesen Ansatz
Dies funktioniert unter Linux einwandfrei, unter OS X solange man es nicht versucht mit py2App (distutils) zu bundeln und unter Windows bisher leider überhaupt nicht, woran ich gerade rumtüftle.
Solltest Du vor mir Erfolg haben, zögere bitte nicht es hier mitzuteilen.
Mir scheint der ganze Komplex locale, gettext & Co ist alles andere als trivial
LG SB
Code: Alles auswählen
# some imports
APPDIR = os.path.split( os.path.realpath( sys.argv[0] ) )[0]
LOCALEDIR = os.path.join( APPDIR, "locale" )
# some other code
if __name__ == "__main__":
# Plattform erkennen
if platform.system() == 'Windows':
system = 'win'
locale.setlocale( locale.LC_ALL, '' )
language_code, encoding = locale.getlocale()
elif platform.system() == 'Darwin':
system = 'mac'
language_code = NSLocale.currentLocale().localeIdentifier()
else:
system = 'other'
locale.setlocale( locale.LC_ALL, '' )
language_code, encoding = locale.getlocale()
# Localelize
gettext.bindtextdomain( 'ScaleIt4BB', LOCALEDIR )
gettext.install( 'ScaleIt4BB', LOCALEDIR, language_code, unicode )
Solltest Du vor mir Erfolg haben, zögere bitte nicht es hier mitzuteilen.
Mir scheint der ganze Komplex locale, gettext & Co ist alles andere als trivial
LG SB
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!mkallas hat geschrieben:Es scheint keine gute Idee zu sein, noch pygettext zu verwenden: Zitat Pygettext manpagepygettext is deprecated. The current version of xgettext supports many languages, including Python.
Trotzdem -- pygettext funktioniert einwandfrei unter Linux und Windows und wird von mir täglich genutzt.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Dominik!
In meiner aktuellen Webanwendung kann die Übersetzung dynamisch verwendet werden. Du hast zwar keine Webanwendung, aber ich denke mal, dass du vielleicht daran interessiert bist, wie ich die Übersetzungen in das Programm einschleuse.
Kleiner Auszug aus dem Modul, welches für die Übersetzung zuständig ist:
``get_current_language`` ist eine Funktion, die die eingestellte Sprache des Benutzers zurück gibt. Dies kann z.B. "de", oder "de_AT" sein. Oder natürlich auch "en_US" oder "en". Sie ist jetzt nicht wichtig. Wichtig ist nur, dass sie einen Text mit dem ISO-Kürzel für die gewünschte Sprache zurück gibt.
LOCALEDOMAIN_TEMPLATES ist einfach nur ein String, der die Anwendung eindeutig kennzeichnet.
LOCALEDIR ist wie bei dir der "locale"-Ordner.
Im Programm und in den HTML-Vorlagen verwende ich dann ``ugettext``.
mfg
Gerold
In meiner aktuellen Webanwendung kann die Übersetzung dynamisch verwendet werden. Du hast zwar keine Webanwendung, aber ich denke mal, dass du vielleicht daran interessiert bist, wie ich die Übersetzungen in das Programm einschleuse.
Kleiner Auszug aus dem Modul, welches für die Übersetzung zuständig ist:
Code: Alles auswählen
import gettext
...
def get_translation_obj():
"""
Gibt das für die aktuelle Sprache zuständige *gettext.translation*-Objekt
zurück
"""
current_language = get_current_language()
if len(current_language) <= 2:
languages = [current_language]
else:
languages = [current_language, current_language[:2]]
return gettext.translation(
LOCALEDOMAIN_TEMPLATES, localedir = LOCALEDIR,
languages = languages, fallback = True
)
LOCALEDOMAIN_TEMPLATES ist einfach nur ein String, der die Anwendung eindeutig kennzeichnet.
LOCALEDIR ist wie bei dir der "locale"-Ordner.
Im Programm und in den HTML-Vorlagen verwende ich dann ``ugettext``.
Code: Alles auswählen
_ = get_translation_obj().ugettext
message = _(u"Achtung, fliegende Kokosnüsse...")
...
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.