Mercurial > SimpleWebPresenter
diff Language.inc.php @ 134:b6b4a58c7625
Using .inc.php rather than just .inc for include files.
| author | Tom Fredrik Blenning <bfg@bfgconsult.no> |
|---|---|
| date | Sun, 22 Jan 2023 19:22:00 +0100 |
| parents | Language.inc@74f7b64bdb78 |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Language.inc.php Sun Jan 22 19:22:00 2023 +0100 @@ -0,0 +1,55 @@ +<?php +/** + * Functionality for determining language use + */ +class Language { + /** + * Extracts the accepted languages from the GET query, sorted by + * preference(q-value). + * + * @return associative array of language codes with q value + */ + static function accepted() { + $langs = array(); + + if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + // break up string into pieces (languages and q factors) + preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse); + + if (count($lang_parse[1])) { + // create a list like "en" => 0.8 + $langs = array_combine($lang_parse[1], $lang_parse[4]); + + // set default to 1 for any without q factor + foreach ($langs as $lang => $val) { + if ($val === '') $langs[$lang] = 1; + } + + // sort list based on value + arsort($langs, SORT_NUMERIC); + } + } + return $langs; + } + + /** + * From the list of desired languages, pick the best which we can serve. + * + * @param $default what to choose if no match could be found. + */ + static function prefer($default) + { + $language = $default; + $langs = self::accepted(); + if ($langs) { + foreach ($langs as $l => $val) { + if (file_exists($l)) { + $language = $l; + break; + } + } + } + return $language; + } +} +?> \ No newline at end of file
