Add language detection (guessing)
This commit is contained in:
@@ -126,7 +126,7 @@ class ToolBox
|
||||
return json_encode($asData);
|
||||
}
|
||||
|
||||
public static function curl($sUrl, $bHeader=false, $asPostData=array(), $sCookie='', $sCreds='') {
|
||||
public static function curl($sUrl, $bHeader=false, $asPostData=array(), $sReturnType='text', $sCookie='', $sCreds='') {
|
||||
$oCurl = curl_init();
|
||||
curl_setopt($oCurl, CURLOPT_URL, $sUrl);
|
||||
curl_setopt($oCurl, CURLOPT_VERBOSE, false);
|
||||
@@ -148,8 +148,18 @@ class ToolBox
|
||||
if($sCreds!='') curl_setopt($oCurl, CURLOPT_USERPWD, $sCreds);
|
||||
|
||||
$sContent = curl_exec($oCurl);
|
||||
|
||||
$bSuccess = ($sContent!==false);
|
||||
$sDesc = '';
|
||||
if(!$bSuccess) $sDesc = curl_errno($oCurl).': '.curl_strerror(curl_errno($oCurl));
|
||||
curl_close($oCurl);
|
||||
return $sContent;
|
||||
|
||||
switch($sReturnType) {
|
||||
case 'json': $oContent = json_decode($sContent, true); break;
|
||||
default: $oContent = $sContent;
|
||||
}
|
||||
|
||||
return array('result'=>$bSuccess, 'desc'=>$sDesc, 'content'=>$oContent);
|
||||
}
|
||||
|
||||
public static function getMimeType($sPath, $bSubTypeOnly=false)
|
||||
@@ -454,6 +464,41 @@ class ToolBox
|
||||
return $sText;
|
||||
}
|
||||
|
||||
public static function getUserLanguage($available_languages, $sDefaultLang='') {
|
||||
$http_accept_language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])?$_SERVER['HTTP_ACCEPT_LANGUAGE']:'';
|
||||
|
||||
//Format: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
|
||||
preg_match_all("/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i", $http_accept_language, $hits, PREG_SET_ORDER);
|
||||
|
||||
$bestlang = $sDefaultLang;
|
||||
$bestqval = 0;
|
||||
|
||||
foreach($hits as $arr) {
|
||||
$langprefix = strtolower($arr[1]);
|
||||
if(!empty($arr[3])) {
|
||||
$langrange = strtolower($arr[3]);
|
||||
$language = $langprefix.'-'.$langrange;
|
||||
}
|
||||
else $language = $langprefix;
|
||||
|
||||
//Q Value
|
||||
$qvalue = 1.0;
|
||||
if(!empty($arr[5])) $qvalue = floatval($arr[5]);
|
||||
|
||||
//find q-maximal language
|
||||
if(in_array($language, $available_languages) && $qvalue > $bestqval) {
|
||||
$bestlang = $language;
|
||||
$bestqval = $qvalue;
|
||||
}
|
||||
//if no direct hit, try the prefix only but decrease q-value by 10% (as http_negotiate_language does)
|
||||
elseif(in_array($langprefix, $available_languages) && ($qvalue * 0.9) > $bestqval) {
|
||||
$bestlang = $langprefix;
|
||||
$bestqval = $qvalue * 0.9;
|
||||
}
|
||||
}
|
||||
return $bestlang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return relative time description
|
||||
* FIXME shitty implementation of i18n
|
||||
|
||||
Reference in New Issue
Block a user