view accept-language.inc @ 54:f938b292f046

Something went wrong during last merge. Fix it now.
author Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
date Thu, 11 Oct 2012 00:57:16 +0200
parents 2e6ba7259281
children 88482c6636c4
line wrap: on
line source

<?php
/**
 * @file
 * Functionality for determining language use
 */
class Language {
  function acceptedLanguages() {
    $langs = array();

    /**
     * Extracts the accepted languages from the GET query, sorted by
     * preference(q-value).
     *
     * @return associative array of language codes with q value
     */
    function acceptedLanguages() {
      $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;
    }

    function preferLanguage($prefer)
    {
      $language = $prefer;
      $langs = acceptedLanguages();
      if ($langs) {
	foreach ($langs as $l => $val) {
	  if (file_exists($l)) {
	    $language = $l;
	    break;
	  }
	}
      }
      return $language;
    }
  }
}
?>