/**
  * Constructor
  * read the single-language file and put this in an array text.
  * the text array is two-dimensional. First dimension is the language.
  * Second dimension is the languagetopic. Content is the translation.
  * 
  * @access	public
  * @param	string		languagecode (two characters), e.g. "de", "en", "in"
  * @return	boolean 	false if reading failed
  */
 function ilLanguage($a_lang_key)
 {
     global $ilias, $log, $ilIliasIniFile, $ilUser, $ilSetting;
     $this->ilias = $ilias;
     if (!isset($log)) {
         if (is_object($ilias)) {
             require_once "./Services/Logging/classes/class.ilLog.php";
             $this->log = new ilLog(ILIAS_LOG_DIR, ILIAS_LOG_FILE, $ilias->getClientId(), ILIAS_LOG_ENABLED);
         }
     } else {
         $this->log =& $log;
     }
     $this->lang_key = $a_lang_key;
     $this->text = array();
     $this->loaded_modules = array();
     //$this->lang_path = ILIAS_ABSOLUTE_PATH.substr($this->ilias->ini->readVariable("language","path"),1);
     // if no directory was found fall back to default lang dir
     //if (!is_dir($this->lang_path))
     //{
     $this->lang_path = ILIAS_ABSOLUTE_PATH . "/lang";
     //}
     $this->cust_lang_path = ILIAS_ABSOLUTE_PATH . "/Customizing/global/lang";
     $this->lang_default = $ilIliasIniFile->readVariable("language", "default");
     if (is_object($ilSetting) && $ilSetting->get("language") != "") {
         $this->lang_default = $ilSetting->get("language");
     }
     $this->lang_user = $ilUser->prefs["language"];
     $langs = $this->getInstalledLanguages();
     if (!in_array($this->lang_key, $langs)) {
         $this->lang_key = $this->lang_default;
     }
     require_once './Services/Language/classes/class.ilCachedLanguage.php';
     $this->global_cache = ilCachedLanguage::getInstance($this->lang_key);
     if ($this->global_cache->isActive()) {
         $this->cached_modules = $this->global_cache->getTranslations();
     }
     $this->loadLanguageModule("common");
     return true;
 }
 /**
  * Save a set of translation in the database
  *
  * @access   static
  * @param    string      language key
  * @param    array       module.separator.topic => value
  * @param    array       module.separator.topic => remarks
  */
 public static function _saveValues($a_lang_key, $a_values = array(), $a_remarks = array())
 {
     global $ilDB, $lng;
     if (!is_array($a_values)) {
         return;
     }
     $save_array = array();
     $save_date = date("Y-m-d H:i:s", time());
     // read and get the global values
     require_once "./Services/Language/classes/class.ilLanguageFile.php";
     $global_file_obj = ilLanguageFile::_getGlobalLanguageFile($a_lang_key);
     $global_values = $global_file_obj->getAllValues();
     $global_comments = $global_file_obj->getAllComments();
     // save the single translations in lng_data
     foreach ($a_values as $key => $value) {
         $keys = explode($lng->separator, $key);
         if (count($keys) == 2) {
             $module = $keys[0];
             $topic = $keys[1];
             $save_array[$module][$topic] = $value;
             if ($global_values[$key] != $value or $global_comments[$key] != $a_remarks[$key]) {
                 $local_change = $save_date;
             } else {
                 $local_change = null;
             }
             ilObjLanguage::replaceLangEntry($module, $topic, $a_lang_key, $value, $local_change, $a_remarks[$key]);
         }
     }
     // save the serialized module entries in lng_modules
     foreach ($save_array as $module => $entries) {
         $set = $ilDB->query(sprintf("SELECT * FROM lng_modules " . "WHERE lang_key = %s AND module = %s", $ilDB->quote($a_lang_key, "text"), $ilDB->quote($module, "text")));
         $row = $ilDB->fetchAssoc($set);
         $arr = unserialize($row["lang_array"]);
         if (is_array($arr)) {
             $entries = array_merge($arr, $entries);
         }
         ilObjLanguage::replaceLangModule($a_lang_key, $module, $entries);
     }
     require_once 'class.ilCachedLanguage.php';
     ilCachedLanguage::getInstance($a_lang_key)->flush();
 }