<?php
class Ec_Lang
{

    private $_myTranslate;
    private $_customTranslate;
    public $_defaultLang = 'zh_CN';
    private static $_class = null;
    private $_curLang = null;
    public $_languages = array(
        'zh_CN' => 'zh_CN',
        'en_US' => 'en_US',
    );

    private function __construct()
    {
        $this->getCurrentLanguage();
        $this->loadLanguage();
    }

    public static function getInstance()
    {
        if (!isset(self::$_class)) {
            $c = __CLASS__;
            self::$_class = new $c;
        }
        return self::$_class;

    }

    public function getTranslate($str, $lang = null)
    {
        $translation = $str;
        if ($str != "" && null != $lang && $lang != $this->_curLang && isset($this->_languages[$lang])) {
            if ($this->_customTranslate != null) {
                $translation = $this->_customTranslate->translate($str);
            } else {
                try {
                    $this->_customTranslate = new Zend_Translate('array', APPLICATION_PATH . "/languages/" . $lang . '.php');
                    $translation = $this->_customTranslate->translate($str);
                } catch (Exception $e) {
                }
            }
        } elseif ($str != "") {
            if ($this->_myTranslate != null) {
                $translation = $this->_myTranslate->translate($str);
            }
        }

        return $translation;
    }

    public function translate($str, $lang = null)
    {
        return $this->getTranslate($str, $lang);
    }

    private function loadLanguage()
    {
        $noAppMoFile = false;
        try {
            if (Zend_Registry::isRegistered('Zend_Translate')) {
                $this->_myTranslate = Zend_Registry::get('Zend_Translate');
            } else {
                $this->_myTranslate = new Zend_Translate('array', APPLICATION_PATH . "/languages/" . $this->_curLang . '.php');
                Zend_Registry::set('Zend_Translate', $this->_myTranslate);
            }
        } catch (Exception $e) {
            $noAppMoFile = $e;
        }
        return $noAppMoFile;
    }


    public function getCurrentLanguage()
    {
        $user = new Zend_Session_Namespace('userAuthorization');
        if ($this->_curLang != null && $this->_curLang == $user->lang)
            return $this->_curLang;
        $sessionUser = new Zend_Session_Namespace("userAuthorization");
        if($sessionUser->lang){
            $this->_curLang = $sessionUser->lang;
            return $sessionUser->lang;
        }
        $currentLanguage = "zh_CN";

       if (isset($_COOKIE['LANGUAGE'])) {
            $currentLanguage = $_COOKIE['LANGUAGE'];
        } else if (isset($user->lang)) {
             $currentLanguage = $user->lang;
         }  else {
            $agentLang =  substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);
            if (preg_match("/zh-c/i", $agentLang)){
                $currentLanguage ='zh_CN';
            }elseif (preg_match("/zh/i", $agentLang)){
                $currentLanguage ='zh_CN';
            }elseif(preg_match("/en/i",$agentLang)){
                $currentLanguage ='en_US';
            }
        }
        if (!isset($this->_languages[$currentLanguage])) {
            $currentLanguage = $this->_defaultLang;
        }
        $this->_curLang = $currentLanguage;
        return $currentLanguage;
    }

}
