我需要检测用户的国家/地区并显示他/她所在国家/地区的网站语言。 (土耳其语为土耳其语,英语为所有其他人)
我怎样才能以最快的方式做到这一点?性能对我来说很重要。
我正在寻找IPInfoDB' API,还有更好的选择吗?
(我正在使用PHP)
答案 0 :(得分:4)
对于2017年可能会访问的人来说,这是一个非常简单易用的解决方案
<button class="btn dropdown-toggle" style="cursor:pointer;z-index:1000!important;margin-top:-67px;background:none!important;font-size:1.4em;" onclick="window.location.href='language'">
(a) <?php
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$url = "http://api.wipmania.com/".$ip;
(h) $country = file_get_contents($url); //ISO code for Nigeria it is NG check your country ISO code
?>
<?php if ($country == ""){
echo "Country not found";
} else { ?>
<script>
var map = "<?php echo $country ?>";
$.ajax({
type : 'POST',
url : 'http://www.mowemy.com/countryflag.php',
data : {map: map},
success : function(r) {
//console.log("success: " + r);
$('#mumil').html(r);
} })
</script>
<?php } ?>
<div id ="mumil" style="font-size:13px!important;margin-top:5px;"></div>
</button>
让我把它放在字母A - H是检测你的国家的ISO编号的脚本我的国家尼日利亚它是NG你可以谷歌搜索你的国家ISO号码,用这个脚本自动检测。然后我创建了一个页面,其中包含一些信息,你将AJAX发送到该页面,它发送回国家国旗颜色和名称简单易用请在AJAX之前发出通知,以便运行AJAX,除非它工作好运
答案 1 :(得分:3)
如果您依赖外部网站,可以在http://www.hostip.info/use.html使用API。
您还可以使用GeoIP PHP API
当然,实现链接的Orbit链接可能只是为您节省了通过API的麻烦。
祝你好运。答案 2 :(得分:2)
我发现最好的方法是使用&#34; GAE-IP-TO-COUNTRY&#34;图书馆: https://github.com/andris9/GAE-IP-TO-COUNTRY/tree/master/src/ip_files
使用示例(您必须将&#34; ip_files&#34;目录复制到您的服务器):
function iptocountry($ip) {
$numbers = preg_split( "/\./", $ip);
include("./ip_files/".$numbers[0].".php");
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);
foreach($ranges as $key => $value){
if($key<=$code){
if($ranges[$key][0]>=$code){$country=$ranges[$key][1];break;}
}
}
return $country;
}
$country=iptocountry($_SERVER['REMOTE_ADDR']);
echo $country;
答案 3 :(得分:1)
答案 4 :(得分:1)
正如其他人所指出的,检查土耳其语Accept-Language
HTTP标头可能更好。如果它是首选语言,请提供服务。否则服务英语。
这是some code。
答案 5 :(得分:0)
我使用Accept-Language编写了下一个东西,正如其他用户指出的那样:
function GetAcceptedLangs()
{
$res=array();
$a=getallheaders();
if(isset($a["Accept-Language"]))
{
$aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"]));
foreach($aceptlangs as $i=>$v)
{
if(trim($v)!="")
$res[]=trim($v);
}
}
return $res;
}
一个简单的
print_r(GetAcceptedLangs());
返回我的案例:
Array ( [0] => es-ES [1] => es [2] => en )
您可以在定义像这样的数组后更改为您的内部语言值,例如:
$al={"ES-es"=>"es","es"=>"es","en"=>"en"......}
它们已按用户首选项排序。
如果阵列中不存在所有语言,您可以使用网站的默认语言。如果浏览器不发送Accept-Language标头,这也是有效的。
删除子区域值的另一个版本
function GetAcceptedLangs2()
{
$res=array();
$a=getallheaders();
if(isset($a["Accept-Language"]))
{
$aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"]));
foreach($aceptlangs as $i=>$v)
{
$va=trim($v);
if(($pos=strpos($va,"-"))!==false)
$l=substr($va,0,$pos);
else
$l=$va;
if($l!="" && !isset($check[$l]))
{
$check[$l]=1;
$res[]=$l;
}
}
}
return $res;
}
它会在我的情况下返回
Array ( [0] => es [1] => en )
答案 6 :(得分:0)
这是我喜欢使用的直接方式
<?php
class GeoIp
{
protected $api = 'https://ipapi.co/%s/json/';
protected $properties = [];
//------------------------------------------------------
/**
* __get
*
* @access public
* - @param $key string
* - @return string / bool
*/
public function __get($key)
{
if( isset($this->properties[$key]))
{
return $this->properties[$key];
}
return null;
}
//------------------------------------------------------
/**
* request_geoip
*
* @access public
* - @return void
*/
public function request_geoip($ip)
{
$url = sprintf($this->api, $ip);
$data = $this->send_geoip_request($url);
$this->properties = json_decode($data, true);
//var_dump($this->properties);
}
//------------------------------------------------------
/**
* send_geoip_request
*
* @access public
* - @param $url string
* - @return json
*/
public function send_geoip_request($url)
{
$loc_content = file_get_contents($url);
return $loc_content;
}
}
//You can access it like this:
$geo = new GeoIp;
$geo->request_geoip('foo');
echo $geo->country;
?>
访问this website 了解详情