query('select * from :table_languages order by sort_order, name'); $Qlanguages->bindTable(':table_languages', TABLE_LANGUAGES); $Qlanguages->setCache('languages'); $Qlanguages->execute(); while ($Qlanguages->next()) { $this->_languages[$Qlanguages->value('code')] = array('id' => $Qlanguages->valueInt('languages_id'), 'name' => $Qlanguages->value('name'), 'locale' => $Qlanguages->value('locale'), 'charset' => $Qlanguages->value('charset'), 'date_format_short' => $Qlanguages->value('date_format_short'), 'date_format_long' => $Qlanguages->value('date_format_long'), 'time_format' => $Qlanguages->value('time_format'), 'text_direction' => $Qlanguages->value('text_direction'), 'image' => $Qlanguages->value('image'), 'currencies_id' => $Qlanguages->valueInt('currencies_id'), 'numeric_separator_decimal' => $Qlanguages->value('numeric_separator_decimal'), 'numeric_separator_thousands' => $Qlanguages->value('numeric_separator_thousands')); } $Qlanguages->freeResult(); $this->set(); } /* Public methods */ function load($key) { global $osC_Cache; if ($osC_Cache->read('languages-' . $this->_code . '-' . $key)) { $this->_definitions = array_merge($this->_definitions, $osC_Cache->getCache()); } else { $osC_XML = new osC_XML('includes/languages/' . $this->_code . '.xml'); $osC_XML->parse(); $definitions = $osC_XML->getArray(); foreach ($definitions['language']['definitions']['definition'] as $def) { if ($def['group']['VALUE'] == $key) { $this->_definitions[$def['key']['VALUE']] = (string)$def['value']['VALUE']; } } $osC_Cache->writeBuffer($this->_definitions); } } function get($key) { if (isset($this->_definitions[$key])) { return $this->_definitions[$key]; } return $key; } function set($code = '') { $this->_code = $code; if (empty($this->_code)) { if (isset($_SESSION['language'])) { $this->_code = $_SESSION['language']; } elseif (isset($_COOKIE['language'])) { $this->_code = $_COOKIE['language']; } else { $this->_code = $this->getBrowserSetting(); } } if (empty($this->_code) || ($this->exists($this->_code) === false)) { $this->_code = DEFAULT_LANGUAGE; } if (!isset($_COOKIE['language']) || (isset($_COOKIE['language']) && ($_COOKIE['language'] != $this->_code))) { tep_setcookie('language', $this->_code, time()+60*60*24*90); } if ((isset($_SESSION['language']) === false) || (isset($_SESSION['language']) && ($_SESSION['language'] != $this->_code))) { $_SESSION['language'] = $this->_code; } } function getBrowserSetting() { if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $browser_languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); $languages = array('ar' => 'ar([-_][[:alpha:]]{2})?|arabic', 'bg' => 'bg|bulgarian', 'br' => 'pt[-_]br|brazilian portuguese', 'ca' => 'ca|catalan', 'cs' => 'cs|czech', 'da' => 'da|danish', 'de' => 'de([-_][[:alpha:]]{2})?|german', 'el' => 'el|greek', 'en' => 'en([-_][[:alpha:]]{2})?|english', 'es' => 'es([-_][[:alpha:]]{2})?|spanish', 'et' => 'et|estonian', 'fi' => 'fi|finnish', 'fr' => 'fr([-_][[:alpha:]]{2})?|french', 'gl' => 'gl|galician', 'he' => 'he|hebrew', 'hu' => 'hu|hungarian', 'id' => 'id|indonesian', 'it' => 'it|italian', 'ja' => 'ja|japanese', 'ko' => 'ko|korean', 'ka' => 'ka|georgian', 'lt' => 'lt|lithuanian', 'lv' => 'lv|latvian', 'nl' => 'nl([-_][[:alpha:]]{2})?|dutch', 'no' => 'no|norwegian', 'pl' => 'pl|polish', 'pt' => 'pt([-_][[:alpha:]]{2})?|portuguese', 'ro' => 'ro|romanian', 'ru' => 'ru|russian', 'sk' => 'sk|slovak', 'sr' => 'sr|serbian', 'sv' => 'sv|swedish', 'th' => 'th|thai', 'tr' => 'tr|turkish', 'uk' => 'uk|ukrainian', 'tw' => 'zh[-_]tw|chinese traditional', 'zh' => 'zh|chinese simplified'); foreach ($browser_languages as $browser_language) { foreach ($languages as $key => $value) { if (eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $browser_language) && $this->exists($key)) { return $key; } } } } return false; } function exists($code) { return array_key_exists($code, $this->_languages); } function getAll() { return $this->_languages; } function getData($key, $language = '') { if (empty($language)) { $language = $this->_code; } return $this->_languages[$language][$key]; } function getID() { return $this->_languages[$this->_code]['id']; } function getName() { return $this->_languages[$this->_code]['name']; } function getCode() { return $this->_code; } function getLocale() { return $this->_languages[$this->_code]['locale']; } function getCharacterSet() { return $this->_languages[$this->_code]['charset']; } function getDateFormatShort() { return $this->_languages[$this->_code]['date_format_short']; } function getDateFormatLong() { return $this->_languages[$this->_code]['date_format_long']; } function getTimeFormat() { return $this->_languages[$this->_code]['time_format']; } function getTextDirection() { return $this->_languages[$this->_code]['text_direction']; } function getImage() { return $this->_languages[$this->_code]['image']; } function getCurrencyID() { return $this->_languages[$this->_code]['currencies_id']; } function getNumericDecimalSeparator() { return $this->_languages[$this->_code]['numeric_separator_decimal']; } function getNumericThousandsSeparator() { return $this->_languages[$this->_code]['numeric_separator_thousands']; } } ?>