view Language.inc.php @ 136:60bc8f62384d default tip

Use internal URL if available to generate Sitemap.
author Tom Fredrik Blenning <bfg@bfgconsult.no>
date Mon, 23 Jan 2023 00:17:36 +0100
parents b6b4a58c7625
children
line wrap: on
line source

<?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;
  }
}
?>