Source for file Language.class.php

Documentation is available at Language.class.php

  1. /**
  2.  * Класс Language.
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author 1m.dm
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkLanguage.class.php.html,v 1.1 2007/09/17 14:32:34 pavka Exp $
  9.  */
  10.  
  11. require_once 'core/framework/DBWorker.class.php';
  12.  
  13. /**
  14.  * Управляет языками системы.
  15.  *
  16.  * @package energine
  17.  * @subpackage core
  18.  * @final
  19.  */
  20. final class Language extends DBWorker{
  21.  
  22.     /**
  23.      * @access public
  24.      * @var int текущий язык системы
  25.      */
  26.     private $current = false;
  27.  
  28.     /**
  29.      * @access private
  30.      * @var array набор языков, определённых в системе
  31.      */
  32.     private $languages;
  33.  
  34.     /**
  35.      * @access private
  36.      * @static
  37.      * @var Language единый для всей системы экземпляр класса Language
  38.      */
  39.     private static $instance;
  40.  
  41.     /**
  42.      * Конструктор класса.
  43.      *
  44.      * @access public
  45.      * @return void 
  46.      */
  47.     public function __construct({
  48.         parent::__construct();
  49.  
  50.         // получаем все языки, определённые в системе
  51.         $res $this->dbh->select('share_Languages');
  52.         if (!is_array($res)) {
  53.             throw new SystemException('ERR_NO_LANG_INFO'SystemException::ERR_CRITICAL$this->dbh->getLastRequest());
  54.         }
  55.         // формируем набор языков вида array(langID => langInfo)
  56.         foreach ($res as $langInfo{
  57.             $this->languages[$langInfo['lang_id']] $langInfo;
  58.             unset($this->languages[$langInfo['lang_id']]['lang_id']);
  59.         }
  60.     }
  61.  
  62.     /**
  63.      * Возвращает единый для всей системы экземпляр класса Language.
  64.      * См. паттерн проектирования Singleton.
  65.      *
  66.      * @access public
  67.      * @static
  68.      * @return Language 
  69.      */
  70.     public static function getInstance({
  71.         if (!isset(self::$instance)) {
  72.             self::$instance new Language;
  73.         }
  74.         return self::$instance;
  75.     }
  76.  
  77.     /**
  78.      * Возвращает идентификатор текущего языка.
  79.      *
  80.      * @access public
  81.      * @return int 
  82.      */
  83.     public function getCurrent({
  84.         return $this->current;
  85.     }
  86.  
  87.     /**
  88.      * Устанавливает идентификатор текущнго языка.
  89.      *
  90.      * @access public
  91.      * @param int $currentLangID 
  92.      * @return void 
  93.      */
  94.     public function setCurrent($currentLangID{
  95.         $result false;
  96.  
  97.         foreach ($this->languages as $langID => $langInfo{
  98.             if ($langID == $currentLangID{
  99.                 $result true;
  100.                 break;
  101.             }
  102.         }
  103.  
  104.         if (!$result{
  105.             throw new SystemException('ERR_404'SystemException::ERR_LANG$currentLangID);
  106.         }
  107.  
  108.         // устанавливаем локаль для выбранного языка
  109.         /*if (!setlocale(LC_TIME, array($langInfo['lang_locale'].'.UTF-8', $langInfo['lang_win_code'].'.1251'))) {
  110.             throw new SystemException('ERR_DEV_BAD_LOCALE', SystemException::ERR_DEVELOPER, $langInfo['lang_locale']);
  111.         }*/
  112.  
  113.         $this->current = $currentLangID;
  114.  
  115.         return $result;
  116.     }
  117.  
  118.     /**
  119.      * Возвращает идентификатор языка по-умолчанию.
  120.      *
  121.      * @access public
  122.      * @return int 
  123.      */
  124.     public function getDefault({
  125.         $result false;
  126.         foreach ($this->languages as $langID => $langInfo{
  127.             if ($langInfo['lang_default'== 1{
  128.                 $result $langID;
  129.                 break;
  130.             }
  131.         }
  132.         if ($result == false{
  133.             throw new SystemException('ERR_NO_DEFAULT_LANG'SystemException::ERR_CRITICAL );
  134.         }
  135.         return $result;
  136.     }
  137.  
  138.     /**
  139.      * Возвращает идентификатор языка по аббревиатуре азыка.
  140.      *
  141.      * @access public
  142.      * @param string $abbr аббревиатура языка
  143.      * @return int 
  144.      */
  145.     public function getIDByAbbr($abbr$useDefaultIfEmpty false{
  146.         $result false;
  147.         if (empty($abbr&& $useDefaultIfEmpty{
  148.             return $this->getDefault();
  149.         }
  150.         foreach ($this->languages as $langID => $langInfo{
  151.             if ($langInfo['lang_abbr'== $abbr{
  152.                 $result $langID;
  153.                 break;
  154.             }
  155.         }
  156.         return $result;
  157.  
  158.     }
  159.  
  160.     /**
  161.      * Возвращает аббревиатуру языка по идентификатору языка.
  162.      *
  163.      * @access public
  164.      * @param int $id идентификатор языка
  165.      * @return string 
  166.      */
  167.     public function getAbbrByID($id{
  168.         $result false;
  169.         foreach ($this->languages as $langID => $langInfo{
  170.             if ($langID == $id{
  171.                 $result $langInfo['lang_abbr'];
  172.                 break;
  173.             }
  174.         }
  175.         if ($result == false{
  176.             throw new SystemException('ERR_BAD_LANG_ID'SystemException::ERR_LANG$abbr);
  177.         }
  178.         return $result;
  179.     }
  180.  
  181.     /**
  182.      * Возвращает название языка по идентификатору языка.
  183.      *
  184.      * @access public
  185.      * @param int $id 
  186.      * @return string 
  187.      */
  188.     public function getNameByID($id{
  189.         $result false;
  190.         foreach ($this->languages as $langID => $langInfo{
  191.             if ($langID == $id{
  192.                 $result $langInfo['lang_name'];
  193.                 break;
  194.             }
  195.         }
  196.         if ($result == false{
  197.             throw new SystemException('ERR_BAD_LANG_ID'SystemException::ERR_LANG$abbr);
  198.         }
  199.         return $result;
  200.     }
  201.  
  202.     /**
  203.      * Возвращает все языки, определённые в системе.
  204.      *
  205.      * @access public
  206.      * @return array 
  207.      */
  208.     public function getLanguages({
  209.         return $this->languages;
  210.     }
  211.  
  212.     /**
  213.      * Проверяет, существует ли язык с указанным идентификатором.
  214.      *
  215.      * @access public
  216.      * @param int $id 
  217.      * @return bool 
  218.      */
  219.     public function isValidLangID($id{
  220.         return in_array($idarray_keys($this->languages));
  221.     }
  222.  
  223.     public function isValidLangAbbr($abbr{
  224.         $result false;
  225.         foreach ($this->languages as $langID => $langInfo{
  226.             if ($langInfo['lang_abbr'== $abbr{
  227.                 $result true;
  228.                 break;
  229.             }
  230.         }
  231.         return $result;
  232.     }
  233. }

Documentation generated on Mon, 17 Sep 2007 13:30:20 +0300 by phpDocumentor 1.4.0a2