Diziler haline birleştirilmiş MO dosyaları için önbellek stratejidir?

1 Cevap php

Netleştirmek için:

  • I'm not using the gettext php module / uzatma, ben gettext php-gettext farkında değilim ama bu sadece ben birden kütüphaneleri kullanmak zorunda olduğu şeyleri zorlaştırıyor, dahil olduğu sunucular ile uğraşmak zorunda çünkü neden olma. Dahası ben gerekli yerel ayarlar yüklü olan kullanıcı bağlı istemiyorum, ve bazı sunucular bunu yapmak için root erişimi olmayacaktır. Ben de genel olarak yerel ile ilgili sorunlar çok var biliyoruz.
  • I-have to support PHP4. Evet, öldü. Evet, bunu nefret ediyorum. Ama bir seçeneğim yok.

Ben, bir "sunucu-düzey" Geçerli dil (varsayılan tr) dayalı .mo gettext dosya ayrıştırmak bir sınıf var dolaşır her msgstr ve msgid ve msgstr tuşları / değerleri ile bir dizi doldurur ve msgstr.

Daha sonra ben bir "uygulama seviyesi" .mo dosya ayrıştırır ve ilk dizi ayarlanan birlikte iki birleştirir bir yöntemi var, bu yüzden uygulama düzeyinde çeviriler sunucu tarafı genel çeviriler önceliklidir.

Benim dize çeviriler için birleştirilmiş dizi kullanıyorum, ve ben aslında bu önbelleğe ve önbelleğe alınmış sürümünü {[(0) kullanmak için bir yol gerekir okumak her sayfada. Mo dosyalarını okumak istemiyorum beri }] okunan sayfa önbelleğe alınan sürüm olarak aynı dil / yerel bir.

Yani benim web sitesine gittim ve varsayılan dil İngilizce oldu ise, ingilizce sunucu / uygulama mo dosyalarını okumak onları birleştirmek, dizi, önbellek bunu yapmak istiyorum. Kullanıcı tıklandığında sonraki sayfa İngilizce ise, önbelleğe alınan sürüm kullanılacaktır. Sözgelimi İspanyol oldu Aksi takdirde, birleştirme yeniden gerçekleşir ve ispanyolca önbelleğe sürümü kullanılır.

Yani temelde, nasıl önbelleğe dil / yerele özgü birleştirilen diziler hakkında gitmek istiyorsunuz? Aslında kendimi önbelleğe uygulamaya hiç, ama yapmam gereken istediğiniz tüm serialize Benim dizisi, sonra bir uygulama-seviye önbellek dizinine yazmak olduğunu varsayalım, ve 'gibi bir şey olarak dosya kaydetmek istiyorsunuz Çeviri-{$ yerel} sonra önbelleğe alınmış bir sürümü mevcut olmadığını görmek o dayalı, yerel benim app ne olduğunu belirlemek için mantık kullanmak, en '$ yerel gibi bir şey nerede' - eğer öyleyse, {[(1)] } ve sadece kullanabilir?

Bu genellikle nasıl yapılır mı? Ben çok kod örnekleri seviniriz. Ben dizi etrafında 200-300 anahtar / değer çiftleri vardır ve sadece bir iki seviyeli boyutlu dizidir:

array(
  'en' => array(
  'Hello' => '',
),
  'es' => array(
  'Hello' => 'Hola',
)
);

1 Cevap

Birden fazla dil dizileri önbelleklediğiniz neden anlayamıyorum? Eğer uygulama tek bir isteği (kendi php) esnasında> 1 dil desteği sağlamak için var mı?

Her neyse, ne söylediği gayet - dizi seri önbellek sopa ve gelecekte almak. Eğer-bayan önbelleğe ise, dizi recompute.

then write it into an application-level cache directory, and save the filename as something like 'translation-{$locale}' where $locale is something like 'en', then use logic to determine what the locale is in my app, based on that see if there's a cached version available.

Dosya I / O kadar hızlı bellek erişimi gibi değil - senin bu önbelleğe sorun geçiyor, ben memcache bakarak tavsiye ederim.