Sınıf Member Gettext dize atama

0 Cevap php

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__);
     }
}

0 Cevap