PHP / Gettext Sorunları

0 Cevap php

Ben gettext ile bir kaç ay önce bazı testler çalışan hatırlamak ve aşağıdaki kod mükemmel çalıştı:

putenv('LANG=l33t');
putenv('LANGUAGE=l33t');
putenv('LC_MESSAGES=l33t');

if (defined('LC_MESSAGES')) // available if PHP was compiled with libintl
{
    setlocale(LC_MESSAGES, 'l33t');
}

else
{
    setlocale(LC_ALL, 'l33t');
}

bindtextdomain('default', './locale'); // ./locale/l33t/LC_MESSAGES/default.mo
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');

echo _('Hello World!'); // h3110 w0r1d!

(Eğer doğru hatırlıyorum, Windows XP ve CentOS altında) bu onlar sistemde veya yüklü olsaydı rahatsız etmeden, arbitrary "yerellerde" kullanabilirsiniz çünkü iyi olduğu, mükemmel çalıştı. Ancak, bu artık çalışmak için görünmüyor, neden acaba ...


Red Hat + PHP 5.2.11:

Ben çeşitli yerel ileri ve geri geçiş yapabilmek kulüpler ve (yerel sistemde yüklü / mevcut ise) setlocale() çağrısı return false yok gibi çeviriler sürece correclty göstermek.

Bu (Ben sadece yereli varlığını sınamak zorunda kalmadan herhangi bir keyfi çeviri dizine gettext işaret olabilir harika olurdu) mükemmel değil, ama kabul edilebilir. Daha sonra biraz daha fazla testler olacak.

Windows 7 + PHP 5.3.1 (XAMPP):

setlocale() her zaman döner {false (LC_ALL yerine kullanırken bile LC_MESSAGES), ben böyle eng gibi bazı geçerli bir Windows yerel ayarı kullanmak sürece, [(4)]} veya ptg - Bu durumda yerel doğru ayarlanmış gibi görünüyor ama çeviriler hala görünmüyor. Ben açık sekmelerin yüzlerce var ama ben bu komut için ilk çağrı (Apache hile yapmayacağım başlatmadan) doğru çeviriyi verir düşünüyorum çünkü ben şu anda test edemez.

Ben bu PHP Bug #49349 ile ilgili ise emin değilim. Ben bu birkaç saat olduğunu test edeceğiz.


Gettext uzantısı güvenilir, farklı işletim sistemleri (muhtemelen {custom ile yerel ayarlar gibi karşısında (php-gettext veya Zend Translate Adapter gibi değil saf PHP uygulamaları) kullanmak için herhangi bir yolu var mı [(3)]})?

Ayrıca, kullanımı için kesinlikle gerekli olan setlocale(LC_ALL, ...)? Ben TIME, NUMERIC ve MONETARY (özel) yerel ayarları el değmemiş (POSIX yerele varsaymak) bırakarak preffer olacaktır.


Benim bir fikrim vardı ... sanki (setlocale() çok yaygın bir yerel ile aramak mümkün olabilir miydi C, POSIX veya en_US ) ve etki yoluyla dilini belirleyebilirsiniz? Böyle bir şey:

/lang/C/LC_MESSAGES/domain.pt.mo
/lang/C/LC_MESSAGES/domain.de.mo
/lang/C/LC_MESSAGES/domain.en.mo
/lang/C/LC_MESSAGES/domain2.pt.mo
/lang/C/LC_MESSAGES/domain2.de.mo
/lang/C/LC_MESSAGES/domain2.en.mo

Olur bu sorunsuz * nix ve Windows plataforms üzerinde çalışmak?

0 Cevap