Ben x dillere tercüme edilecek bir site yapıyorum.
Tüm dizeleri lokalize edilmelidir.
Ben bir dil adı, ülke adı veya bir veritabanından alındıktan diğer bilgileri görüntülemek için gereken durumlar vardır. Bu şekilde ele alınıyor veriler nadiren değişmiş olacak - Ben dil isimleri, ülkelerin vb bahsediyorum yukarıdaki gibi
Bu örnekte ben sitenin UI çevrilmiştir içine dillerini tutan dizi kullanıyorum. ("Değişim dili" bayrak / link süpürdü zaman başlık metin için kullanılır) adlarının çevirisini izin vermek için, ben gibi bir dizi var *:
Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Ben belirli bir dil için uygun isim dize almak için bunları kullanın.
Şu anda bir global dizi kullanıyorum:
$global_langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Kullanımı:
global $global_langNames;
echo $global_langNames[$code]; // $code = 'zh_CN'
Çıktı (locale = tr):
Basitleştirilmiş Çince
Çıktı (locale = zh_CN):
简体 中文
Ben daha çok bu beyan (ve diğer) sınıfın özel üyeleri olarak sabit diziler, ancak PHP istekli değil gibi görünüyor olacaktır:
class constants_lang{
private static $langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
static function getLangName($code){
return self::$langNames($code);
}
}
Sonuçlar:
Parse error: syntax error, unexpected '(', expecting ')' in /site/http/includes/classes/constants/lang.php on line 20
Ben başımı düşük asmak ve geri küresel dizisine gidin, ya da başka bir bana bu şekilde kullanılmak üzere 'sabit' bir dizi olması için daha iyi bir yol var mıdır?
* Dizi anahtarları veritabanı tablo depolama dil kodları ve biz bir UI çeviri olup olmadığını şunlardır:
code ui translation
zh_CN 1
en_GB 1
zh_TW 0
....
Solution
class constants{
private $langNamesFromCode;
function __construct()
{
$this->langNamesFromCode = $this->initLangNamesFromCode();
}
/* INIT */
private static function initLangNamesFromCode()
{
return Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
}
/* GETTERS */
public static function getLangNameFromCode($code)
{
if(self::isStatic()){
$langNamesFromCode = self::initLangNamesFromCode();
return $langNamesFromCode[$code];
}
else{
return $this->langNamesFromCode[$code];
}
}
/* UTILITY */
private static function isStatic()
{
return !(isset($this) && get_class($this) == __CLASS__);
}
}