php 网站的多语言设置(IP地址区分国内国外)

序:本来,以为做一个语言切换的按钮就可以一直安枕无忧了,突然上头说要来一个区分国内与国外的,在国内访问的显示中文,在国外访问的显示英文。好吧!找一下资料看看。

tp5,需求是按钮切换的,选择参考3;

方法一:IP查询网

代码实现( 参考3有完整的)

// 多语言 将 think_val 自定义设置为 customLang
function lang(){
  $lang = input('lang');
  if(!$lang){
      // 默认:think_var
      if(Cookie::has("customLang")){
          $lang = Cookie::get("customLang");
      }else{
         // $lang = "zh-cn";
          $ip = request() -> ip(0,true);
          $datatype = 'json';
          $url = 'https://api.ip138.com/ip/?ip='.$ip.'&datatype='.$datatype;
          $header = array('token:你的token');
          $obj = $this-> getRequest($url,$header);
          $objson = json_decode($obj,true);
          $isAddress = $objson['data'][0];
          if($isAddress == "中国"){
              $lang = "zh-cn";
          }else{
              $lang = "en-us";
          }
      }
   }
   $lang = Lang::range($lang);//设定当前语言
   Lang::load(THINK_PATH.'lang'.DS.$lang.EXT,$lang);//加载当前语言包
   Cookie::set('customLang',$lang);
   return $lang;
}

方法二:

maxmind GeoIP :先使用邮箱注册一个账号,并登录账号,创建一个密钥,名称就像一个备注,它会生成一个ID和密钥,记得保存好,它只显示一次;

1、登录后就可以下载一个数据包了,数据包是每周二更新的:

 2、获取代码支持:

1、安装:

composer require geoip2/geoip2:~2.0

2、下载数据库,需要注册邮箱账号登录:

https://www.maxmind.com/en/accounts/722009/geoip/downloads

3、代码实现:use GeoIp2\Database\Reader;

function lang(){
    $lang = input('lang');
    if(!$lang){
        if(Cookie::has("lenze_lang")){
            $lang = Cookie::get("lenze_lang");
        }else{
            $ip = request() -> ip(0,true);
            // maxmind 获取判断
            $reader = new Reader('./public/static/GeoLite2-Country.mmdb'); // 解压的数据包
            $record = $reader->country($ip);
            $isAddress = $record->country->isoCode;
            if($isAddress == "cn" || $isAddress == "CN"){
                $lang = "zh-cn";
            }else{
                $lang = "en-us";
            }
        }
    }
    $lang = Lang::range($lang);//设定当前语言
    Lang::load(THINK_PATH.'lang'.DS.$lang.EXT,$lang);//加载当前语言包
    Cookie::set('lenze_lang',$lang);
    return json(['lang'=>$lang]);
}

方法三:

可以使用高德地图的IP定位,不过,高德需要搜索的IP地址(仅支持国内),刚好,搜索得到的就判断为国内,搜索数据为空的为国外。

IP定位-API文档-开发指南-Web服务 API | 高德地图API

这个有开发文档了,就不用我多唠叨和做无用功了,嘎嘎!

参考:

1、最新多种方式, 判断客户端IP是国内还是国外?_解忧杂货铺Q的博客-优快云博客_判断ip是国内还是国外

2、tp5多语言切换_红卡的博客-优快云博客_tp5多语言

3、tp5 实现多语言切换的一个小bug_逸曦穆泽的博客-优快云博客_tp 多语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逸曦穆泽

您的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值