/**
  * This method returns a singleton instance of __I18n
  *
  * @return __I18n A singleton reference to the __I18n
  */
 public static function &getInstance()
 {
     if (self::$_instance == null) {
         // Use "Lazy initialization"
         self::$_instance = new __I18n();
         //once the __I18n has been built, let's negociate the locale with the client:
         self::$_instance->_negociateLocale();
     }
     return self::$_instance;
 }
 public function negociateLocale()
 {
     $front_controller = __FrontController::getInstance();
     $request = $front_controller->getRequest();
     $app_name = md5(__ApplicationContext::getInstance()->getPropertyContent('APP_NAME'));
     if ($request != null && $request->hasCookie('__LOCALE__' . $app_name)) {
         $locale_code = $request->getCookie('__LOCALE__' . $app_name);
         $return_value = new __Locale($locale_code);
     } else {
         if (key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
             $http_accept_language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
         }
         if (!empty($http_accept_language)) {
             //by default:
             if (class_exists('Locale')) {
                 $accepted_locale = Locale::acceptFromHttp($http_accept_language);
                 $candidate_language = Locale::getPrimaryLanguage($accepted_locale);
             } else {
                 $accepted_languages = preg_split('/,/', $http_accept_language);
                 $candidate_language = $this->_getLanguageIsoCode($accepted_languages[0]);
             }
         }
         if (isset($candidate_language) && __I18n::getInstance()->isSupportedLanguage($candidate_language)) {
             $primary_language = $candidate_language;
         } else {
             $primary_language = __I18n::getInstance()->getDefaultLanguageIsoCode();
         }
         $return_value = new __Locale($primary_language);
         $auth_cookie = new __Cookie('__LOCALE__' . $app_name, $primary_language, session_cache_expire() * 60, '/');
         $response = __FrontController::getInstance()->getResponse();
         if ($response != null) {
             $response->addCookie($auth_cookie);
         }
     }
     return $return_value;
 }
 public function addResource(__ResourceBase &$resource, $language_iso_code = null)
 {
     if ($language_iso_code == null) {
         $language_iso_code = __I18n::getInstance()->getLocale()->getLanguageIsoCode();
     }
     $this->_resource_table->addResource($resource, $language_iso_code);
 }