1<?php 2/* Copyright (c) 1998-2015 ILIAS open source, Extended GPL, see docs/LICENSE */ 3 4require_once 'Services/Language/interfaces/interface.ilLanguageDetector.php'; 5 6/** 7 * Class ilHttpRequestsLanguageDetector 8 * @author Michael Jansen <mjansen@databay.de> 9 * @ingroup Services/Language 10 */ 11class ilHttpRequestsLanguageDetector implements ilLanguageDetector 12{ 13 /** 14 * @var string 15 */ 16 protected $header_value; 17 18 /** 19 * @param array $header_value 20 */ 21 public function __construct($header_value) 22 { 23 $this->header_value = $header_value; 24 } 25 26 /** 27 * Returns the detected ISO2 language code 28 * @throws ilLanguageException 29 * @return string 30 */ 31 public function getIso2LanguageCode() 32 { 33 if (strlen($this->header_value)) { 34 $matches = array(); 35 // Format: de,de-DE;q=0.8,en-US;q=0.6,en;q=0.4 36 preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $this->header_value, $matches); 37 if (count($matches[1])) { 38 $langs = array_combine($matches[1], $matches[4]); 39 foreach ($langs as $lang => $val) { 40 if ($val === '') { 41 $langs[$lang] = 1; 42 } 43 } 44 45 arsort($langs, SORT_NUMERIC); 46 47 $keys = array_keys($langs); 48 if (isset($keys[0])) { 49 return substr($keys[0], 0, 2); 50 } 51 } 52 } 53 54 require_once 'Services/Language/exceptions/class.ilLanguageException.php'; 55 throw new ilLanguageException('Could not extract any language information from request.'); 56 } 57} 58