Sadece bir üretim sistemi üzerinde (12 dil ve sayım) son zamanlarda kendimi bu ele sahip ve ben bir hibrid sistem öneririm yol boyunca bazı önemli performans sorunları çalıştırmak sonra.
1) bir veritabanında dil dizeleri ve çevirileri Mağaza - Bu kolay / güncelleme ile etkileşim yapacak / öğeleri kaldırmak artı normal yedekleme rutin bir parçası olacaktır.
2) sunucuda düz dosyalar halinde dilleri Önbellek ve sayfada görüntülemek için gerekli olanlar dışında çizin.
Burada faydaları çoktur - çoğunlukla hızlı! Ben transfer sırasında MySQL için bağlantı havai veya herhangi bir trafik yavaşlama ile ilgili değilim. (Özellikle önemlidir DB sunucusunu yerel değilse).
Bu aynı zamanda kullanımı çok kolay hale getirecek. Bir php tefrika dizi olarak dosyasında veritabanından veri depolamak ve depolama yükü küçültmek için dosyanın içeriğini Gzip (bu aynı zamanda hızlı benim kıyaslama yapar).
Example:
$lang = array(
'hello' => 'Hallo',
'good_morning' => 'Guten Tag',
'logout_message' = > 'We are sorry to see you go, come again!'
);
$storage_lang = gzcompress( serialize( $lang ) );
// WRITE THIS INTO A FILE SUCH AS 'my_page.de'
Bir kullanıcının yapması ilk kez sistemini yüklerken bir file_exists('/files/languages/my_page.de')
. Dosya varsa o zaman içeriği, un-gzip ve un-serialize yük ve gitmek için hazır.
Example
$file_contents = get_contents( 'my_page.de' );
$lang = unserialize( gzuncompress( $file_contents ) );
Eğer ... hatta küçük yükü tutmak sistemdeki her sayfa için önbelleğe alma belirli yapmak ve dilini göstermek için dosya uzantısını kullanabilirsiniz görebileceğiniz gibi (my_page.en, my_page.de, my_page.fr)
Dosya mevcut değilse o zaman gziplemek ve eksik dosya yazma, serialize, dizinizi oluşturmak, DB sorgu - Aynı anda sadece gerekli sayfa çok sayfayı görüntülemek için devam o dizi inşa ve var herkes mutlu.
Son olarak, bu olmayan programcılar için erişilebilir güncelleme sayfaları oluşturmanıza olanak verir, ancak değişikliklerin sistem tarafından yeniden inşa edilebilmesi için, önbellek dosyaları kaldırmak için ne zaman karar vererek görünür zaman da kontrol eder.
Warnings and Pitfalls
Ben veritabanında her şeyi muhafaza zaman bizim trafik çivili zaman doğrudan bazı BÜYÜK yavaşlamalar çarptı.
Güncellemeler acı ve hata eğilimli çünkü düz dosya dizilerde onları tutmaya çalışıyorum sadece bu kadar sorun oldu.
Önbellek dosyaları içeriğini benim testlerde yaklaşık 20% daha yavaş dil sistemi yapılmış sıkıştırmak gzip.
Emin olun dilleri içeren veritabanı tüm alanları UTF8-genel-ci ayarlanır (veya UTF8 seçeneklerden en az biri, benim kullanım için genel-ci iyi bulmak). Bunu yapmazsanız size (vb Çince, Japonca gibi) veri tabanında olmayan unicode karakter setlerini depolamak mümkün olmayacaktır
Extension:
In response to a comment below, be sure to set your database tables up with page level language strings in mind.
id string page global
1 hello NULL 1
2 good_morning my_page.php 0
Üstbilgi veya altbilgiler kadar gösterir bir şey, yaratılan her önbellek dosyasında sorgulanan olacak küresel bir bayrak var, aksi duyarlı sistem tutmak Sayfası onları sorgulayabilir.