Ne dil dosyaları için gettext hakkında bu kadar iyi?

4 Cevap php

Her yerde SO o gettext bunu yapmak için en iyi yol olduğunu söylemek PHP herkes bir çok dil uygulaması yapmaya gelince. Ben sadece neden bilmek isteyen ki?

Ne bu yöntem aşağıda yapar gibi, daha sonra gettext az verimli kullanıyor?

<?PHP
//Have seperate language files for each language I add, this would be english file
function lang($phrase){
    static $lang = array(
        'NO_PHOTO' => 'No photo\'s available',
        'NEW_MEMBER' => 'This user is new'
    );
    return $lang[$phrase];
}
//Then in application where there is text from the site and not from users I would do something like this
echo lang('NO_PHOTO');  // No photo's available would show here
?>

4 Cevap

Gettext ile iyi bir şey, bir de-facto standart tür olmasıdır: birçok dilde, bir sürü uygulama tarafından kullanılan - birçok kişi onunla çalışmak anlamına gelir.

Eğer (or whatever) kaynağı bazı PHP ile gitmek zorunda değilsiniz: Başka bir iyi bir şey (maybe a consequence, or a cause, or both, actually) gibi çeşitli araçlar, Poedit Örneğin, gettext dosyaları düzenlemek için var olduğunu -kodu. Ve bu çok önemli:

  • it means non-technical people can edit gettext localisation files
    • belki de bu, artık sizin için önemli görünmüyor
    • Eğer büyük bir açık kaynak uygulaması üzerinde çalışıyorum eğer başarılı olduğunu ve birçok kişi kendi dilinde gerekirse ama, önemli olacaksınız.
  • onlar uygulamayı kırmak için risk yok demek (think "parse error" because of a mismatch in quotes, for instance ;-) )

Lütfen "uygulama" birkaç dezavantajı vardır.

  • Farklı olarak gettext o php uygulanan var. ;-)
  • Bu olursa olsun bellekte tüm çeviri tutar bunu kullanmak ya da değil
  • Eğer bir satır gerektiğinde kötü olduğunu, bu verilerin tüm dizi başlatır (bu biraz zaman alabilir ve PHP oldukça bazı hafıza yok)
  • Birçok dil için çoğul formları işleyemez bulunuyor
  • Kod, bu çeviri kullanarak pek okunabilir
  • Kod, bu çeviri kullanarak eksik çeviri durumunda kullanmak için hiçbir gömülü son çareleri vardır.

Temelde, uygulama yaygın olarak onların uluslararası destek ve tekerleğin derece yenilikçi buluşu iddia ölüyor birçok projede kullanılan, ancak sonucu hakkında biraz umurumda değil ve kötü gelen iyi bilmiyorum.

Tüm sorulara gibi bakıyor ki aynı cevabı:

What is better with [hightly proved and vastly used solution] than with [my hacky cocky noob implementation]?

  • Bu uzun bir süre için burada oldu, bir ister inanın ister inanmayın, deneyimli dev üzerinde çalıştı, kullanılan övdü, bunun bir nedeni muhtemelen.
  • Bu standart ve çözüm daha iyi olurdu bu yüzden bile, o kırılma ödemek için fiyat değer olmayabilir.
  • Aklında bir küresel kapsamda geliştirilen çünkü senin fikrin sadece sorunu çözmek hedefliyor oysa Bu uygulama 1000 den fazlasını yapabilirsiniz.

Ben eleştiren değilim, hepimiz smarties ve diğerleri olduğuna kendimizi ikna etmeye çalışıyor overkill programcılar, yaptım. Öğrenmek için bir yol parçası. Ben aslında sürekli tekerleği yeniden icat ya da kesmek bazı KISS kodu hakkında benim arkadaşlarım / meslektaşları ile kapalı gösteren, bunu. Zamanla, sadece daha az yapıyor sonuna kadar ve aslında :-) bunu hak ne zaman ben bunu gün yapıyor durdurmak varsayalım

Senin, Java dize tablolar veya Windows kaynakları gibi diğer çözümlerle karşılaştırıldığında gettext The avantaj, bu kaynak kodu daha okunabilir kılıyor.

Bu karşılaştırın:

printf(_("No photo available (error %d)."), err);

Bu ile:

printf(i18n(NO_PHOTO), err);
// or some variant of the same thing

Birinci durumda, kodu orada mesaj görebilir ve bunun tam olarak ne biliyorum. İkinci durumda, sadece bir sembolik sabit görmek ve tam metin ve format belirteçleri bakmak zorunda.