-
Notifications
You must be signed in to change notification settings - Fork 0
/
Language.php
40 lines (39 loc) · 1.19 KB
/
Language.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
/*
* Browser Language: Simple class to extract an ordered list of the user's preferred language from the header HTTP_ACCEPT_LANGUAGE.
* Jonas Raoni Soares da Silva <http://raoni.org>
* https://github.com/jonasraoni/php-browser-language
*/
class Language{
private static $language = null;
public static function getLanguages(){
self::$language === null && new Language;
return self::$language;
}
public static function getBestMatch($langs = array()){
foreach($langs as $n => $v)
$langs[$n] = strtolower($v);
$r = array();
foreach(self::getLanguages() as $l => $v){
($s = strtok($l, '-')) != $l && $r[$s] = 0;
if(in_array($l, $langs))
return $l;
}
foreach($r as $l => $v)
if(in_array($l, $langs))
return $l;
return null;
}
private function __construct(){
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ($list = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']))){
if(preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', $list, $list)){
self::$language = array_combine($list[1], $list[2]);
foreach(self::$language as $n => $v)
self::$language[$n] = +$v ? +$v : 1;
arsort(self::$language);
}
}
else
self::$language = array();
}
}