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