Index: kernel/application.php =================================================================== --- kernel/application.php (revision 12677) +++ kernel/application.php (working copy) @@ -533,22 +533,26 @@ return $path; } - function GetDefaultLanguageId() + function GetDefaultLanguageId($init = false) { - static $language_id = 0; + static $language_info = Array (); - if ($language_id > 0) { - return $language_id; + $language_key = ($this->IsAdmin() && $init) || (count($language_info) == 1) ? 'Admin' : 'Front'; + + if (array_key_exists($language_key, $language_info) && $language_info[$language_key] > 0) { + return $language_info[$language_key]; } $table = $this->getUnitOption('lang', 'TableName'); $id_field = $this->getUnitOption('lang', 'IDField'); - $sql = 'SELECT '.$id_field.' + $sql = 'SELECT '.$id_field.', IF(AdminInterfaceLang, "Admin", "Front") AS LanguageKey FROM '.$table.' - WHERE (PrimaryLang = 1) AND (Enabled = 1)'; - $language_id = $this->Conn->GetOne($sql); + WHERE (AdminInterfaceLang = 1 OR PrimaryLang = 1) AND (Enabled = 1)'; + $language_info = $this->Conn->GetCol($sql, 'LanguageKey'); + $language_id = $language_info && array_key_exists($language_key, $language_info) ? $language_info[$language_key] : false; + if (!$language_id && defined('IS_INSTALL') && IS_INSTALL) { $language_id = 1; } Index: kernel/languages/phrases_cache.php =================================================================== --- kernel/languages/phrases_cache.php (revision 12677) +++ kernel/languages/phrases_cache.php (working copy) @@ -109,12 +109,7 @@ } else { if ($this->Application->IsAdmin()) { - $id_field = $this->Application->getUnitOption('lang', 'IDField'); - $table_name = $this->Application->getUnitOption('lang', 'TableName'); - $sql = 'SELECT '.$id_field.' - FROM '.$table_name.' - WHERE AdminInterfaceLang = 1'; - $this->LanguageId = $this->Conn->GetOne($sql); + $this->LanguageId = $this->Application->Session->GetField('Language'); } else { $this->LanguageId = $this->Application->GetVar('m_lang'); Index: kernel/session/inp_session.php =================================================================== --- kernel/session/inp_session.php (revision 12677) +++ kernel/session/inp_session.php (working copy) @@ -115,7 +115,7 @@ { $fields_hash = Array ( 'PortalUserId' => $this->Application->IsAdmin() ? 0 : -2, // Guest - 'Language' => $this->Application->GetDefaultLanguageId(), + 'Language' => $this->Application->GetDefaultLanguageId(true), 'Theme' => $this->Application->GetDefaultThemeId(), 'IpAddress' => $_SERVER['REMOTE_ADDR'], // getenv('REMOTE_ADDR') won't work on IIS, so use $_SERVER instead 'GroupId' => $this->Application->ConfigValue('User_GuestGroup'),