Advertisement
Guest User

Untitled

a guest
Jul 25th, 2010
2,458
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. interface iTranslateException{
  3.     /**
  4.      * @return mixed
  5.      */
  6.     public function getTranslateVars();
  7. }
  8.  
  9. class translateException extends baseException implements iTranslateException{
  10.     /**
  11.      * @var mixed
  12.      */
  13.     protected $translateVars = null;
  14.  
  15.     /**
  16.      * @param string $message
  17.      * @param mixed $variables
  18.      * @param Exception $previous
  19.      */
  20.     public function  __construct($message = '', $variables = null, Exception $previous = null) {
  21.         parent::__construct($message, 0, $previous);
  22.         $this->translateVars = $variables;
  23.     }
  24.  
  25.     /**
  26.      * @return mixed
  27.      */
  28.     public function getTranslateVars(){
  29.         return $this->translateVars;
  30.     }
  31. }
  32.  
  33. class translate{
  34.     const localeRu = 1;
  35.     const localeDe = 2;
  36.     public static $translateRu = array(
  37.         'Number:%d' => 'Номер:%d',
  38.         'Error'     => 'Ошибка'
  39.     );
  40.     public static $translateDe = array(
  41.         'Number:%d' => 'Zahl:%d',
  42.         'Error'     => 'Fehler'
  43.         );
  44.     public static $currentLocale;
  45.  
  46.     public static function getTranslateString($s){
  47.         $st = '';
  48.         switch( self::$currentLocale ){
  49.             case self::localeRu: $st = self::$translateRu[$s];
  50.                 break;
  51.             case self::localeDe: $st = self::$translateDe[$s];
  52.                 break;
  53.         }
  54.         if(!strlen($st)){
  55.             $st = $s;
  56.         }
  57.         return $st;
  58.     }
  59.  
  60.     /**
  61.      * Метод которыи используется во view, для отображения ошибок
  62.      *
  63.      * @param translateException $e
  64.      * @return string
  65.      */
  66.     public static function viewErrorDisplay($e){
  67.         if(!($e instanceof iTranslateException)){
  68.             throw new baseException('Only for iTranslateException', 0, $e);
  69.         }
  70.         $st = self::getTranslateString( $e->getMessage() );
  71.         $tv = $e->getTranslateVars();
  72.         if( empty($tv) ){
  73.             return $st;
  74.         }
  75.         if(!is_array($tv)){
  76.             $tv = array($st, $tv);
  77.         } else{
  78.             array_unshift($tv, $st);
  79.         }
  80.         return call_user_func_array('sprintf', $tv);
  81.     }
  82.  
  83. }
  84.  
  85. translate::$currentLocale = translate::localeDe;
  86.  
  87. try {
  88.     throw new translateException('Number:%d', 1);
  89.     throw new translateException('Number:%d, String:%s', array(1, 'abc'));
  90.     throw new translateException('Error');
  91. } catch (translateException $e) {
  92.     $view->assign('error',$e);
  93. }
Advertisement
RAW Paste Data Copied
Advertisement