2009-03-10 32 views
1

Ben çoğunlukla GNU/Linux ve Mac OS X sistemleri için tasarlanmış bir oyun yazıyorum, ancak kodumu çoğunda işleri oldukça taşınabilir tutuyorum.Win32 üzerinde GNU gettext kullanarak

Neredeyse tüm OS'ye özgü şeyleri Windows'a taşıdım; kalan tek şey i18n.

Sorum ben gettext ile birlikte Win32'nin setlocale() işlevi kullanmak nasıl yapayım bu

mı?

Şu ana kadar, ISO 638/ISO 3166 kodları (örn.) kullanıyorum, fakat bu Windows üzerinde çalışmak için görünmüyor.

Başarılı bir şekilde setlocale (LC_ALL, "Almanca") denedim, ancak bindtextdomain alanını kullandıktan sonra bile gettext, çevrilmiş dizeleri doğru olarak bulamıyor.

Herhangi bir ipucu? Kod yığınlarının yeniden yazılmasını önlemek için GNU gettext ile yapıştırmak istiyorum.

cevap

2

Biraz kazma işleminden sonra, cevabı buldum: Windows'da setlocale(), gettext için hiçbir şey yapmıyor. gettext, kullanıcının ortamını ve iş parçacığı yerel ayarını kullanır (bkz. GetThreadLocale, SetThreadLocale). İş parçacığı yerel ayarı kullanılıyorsa, döndürülen LCID, ISO 639 ve 3166 (örn. En_US) ile bir dil dizisine dönüştürülür ve arama, * nix'de olduğu gibi devam eder. size bir tamsayı kimliği döndüren fonksiyonu GetUserDefaultLCID() ile LCID almanız gerekir Kısacası https://launchpad.net/gettext-py-windows

: Python örneği okuyabiliyorsanız de_DE gibi dil kodlarını gettext pencereler yerel kimlikleri dönüştürmek için yardımcı olur benim küçük proje

+0

Bana limanı gönderebilme şansın var mı? Ben aslında aynı sorunları yaşıyorum, orada sadece güncel olmayan win32 kutuları vardır: ( – driAn

+0

Nvm, @ http://epicofthalia.net bulundu – driAn

0

var . Sonra bu değeri dize koduna eşleştirmeniz gerekir. dosyanın http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

burada bulabilirsiniz Windows yerel kimlikleri listesi altına yakın windows_locale sözlük görebilirsiniz: Python, standart modül locale.py harita var sen dil kodu olacak kez http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

(de_DE) doğrudan gettext kitaplığına veya dolaylı olarak LANGUAGE ortam değişkenini kullanarak aktarmanız gerekir.