Seite 1 von 1

Mehrsprachiges Programm

Verfasst: Mittwoch 9. November 2005, 17:31
von SigMA
Servus =)
Ich habe eine Frage! :) (Schlau wa) und zwar:

Wie würdet ihr es anstellen um mehrere Sprache in euer Projekt einzubauen! Ich habe schon mal eine Idee gehabt:
Meine Idee hat geschrieben:In dem Ordner /hack/daten/lang/ liegen ganz viele Dateien die jede
die geforderten Sprachfunktionen enthält! (Wie das jetzt genau auf-
gebaut ist kann ich noch nicht sagen (muss mir das noch überlegen
(ja ich kann denken))) Die aktuelle Sprache kann der User in dem
ControllPanel/Setup.py einstellen! Diese Sprachdatei wird dann ge-
nommen und als lang.py in das /hack/ Verzeichniss kopiert. Jede Da-
tei importiert diese lang.py und greift darauf zu! Will man nun die
Sprache wechseln, so muss man nur die lang.py durch eine x-belibige
Sprachdatei ersetzten und schon klappet es prima :D
a) ist das system akzeptabel oder gibt es ein besseres System?
b) was soll am besten in den Sprachdateien stehen? So Funktionsmäßig:

Code: Alles auswählen

def error(nummer):
   if nummer == 42:
       print "Text"
oder soll das irgendwie mit Stringsarbeiten?

Code: Alles auswählen

error42 = """6*9 = 42"""
Was sind eure Ideen, oder wie würdet ihr das bauen?

Ich würde mich über Anregungen freuen! :)

SigMA

Verfasst: Mittwoch 9. November 2005, 18:21
von jens
Das hatte ich erst kürzlich hier gefragt :?

Verfasst: Mittwoch 9. November 2005, 19:10
von Leonidas
Gettext ist so ziemlich der Standard unter Freier Software.

Es ist sogar möglich, je nach Sprache, auf die das Betriebssystem eingestellt hat, die passende Sprache zu laden.

Verfasst: Donnerstag 10. November 2005, 13:48
von SigMA
jens hat geschrieben:Das hatte ich erst kürzlich hier gefragt :?
oh! :S Habs über die Suche nicht gefunden sorry :S

€dit: Ist gettext ein automatischer Übersetzter?

Verfasst: Donnerstag 10. November 2005, 16:04
von Leonidas
SigMA hat geschrieben:€dit: Ist gettext ein automatischer Übersetzter?
Nein, übersetzen musst du noch selbst :P

gettext sieht in etwa so aus: du Wrappst deine Strings in die Funktion _() und diese ersetzt bei Laufzeit die Strings und gibt die passenden, übersetzen Texte rein.

Verfasst: Donnerstag 10. November 2005, 17:52
von SigMA
Klingt kompliziert ... gibts da nen deutsches Tut?

Verfasst: Donnerstag 10. November 2005, 18:01
von Leonidas
SigMA hat geschrieben:Klingt kompliziert ... gibts da nen deutsches Tut?
Für Python? Nicht dass ich wüsste, in English gibt es die Dokumentation von gettext.

Es sieht so aus: Du schreibst ein Programm, welches _() Funktionen hat, darüber lässt du pygettext laufen, welches aus den Strings in den PY-Dateien eine POT-Datei erstellt. Diese kannst du beispielsweise mit poEdit editieren und dann als PO abspeichern (du kannst auch mit poEdit fertige PO-Dateien mit POT-Dateien aktualisieren, wenn neue Strings dazugekommen sind, so dass du nicht alles neu übersetzen musst). Dann lässt du msgfmt.py über deine PO-Dateien drüberlaufen, es erstellt daraus die passenden MO-Dateien. Diese musst du noch in den richtigen Ordner packen und deinem Programm sagen, dass es die Übersetungen aus diesem Ordner holen soll.

Verfasst: Donnerstag 10. November 2005, 18:03
von SigMA
ok ich werde mal es versuchen und von meinen (miss)erfolgen berichten ;D

€dit: oh ich versteh es einfach nicht :/ :(

Verfasst: Freitag 11. November 2005, 08:34
von henning
Es sieht so aus: Du schreibst ein Programm, welches _() Funktionen hat, darüber lässt du pygettext laufen, welches aus den Strings in den PY-Dateien eine POT-Datei erstellt.
Habe mich selbst noch nicht näher mit beschäftigt aber die man-page von pygettext sagt, dass es deprecated ist, und man xgettext nutzen sollte.

Verfasst: Freitag 11. November 2005, 09:19
von jens
Bei mir ist es auch noch nicht ganz aktuell, das Thema... Ich hatte eigentlich auch noch eine Frage gehabt, aber das hat sich nach einem blick auf dir Doku erledigt...

Ich hab hier mal Beispiele aus der Doku:

Code: Alles auswählen

import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
print _('This is a translatable string.')

message = _('writing a log message')
fp = file('mylog.txt', 'a')
fp.write(message)
fp.close()

#ungettext(singular, plural, n)
n = len(os.listdir('.'))
cat = GNUTranslations(somefile)
message = cat.ungettext(
    'There is %(num)d file in this directory',
    'There are %(num)d files in this directory',
    n) % {'num': n}
Wie wäre es mit einer neuen Wiki-Seite zum Thema? :lol:

Verfasst: Freitag 11. November 2005, 12:40
von Leonidas
jens hat geschrieben:Wie wäre es mit einer neuen Wiki-Seite zum Thema? :lol:
Okay, ich überlege gerade wie man sie nennen sollte? GetText wäre etwas stark gettext-Spezifisch, denn locale sollte auch beschreiben werden. Internationalisierung und Lokalisierung wären etwas lang, l10n würde das ganze Thema auch nicht ganz richtig beschreiben, also am ehesten noch i18n oder in Großbuchstaben I18N.

Wobei.. ich sollte mal endlich wieder an NeuereVersionen weiterschreiben :?

Verfasst: Freitag 11. November 2005, 14:10
von SigMA
Ne WikiPage fänd ich gut :D Dann würde ich es garantiert verstehen :D

Verfasst: Freitag 11. November 2005, 15:21
von Joghurt
Probiers doch erstmal mit der Doku, und wenn du nicht weiterkommst, poste einfach eine Frage.