2009-03-10 3 views
1

Ich schreibe ein Spiel, das hauptsächlich für GNU/Linux und Mac OS X-Systeme ausgerichtet ist, aber ich habe die Dinge in den meisten meiner Code ziemlich portabel.Verwenden von GNU gettext auf Win32

Ich habe fast alle OS-spezifischen Sachen nach Windows portiert; das einzige, was übrig bleibt, ist i18n.

Meine Frage ist

Wie bin ich Win32 der setlocale() Funktion zusammen mit gettext verwenden soll?

Bisher Ich habe mit ISO 638/ISO 3166-Codes (ex.), aber diese scheinen nicht unter Windows zu arbeiten.

Ich habe versucht, Setlocale (LC_ALL, "Deutsch"), was erfolgreich ist, aber Gettext kann die übersetzten Strings nicht finden, auch nach der Verwendung von bindtextdomain.

Irgendwelche Hinweise? Ich würde gern bei GNU Gettext bleiben, um das Umschreiben von Code zu vermeiden.

Antwort

2

Nun, nach etwas graben, fand ich die Antwort: setlocale() unter Windows tut nichts für gettext. gettext verwendet die Umgebung des Benutzers und das Gebietsschema des Threads (siehe GetThreadLocale, SetThreadLocale). Wenn das Gebietsschema des Threads verwendet wird, wird die zurückgegebene LCID in eine Sprachzeichenfolge mit ISO 639 und 3166 (ex. En_US) umgewandelt, und die Suche wird wie bei * nix fortgesetzt.

+0

Jede Chance, die Sie mir Ihren Hafen schicken können? Ich habe die gleichen Probleme tatsächlich, es gibt nur veraltete win32 Bins herum :( – driAn

+0

Nvm, fand es @ http://epicofthalia.net – driAn

0

Wenn Sie Python Beispiel lesen kann, gibt es mein kleines Projekt, das Windows-Gebietsschema-IDs zu konvertieren hilft Sprachcodes gettext wie de_DE: https://launchpad.net/gettext-py-windows

Kurz gesagt müssen Sie erhalten LCID mit Funktion GetUserDefaultLCID(), die Sie eine ganze Zahl id zurückgibt . Dann müssen Sie diesen Wert dem Zeichenfolgencode zuordnen. In Python gibt es Karte im Standardmodul locale.py: windows_locale Wörterbuch in der Nähe der Unterseite der Datei http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

Die Liste der Windows-Gebietsschema-IDs finden Sie hier: http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

Sobald Sie den Sprachcode haben (de_DE) Sie müssen es entweder direkt an die gettext-Bibliothek übergeben oder indirekt mit der Umgebungsvariablen LANGUAGE.