php 网站的多语言设置(IP地址区分国内国外)
序:本来,以为做一个语言切换的按钮就可以一直安枕无忧了,突然上头说要来一个区分国内与国外的,在国内访问的显示中文,在国外访问的显示英文。好吧!找一下资料看看。
tp5,需求是按钮切换的,选择参考3;
方法一:IP查询网
代码实现( 参考3有完整的)
// 多语言 将 think_val 自定义设置为 customLang
function lang(){$lang = input('lang');if(!$lang){// 默认:think_varif(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的博客-CSDN博客_判断ip是国内还是国外
2、tp5多语言切换_红卡的博客-CSDN博客_tp5多语言
3、tp5 实现多语言切换的一个小bug_逸曦穆泽的博客-CSDN博客_tp 多语言
php 网站的多语言设置(IP地址区分国内国外)相关推荐
- 了解IP地址及如何设置IP地址
众所周知,在电话通讯中,电话用户是靠电话号码来识别的.同样,在网络中为了区别不同的计算机,也需要给计算机指定一个号码,这个号码就是"IP地址". 什么是IP地址 所谓IP地址就是给 ...
- 网站服务器的ip地址会变吗,网站的服务器变了 IP地址变吗
网站的服务器变了 IP地址变吗 内容精选 换一换 本文介绍通过华为云市场镜像"Drupal内容管理系统(LAMP)"搭建Drupal网站的方法.Drupal是使用PHP语言编写的开 ...
- 保存ip地址和计算机名称,批量设置IP地址和计算机名
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近由于病毒肆虐,学校的公共机房又瘫痪了,只好利用网络同传把机器全都克隆了一遍,可问题又来啦,每个计算机都要重新设置IP地址.子网掩码.网关和DNS服务器 ...
- 路由器与计算机IP配置,路由器设置之前 如何给电脑设置IP地址
我们都知道在连接好电脑和路由器之后,要对路由器进行设置之前,首要的问题就应该解决电脑设置IP地址的这个问题,然后才能访问路由器地址:192.168.1.1或者192.168.0.1,那么本文就为您详细 ...
- 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近由于病毒肆虐,学校的公共机房又瘫痪了,只好利用网络同传把机器全都克隆了一遍,可问题又来啦,每个计算机都要重新设置IP地址.子网掩码.网关和DNS服务器 ...
- 机房批量改计算机名计算机组,批量设置IP地址和计算机名
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近由于病毒肆虐,学校的公共机房又瘫痪了,只好利用网络同传把机器全都克隆了一遍,可问题又来啦,每个计算机都要重新设置IP地址.子网掩码.网关和DNS服务器 ...
- linux7 设置dns,RHEL7.0 系列-设置IP地址、网关和DNS
1.1.设置IP地址.网关和DNSRHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式.en代表的是enthernet(以太网),o代表的是onboard(内置),那一串数 ...
- linux7添加两个网关,RHEL7设置IP地址、网关和DNS(示例代码)
█网卡命名格式:enoxxxxx en:代表enthernet(以太网) o:代表onboard(内置) xxxxx:是主板的某种索引编号自动生成,以便保证其唯一性 ●方法1:进入网络配置文件,修改网 ...
- FreeBSD设置IP地址,网关,DNS
1.设置IP地址.网关 ee /etc/rc.conf #编辑 ifconfig_em0="inet 192.168.1.173 netmask 255.255.255.0" ...
- linux7添加两个网关,RHEL7设置IP地址、网关和DNS
█网卡命名格式:enoxxxxx en:代表enthernet(以太网) o:代表onboard(内置) xxxxx:是主板的某种索引编号自动生成,以便保证其唯一性 ●方法1:进入网络配置文件,修改网 ...
最新文章
- php 基于socket的基本通信
- 谷歌开源文本生成新方法 LaserTagger,直击 seq2seq 效率低、推理慢、控制差三大缺陷!
- 深入理解WMS(一):Window的创建过程
- 如何获取不同网站的favicon默认图标
- scala与python混合调用实验
- 16位汇编 寄存器的操作
- CAS单点登录 - 创建用户会话、全局门票、临时票据
- rsync同步服务配置手记
- 新增操作 失败后重试_可重试的操作
- jq控制div是否展示_jQuery控制多个DIV的显示和隐藏
- 纹理窗口Qt+OpenGL之纹理贴图
- 正则表达式处理字符串指定位置插入【高级】
- Instance2:login interface
- F - Warm up - hdu 4612(缩点+求树的直径)
- 全网最全的Java岗集合面试题(含答案)
- 美团点评合并,百度成O2O最大变量
- Redis Expire 设置key过期时间
- 通过命令行玩转Git,需要记住那些命令?
- python 练习洗牌
- java class常用反编译操作