From 5e711ba3b272ced1fee9dc0447f6402f377e7b23 Mon Sep 17 00:00:00 2001 From: Romain d'Alverny Date: Fri, 22 Oct 2010 08:15:12 +0000 Subject: redirect root access after browser lang prefs --- localeDetection.class.php | 114 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 localeDetection.class.php (limited to 'localeDetection.class.php') diff --git a/localeDetection.class.php b/localeDetection.class.php new file mode 100644 index 000000000..40e9862e4 --- /dev/null +++ b/localeDetection.class.php @@ -0,0 +1,114 @@ + 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(',', $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 -- cgit v1.2.1