diff options
author | Thomas Backlund <tmb@mageia.org> | 2014-10-12 12:27:45 +0300 |
---|---|---|
committer | Thomas Backlund <tmb@mageia.org> | 2014-10-12 12:27:45 +0300 |
commit | 9ce6d646ff718cd62f6434c9a4c94e450436612a (patch) | |
tree | 3ee82e5db7c0aee44a5573d9d17035c6ecac697d /localeDetection.class.php | |
parent | a0b2d09125d7911656fe4cb286f20643c4432281 (diff) | |
download | www-9ce6d646ff718cd62f6434c9a4c94e450436612a.tar www-9ce6d646ff718cd62f6434c9a4c94e450436612a.tar.gz www-9ce6d646ff718cd62f6434c9a4c94e450436612a.tar.bz2 www-9ce6d646ff718cd62f6434c9a4c94e450436612a.tar.xz www-9ce6d646ff718cd62f6434c9a4c94e450436612a.zip |
Revert "Updated Estonian translation"
This reverts commit a0b2d09125d7911656fe4cb286f20643c4432281.
Diffstat (limited to 'localeDetection.class.php')
-rw-r--r-- | localeDetection.class.php | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/localeDetection.class.php b/localeDetection.class.php new file mode 100644 index 000000000..d2a3a089d --- /dev/null +++ b/localeDetection.class.php @@ -0,0 +1,119 @@ +<?php + +/* ChooseLocale + * + * Licence: MPL 2/GPL 2.0/LGPL 2.1 + * Author: Pascal Chevrel, Mozilla + * Date : 2010-07-17 + * + * Description: + * Class to choose the locale which locale we will show to the visitor + * based on http acceptlang headers and our list of supported locales. + * + * +*/ + + + + +class ChooseLocale +{ + public $HTTPAcceptLang; + public $supportedLocales; + protected $detectedLocale; + protected $defaultLocale; + public $mapLonglocales; + + + public function __construct($list=array('en-US'), $force_http_accept_language = null) + { + if (null !== $force_http_accept_language) { + $this -> HTTPAcceptLang = $force_http_accept_language; + } else if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + $this -> HTTPAcceptLang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + } + + $this -> supportedLocales = array_unique($list); + $this -> setDefaultLocale('en-US'); + $this -> setCompatibleLocale(); + $this -> mapLonglocales = true; + + } + + public function getAcceptLangArray() + { + if (empty($this->HTTPAcceptLang)) return null; + + return explode(',', strtolower($this->HTTPAcceptLang)); + } + + public function getCompatibleLocale() + { + $l = $this -> defaultLocale; + $acclang = $this -> getAcceptLangArray(); + + if(!is_array($acclang)) { + return $this -> defaultLocale; + } + + foreach ($acclang as $var) { + $locale = $this -> _cleanHTTPlocaleCode($var); + $shortLocale = array_shift(explode('-', $locale)); + + if (in_array($locale, $this -> supportedLocales)) { + $l = $locale; + break; + } + + if (in_array($shortLocale, $this -> supportedLocales)) { + $l = $shortLocale; + break; + } + + // check if we map visitors short locales to site long locales + // like en -> en-GB + if ($this -> mapLonglocales == true) { + foreach ($this -> supportedLocales as $var) { + $shortSupportedLocale = array_shift(explode('-', $var)); + if ($shortLocale == $shortSupportedLocale) { + $l = $var; + break; + } + } + } + + } + + return $l; + } + + public function getDefaultLocale() { + return $this -> defaultLocale; + } + + public function setCompatibleLocale() { + $this -> detectedLocale = $this -> getCompatibleLocale(); + } + + public function setDefaultLocale($locale) { + + // the default locale should always be among the site locales + // if not, the first locale in the supportedLocales array is default + if (!in_array($locale, $this -> supportedLocales)) { + $this -> defaultLocale = $this -> supportedLocales[0]; + + } else { + $this -> defaultLocale = $locale; + } + return; + } + + private function _cleanHTTPlocaleCode($str) + { + $locale = explode(';', $str); + $locale = trim($locale[0]); + + return $locale; + } + +}
\ No newline at end of file |