setCurrentLocale($languageId)) { $e = new Mb_exception("Locale with language ID " . $languageId . " could not be set."); } } /** * Get the current locale, evaluating GET/POST variables, browser languages * and a default locale (in that preference) * * @returns current locale */ function setCurrentLocale($languageId) { // try to set the locale to $languageId if (isset($languageId)) { if ($this->checkAndSetLocale($languageId)) { return true; } } // TODO: try to set to user settings // determine the browser setting and try to set locale according to that if ($this->browserLanguage == null) { $this->setBrowserLanguages(); } foreach ($this->browserLanguages as $lang) { if ($this->checkAndSetLocale($lang)) { return true; } } // set to default language return $this->checkAndSetLocale($this->defaultLanguage); } /** * checks if a locale is available; if yes, it is set via setlocale * * @returns true if the the locale is set successfully; otherwise false */ function checkAndSetLocale($languageId) { if ($this->os == null) { $this->os = $this->guessHostOS(); } if ($this->os != null) { if ($this->isKnownLanguage($languageId)) { if ($this->systemLocales == null) { $this->setSystemLocales(); } $locale = $this->systemLocales[$this->knownLanguages[$languageId]][$this->os]; if (setlocale(LC_ALL, $locale)) { $this->name = $locale; $e = new Mb_notice("locale " . $this->name . " ok on " . $this->os); return true; } $e = new Mb_notice("locale " . $locale . " not found."); } } return false; } /** * Guess the operating system which on which this code is running * multiple methods are tested for reliably guessing the os * * @private * @returns string with os name */ function guessHostOS(){ if (strncasecmp(php_uname(), 'Windows', 7) == 0) return 'windows'; else if (strncasecmp(php_uname(), 'Linux', 5) == 0) return 'linux'; else if (strncasecmp(php_uname(), 'OpenBSD', 7) == 0) return 'bsd'; else { throw new Mb_exception('unknown platform: could not interpret uname. php_uname() returned '. php_uname().'. Please report to MB developers'); return null; } } /** * checks if a language is supported * * @returns true if the language is supported; otherwise false */ function isKnownLanguage($languageId) { if ($this->knownLocales == null) { $this->setKnownLanguages(); } return array_key_exists($languageId, $this->knownLanguages); } /** * determines the available Locales on this system */ function setSystemLocales() { $this->systemLocales['it_IT'] = array('linux' => 'it_IT.utf8', 'windows' => 'Italian_Italy.1252', 'bsd' => 'it_IT', 'posix' => 'it_IT'); $this->systemLocales['de_DE'] = array('linux' => 'de_DE.utf8', 'windows' => 'German_Germany.1252', 'bsd' => 'de_DE', 'posix' => 'it_IT'); $this->systemLocales['en_US'] = array('linux' => 'en_US.utf8', 'windows' => 'English_United States.1252', 'bsd' => 'en_US', 'posix' => 'it_IT'); } /** * set the known languages */ function setKnownLanguages() { $this->knownLanguages = array('en_US' => 'en_US', 'en' => 'en_US', 'de_DE' => 'de_DE', 'de' => 'de_DE', 'it_IT' => 'it_IT', 'it' => 'it_IT'); } /** * sets the languages accepted by the client browser */ function setBrowserLanguages () { $this->browserLanguages = array(); $bLangs = split(',', $_SERVER["HTTP_ACCEPT_LANGUAGE"]); foreach ($bLangs as $lang) { if (strpos($lang, ';') === false) array_push($this->browserLanguages, $lang); else array_push($this->browserLanguages, substr($lang, 0, strpos($lang, ';'))); } } } ?>