Wie geht man am besten vor, um ein Programm mit GUI zu internationalisieren?
-
Wie ist die beste Vorgehensweise, damit ein Programm hinterher ohne viel Aufwand für alle möglichen Sprachen bereit gestellt werden kann?
Gibt es da einen typischen Ansatz oder soll ich einen eigenen Parser schreiben der die entsprechenden Textstrings aus einer XML Datei liest und dann in die GUI an den jeweiligen Menüpunkt mit der entsprechenden Sprache einfügt?
Oder gibt es da schon unterstützende Librarys für genau diesen Zweck?
In meinem entsprechenden Fall werde ich übrigens das Programm in gtk+ schreiben und es wird crossplattform fähig sein müssen, gibt es dafür eventuell entsprechende Library die die internationalisierung erleichernt?
-
Hast du dir schon mal GNU gettext angeschaut?
-
Nein, ich befasse mich erst seit heute mit diesem Thema, habe also keine Ahnung was es da so gibt.
-
dlls mit textstring resourven drinne
-
Eine normale Textdatei tut's auch ...
-
Und wie löst man das Problem das die Steuerelemente für jede Sprache unterschiedlich groß sind?
-
Indem man die Größen in Abhängigkeit der Strings berechnet. Dazu bietet jedes GUI-API/Framework Mechanismen an ...
-
oder nimm französisch als referenz, dann noch 20% sicherheitsgröße und dann müßte es laufen.
auf keinen fall sollte man resourcen irgendwo reinkompilieren, das ist echt ein übler hack für die, die es nicht besser wissen.
du kannst alternativ dir ein xml pro sprache anlegen und dann sollte man mit den meisten xml parsen Unicode rausparsen können. es gibt auch kleine datenbanken für solche fälle.
ich gehe meistens so vor für meine projekte die lokalisierung brauchen:#define LOCASTRING(n) CLocaString(n).c_str()
im normalen modus wird einfach wieder dieser string zurückgeliefert.
wenn das projekt fertig ist, dann wird im konstruktor von CLocaString ein hash ausgerechnet, damit wird dann aus einer map der passende lokalisierte string gelesen (ebenfalls im konstruktor).beim starten der applikation wird die map mit den strings gefüllt, die textdatei kann dann aus
HASH textblabla... HASH nochmehrblabla.. . . .
bestehen, pro sprache.
damit das ganze noch ein wenig automatischer läuft, durchsucht am ende eines projektes ein kleiner parser alle dateien nach "LOCASTRING" (nur deswegen braucht man das macro, um normale konstruktoraufrufe von CLocaString zu ignorieren) durch, und generiert die referenzliste mit den hashes.
die liste kann dann sehr leicht zur übersetzung gegeben werdennaja.. ist meine triviallösung mit der ich auf pc, mobilephones, konsolen... leben kann.
rapso->greets();
-
resourcen dlls benutzen, macht windows auch so. alles andere is quatsch.
-
Die meisten GTK+ (und zahlreiche andere Programme, besonders aus dem Linux Umfeld) benutzen GNU gettext. Das ist auch relativ Platform unabhängig, im Gegensatz zu DLL gewurschtel.
-
Qt hat auch ein platformunabhängiges Internationalisierungssystem:
-
Ok, danke an alle, dann werde ich mich mal mit gettext auseinandersetzen.
DLLs kann ich nicht gebrauchen, das projekt soll wie schon gesagt plattformunabhängig sein.