2009-10-25 20 views
5

Web uygulaması için çoklu dil içeriğini depolamanın standartlara uygun bir yolunu arıyorum. Şimdiye kadar, bir dosyadan veya bir veritabanındaki sözlük tablosundan veri okuyan kendi "translate()" işlevlerimi çalıştırdım. Ancak, web uygulamasının farklı kopyaları ile çalışıyorsanız, sözlükleri bir veritabanı tablosunda güncel tutmak çok zahmetlidir.i18n, ancak yerel zorluğu olmadan?

Bunun için bir çok araç olduğu için gettext'i seviyorum. Ancak farklı platformlar için uygulamalar geliştiriyorum. Ben setlocale() 'ın ve elbiselerinin berbat yollarını ele almak istemiyorum - yani, sistemden sisteme farklı düzinelerce farklı çeşitliliğin çalışmasını sağlamak için ihtiyaç duyduğunuz sistem. Asla. Bir dizi dilim var - de, en ve es - ve uygun sözlüğü yüklemek ve bir kere setlocale() veya bindtexdomain() öğesine dokunmadan _() ile çalışmak istiyorum.

Bu bir şekilde gettext kullanarak mümkün mü? Ya da birileri PHP için bir PHP uzantısı gerektirmeden .po/.mo dosyaları ile çalışabilen basit, küçük, hızlı (!) I18n çözümü biliyor mu?

+2

gettext uzantısını kullanmadan PHP'de gettext kullanmak pratikte mümkün değildir, ancak bu PHP'nin oldukça yaygın bir standart uzantısıdır ve çoğu kurulum zaten etkinleştirilmiştir. – sorin

+1

@Sorin: Tümüyle olmasa da, gettext işlevlerinin çoğunda yerel bir PHP uygulaması var. –

+0

@votingmeisfree wordpress ve cakephp, bir kaç isim, gettext uygulamasını kullanmadan po ve mo dosyalarını kullanın. Dosyayı doğrudan açarlar. – T0xicCode

cevap

2
+0

Ve gettext uzantısı gerektirmez :) Onlar da daha samimi kaynaklar için adaptörler var - dizi, xml, csv vb –

+0

Teşekkürler, bu ilginç görünüyor. Uzunca bir süredir Zend arıyorum ve belki de deneyeceğim. Birisi tanıdığı takdirde, hafif ve bağımsız bir çözümü tercih ederim. –

+0

Oh, göründüğünden daha hafif. Sadece ihtiyacınız olan sınıfları kullanabilirsiniz: Zend_Translate için, sadece Zend_Translate, Zend_Locale, Zend_Loader ve Zend_Exception'a ihtiyacınız var (belki de yanılıyorum ve daha fazla veya daha az şeye ihtiyacınız var, sadece deneyin) –

3

Bu yöntem standart dışı yerel ayarlar ile bile çalışması gerekir onunla çalışır:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

tadını çıkarın!

+1

Windows 7'de çalışmıyor - PHP5 5.3.0 – Blaise