2009-03-10 9 views
1

J'écris un jeu qui est principalement destiné aux systèmes GNU/Linux et Mac OS X, mais j'ai gardé les choses assez portables dans la plupart de mon code.Utiliser GNU gettext sur Win32

J'ai porté presque tous les trucs spécifiques au système d'exploitation à Windows; la seule chose qui reste est i18n.

Ma question est

Comment suis-je censé utiliser la fonction setlocale() Win32 avec gettext?

Jusqu'à présent, je me sers des codes ISO 638/ISO 3166 (ex.), mais ceux-ci ne semble pas fonctionner sous Windows.

J'ai essayé setlocale (LC_ALL, "German"), qui réussit, mais gettext ne peut pas trouver les chaînes traduites correctement, même après avoir utilisé bindtextdomain.

Des indices? Je voudrais rester avec GNU gettext pour éviter de réécrire des tas de code.

Répondre

2

Eh bien, après quelques recherches, j'ai trouvé la réponse: setlocale() sur Windows ne fait rien pour gettext. gettext utilise l'environnement de l'utilisateur et les paramètres régionaux du thread (voir GetThreadLocale, SetThreadLocale). Si les paramètres régionaux du thread sont utilisés, le LCID renvoyé est transformé en une chaîne de langage avec ISO 639 et 3166 (ex. En_US) et la recherche se poursuit sur * nix.

+0

Est-il possible de m'envoyer votre port? J'ai les mêmes problèmes en fait, il n'y a que des bacs win32 obsolètes autour :( – driAn

+0

Nvm, l'a trouvé @ http://epicofthalia.net – driAn

0

Si vous pouvez lire par exemple Python, il est mon petit projet qui aide à convertir locale fenêtres ids gettext codes linguistiques comme de_DE: https://launchpad.net/gettext-py-windows

En bref, vous devez obtenir LCID avec la fonction GetUserDefaultLCID() qui vous renvoie un identifiant entier . Ensuite, vous devez mapper cette valeur au code de chaîne. En Python, il est la carte dans le module standard locale.py: voir windows_locale dictionnaire au bas du fichier http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

La liste des ids locale Windows, vous pouvez trouver ici: http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

Une fois que vous aurez le code de langue (de_DE) vous devez le transmettre directement à la bibliothèque gettext ou indirectement en utilisant la variable d'environnement LANGUAGE.

Questions connexes