Source for file Languages.class.php

Documentation is available at Languages.class.php

  1. <?php
  2. /**
  3.  * Rugalmas nyelvkezelés
  4.  *
  5.  * @copyright Copyright (c) 2009, Takács Ákos
  6.  * @author Takács Ákos <programmer@rimelek.hu>
  7.  * @package LanguageHandler
  8.  * @version 1.0
  9.  */
  10.  
  11. /**
  12.  * Egy nyelvet megvalósító osztály
  13.  *
  14.  * Ez az osztály valójában csak arra való, hogy egy
  15.  * nyelvet kiválasszunk elsődleges nyelvnek. Ezek után
  16.  * az osztály gondoskodik róla, hogy ha mégsem található meg az általa preferált
  17.  * nyelvben az adott tartalom, akkor a {@link Languages} osztály
  18.  *
  19.  * @package LanguageHandler
  20.  */
  21. class Language implements ArrayAccess
  22. {
  23.     /**
  24.      * A kiválasztott nyelv kódja
  25.      *
  26.      * Pl.: hu, en, ro stb...
  27.      *
  28.      * @var string 
  29.      */
  30.     private $langcode;
  31.  
  32.     /**
  33.      * Egy nyelv létrehozása
  34.      *
  35.      * @param string $langcode Kiválasztott nyelv kódja
  36.      */
  37.     public function  __construct($langcode)
  38.     {
  39.         $this->langcode $langcode;
  40.     }
  41.  
  42.     /**
  43.      * Létezik-e $offset indexű tartalom
  44.      *
  45.      * @param string $offset 
  46.      * @return bool True, ha lézezik, false, ha nem létezik
  47.      */
  48.     public function offsetExists($offset)
  49.     {
  50.         $langs Languages::getInstance();
  51.         return isset($langs[$this->langcode][$offset]);
  52.     }
  53.  
  54.     /**
  55.      * Egy tartalom lekérdezése $offset index alapján
  56.      *
  57.      * @param string $offset 
  58.      * @return string $offset indexű tartalom
  59.      */
  60.     public function offsetGet($offset)
  61.     {
  62.         $langs Languages::getInstance();
  63.         return (isset($langs[$this->langcode][$offset])) ?
  64.                 $langs[$this->langcode][$offset:
  65.                 $langs[$langs->getDefault()][$offset];
  66.     }
  67.  
  68.     /**
  69.      * A nyelvek nem módosíthatóak
  70.      * 
  71.      * @param string $offset 
  72.      * @param mixed $value 
  73.      */
  74.     public function offsetSet($offset$value)
  75.     {
  76.         throw new Exception('Nem módosítható');
  77.     }
  78.  
  79.     /**
  80.      * A nyelvek nem törölhetők dinamikusan
  81.      * 
  82.      * @param string $offset 
  83.      */
  84.     public function offsetUnset($offset)
  85.     {
  86.         throw new Exception('Nem módosítható');
  87.     }
  88. }
  89.  
  90.  
  91. /**
  92.  * A nyelvek kiválasztását végző osztály
  93.  *
  94.  * Itt dől el, hogy melyik nyelvet választjuk ki alapértelmezettnek és
  95.  * hol kell keresni a nyelveket.<br />
  96.  * Ez az osztály nem példányosítható. Kizárólag a {@link getInstance()}
  97.  * metódusán keresztül érhető el a példánya.
  98.  *
  99.  * <b>languages/hu.php</b>
  100.  * {@example ../languages/hu.php}
  101.  *
  102.  * <b>languages/en.php</b>
  103.  * {@example ../languages/en.php}
  104.  * 
  105.  * <b>Használata:</b>
  106.  * {@example ../index.php}
  107.  *
  108.  * @package LanguageHandler
  109.  */
  110. class Languages implements ArrayAccess
  111. {
  112.     /**
  113.      * Tárolja az osztály egyetlen példányát
  114.      * 
  115.      * @var Languages 
  116.      */
  117.     private static $instance null;
  118.  
  119.     /**
  120.      * Nyelvek tömbje
  121.      *
  122.      * Index a nyelv kódja.
  123.      * Értéke egy asszociatív tömb
  124.      *
  125.      * @var array 
  126.      */
  127.     private $lang array();
  128.  
  129.     /**
  130.      * Alapértelmezett nyelv kódja
  131.      * 
  132.      * @var string 
  133.      */
  134.     private $default 'hu';
  135.  
  136.     /**
  137.      * Nyelvek mappája
  138.      * @var string 
  139.      */
  140.     private $languageDir 'languages';
  141.  
  142.  
  143.     /**
  144.      * A példány lekérdezése
  145.      *
  146.      * @return Languages 
  147.      */
  148.     public static function getInstance()
  149.     {
  150.         if (self::$instance === null)
  151.         {
  152.             $class = __CLASS__;
  153.             self::$instance new $class();
  154.         }
  155.         return self::$instance;
  156.     }
  157.  
  158.     /**
  159.      * Konstruktor
  160.      *
  161.      * Az osztály nem példányosítható.
  162.      * A példány lekérését a {@link getInstance()} metódus végzi
  163.      */
  164.     private function  __construct()
  165.     {
  166.  
  167.     }
  168.  
  169.     /**
  170.      * Nyelvek mappájának lekérdezése
  171.      *
  172.      * @return string 
  173.      */
  174.     public function getLanguageDir()
  175.     {
  176.         return $this->languageDir;
  177.     }
  178.  
  179.     /**
  180.      * Nyelvek mappájának beálítása
  181.      *
  182.      * @param string $dir Ebben a mappában keresi a nyelvi fájlokat
  183.      */
  184.     public function setLanguageDir($dir)
  185.     {
  186.         $this->languageDir $dir;
  187.     }
  188.  
  189.     /**
  190.      * Alapértelmezett nyelv kódja
  191.      *
  192.      * @return string 
  193.      */
  194.     public function getDefault()
  195.     {
  196.         return $this->default;
  197.     }
  198.  
  199.     /**
  200.      * Alapértelmezett nyelv kódjának beállítása
  201.      *
  202.      * @param string $langcode 
  203.      */
  204.     public function setDefault($langcode)
  205.     {
  206.         $this->default $langcode;
  207.     }
  208.  
  209.     /**
  210.      * Egy nyelv objektum lekérése
  211.      *
  212.      * Ezzel egy okos nyelvobjektumot kapunk,
  213.      * ami képes kezelni, ha egy nyelv még nem tartalmaz egy szöveget,
  214.      * de az alapértelmezett nyelv igen.
  215.      *
  216.      * @param string $langcode A nyelv kódja
  217.      * @return Language 
  218.      */
  219.     public function getLanguage($langcode)
  220.     {
  221.          return new Language($langcode);
  222.     }
  223.  
  224.     /**
  225.      * Létezik-e adott nyelven egy tartalom
  226.      *
  227.      * @param string $offset 
  228.      * @return bool Ha létezik, True, egyébként false
  229.      */
  230.     public function offsetExists($offset)
  231.     {
  232.         $offset strtolower($offset);
  233.         return file_exists(rtrim($this->languageDir,'/').'/'.$offset.'.php');
  234.     }
  235.  
  236.     /**
  237.      * Egy bizonyos szöveg lekérdezése adott nyelven
  238.      *
  239.      * @param string $offset tartalom azonosítója
  240.      * @return mixed 
  241.      */
  242.     public function offsetGet($offset)
  243.     {
  244.         $offset strtolower($offset);
  245.         $dir rtrim($this->languageDir,'/').'/';
  246.         if (!isset($this->lang[$offset]))
  247.         {
  248.             if (!file_exists($dir.$offset.'.php'))
  249.             {
  250.                 $offset $this->default;
  251.             }
  252.             if (!isset($this->lang[$offset]))
  253.             {
  254.                 require_once $dir.$offset.'.php';
  255.             }
  256.             else
  257.             {
  258.                 $lang $this->lang[$offset];
  259.             }
  260.             $this->lang[$offset$lang;
  261.         }
  262.         return $this->lang[$offset];
  263.         
  264.     }
  265.  
  266.     /**
  267.      * A nyelvlista nem módosítható
  268.      *
  269.      * @param string $offset 
  270.      * @param mixed $value 
  271.      */
  272.     public function offsetSet($offset$value)
  273.     {
  274.         throw new Exception('Nem módosítható');
  275.     }
  276.  
  277.     /**
  278.      * A nyelv lista nem törölhető
  279.      *
  280.      * @param string $offset 
  281.      */
  282.     public function offsetUnset($offset)
  283.     {
  284.         throw new Exception('Nem módosítható');
  285.     }
  286. }
  287. ?>

Documentation generated on Sat, 05 Sep 2009 20:57:57 +0200 by phpDocumentor 1.4.1