Kullanıcının gerektiğinde tüm arayüzü metin dili-bağımlı kaynaklar taşındı ve yüklenmiş olması gereken bir çok dilli web uygulaması inşa ediyoruz diyelim. Dize kaynağı büyük olabilir: Eğer tercüme dizeleri binlerce var söylüyorlar. Pencereli ortamlarda (Windows, OS X, X11) olarak genellikle sadece yapmak için OS veya bazı API tarafından sağlanan bir mekanizması var ve genellikle dize kaynakları denir. Ne PHP ile ilgili o zaman?
PHP derler ve her kullanıcının isteği ile tüm modülleri yürütür gibi ama unutmayın, performansı ciddi Burada dikkat edilmesi gerekir.
Bunu yapmanın birkaç olası yolları düşünebilirsiniz. Ama her şeyden önce, ben her isteği ile bir dil özgü modül eklemek için bu değişkeni kullanın edeceğiz 'fr' gibi, 'de', 'tr' olarak ayarlanmış olabilir, bir global değişken $ DİL zorunda kalacağım olarak
require_once "lang-$LANGUAGE.inc.php"
Yani olası çözümlerden bazıları şunlardır:
(1) Her bir dil modülü küresel değişkenler gibi tüm dizeleri tanımlanması, örneğin
$str_signin = 'Sign in';
$str_welcome_user = 'Welcome, %s'!;
...
Çok basit okunması kolay ve teknik olmayan insanlar için çalışmak nispeten kolay (çevirmenler, yani). Global değişken biraz arama yavaşlatacak olsa hangi bazı küresel uzay kirliliği var.
(2) aynıdır, ancak, çok büyük bir dizisi olarak tanımlanır, örneğin
$str['signin'] = 'Sign in';
$str['welcome_user'] = 'Welcome, %s'!;
...
Az okunabilir, biraz daha az kullanışlı ana kodu (ilgili daha fazla yazarak) de biraz daha clutters kodu. Bu basit atamaları ama doç değildir, çünkü bu daha yavaş olacaktır. dizi atamaları: (1) ile karşılaştırıldığında VM için buraya yürütmek için daha fazla talimatlar olacaktır.
(3) PHP 5.3 +: sabitleri olarak, muhtemelen bir sınıf veya ad tanımlamak
class str {
const signin = 'Sign in';
const welcome_user = 'Welcome, %s'!;
const signin_to_a = self::signin . ' to area A'; // can't do this!
...
}
Birkaç küçük dezavantajları da olsa ... ve, str :: imzalıyorum vb Güzel gibi, tüm bu en beğendim bunları kullanın: PHP 5.3 + sadece; ifadeleri kullanamaz, sadece tek değerleri (ki ya sizin durumunuzda ince olmayabilir); çift tırnak içindeki $-genişleme kullanamazsınız (veya yapabilirsiniz?).
(4) Veritabanı: Bir tablonun içine her şeyi koymak ve bazı KODU almak, örneğin str_get (STR_SIGNIN). , Çirkin yavaş, DB kimlikleri ile kodunda kimlik yıllardan eşitlenmesini ihtiyacı ancak tüm sayfa ihtiyacı olduğunda her şeyi yüklemek gerek yoktur, sadece bir kaç dizeleri olduğunu. Bu iyi bir çözüm olup olmadığını dürüstçe diyemeyiz.
Başka bir öneriniz? Bu olanları da, düşünceler?
Ve zihin sadeliği, zarafeti ve performansta devam etmeyiniz!