php设置accept,PHP或htaccess通过Accept-Language重写URL?
我在PHP中这样做。接受语言是一件复杂的事情。浏览器可以建议它想要接受的多种语言(每种语言都有一个显示它更喜欢的品质因子)。
不幸的是,我的网站只有主要语言(EN,ES,FR)的翻译,而不是(en_US,en_GB,es_MX,es_ES),因此我选择了这些主要语言中指定的最高质量因子。
下面是一个未经测试的编辑,它应该从我的代码中删除大多数或所有依赖项。对不起,事情让我以前的答案感到困惑。我对我的函数进行了几次调用,并在其他地方进行了一些语言检查。下面的代码应该设置会话语言变量,您应该在其他地方使用它来确定正确的翻译。
它似乎比我以前的答案复杂得多,我不得不在我自己的代码中实现它。对于需要特定翻译(EN_US,EN_GB)的人,应修改以下代码以考虑preg_match_all中的匹配2。
$websiteLanguages = array('EN', 'ES');
session_start();
// The user wants a specific language regardless of their accept settings.
if (isset($_GET["lang"]))
{
$_SESSION["language"] = $_GET["lang"];
return;
}
// A language has already been decided upon.
if (isset($_SESSION["language"]))
{
return;
}
// No language has been chosen we should choose from the accept language.
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
// Parse the Accept-Language according to:
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
preg_match_all(
'/([a-z]{1,8})' . // M1 - First part of language e.g en
'(-[a-z]{1,8})*\s*' . // M2 -other parts of language e.g -us
// Optional quality factor M3 ;q=, M4 - Quality Factor
'(;\s*q\s*=\s*((1(\.0{0,3}))|(0(\.[0-9]{0,3}))))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'],
$langParse);
$langs = $langParse[1]; // M1 - First part of language
$quals = $langParse[4]; // M4 - Quality Factor
$numLanguages = count($langs);
$langArr = array();
for ($num = 0; $num < $numLanguages; $num++)
{
$newLang = strtoupper($langs[$num]);
$newQual = isset($quals[$num]) ?
(empty($quals[$num]) ? 1.0 : floatval($quals[$num])) : 0.0;
// Choose whether to upgrade or set the quality factor for the
// primary language.
$langArr[$newLang] = (isset($langArr[$newLang])) ?
max($langArr[$newLang], $newQual) : $newQual;
}
// sort list based on value
// langArr will now be an array like: array('EN' => 1, 'ES' => 0.5)
arsort($langArr, SORT_NUMERIC);
// The languages the client accepts in order of preference.
$acceptedLanguages = array_keys($langArr);
// Set the most preferred language that we have a translation for.
foreach ($acceptedLanguages as $preferredLanguage)
{
if (in_array($preferredLanguage, $websiteLanguages))
{
$_SESSION['Language'] = $preferredLanguage;
return;
}
}
}
// We will have returned by now if a language could be chosen, otherwise use
// our default language.
$_SESSION['Language'] = "EN";
php设置accept,PHP或htaccess通过Accept-Language重写URL?相关推荐
- 杰奇linux伪静态,常用的13个.htaccess重写URL的伪静态规则
网站伪静态重写url是提高URL标准化一个比较实用的方法: 下面是我收集的13种伪静态重写规则, 使用方法:把规则里的域名 http://example.com 改成你自己的网站域名 放在网站根目录下 ...
- php网址中mod=,php – Apache mod-rewrite htaccess – 带参数的动态url
其他程序员! 我正在尝试获取以下动态网址: http://example.com/pdfs/viewpdf?id=1494 要在浏览器的地址栏中重写: http://example.com/pdfs/ ...
- java accept()用法_Java Stream.Builder accept()用法及代码示例
Stream.Builder accept(T t)用于在流的构建阶段将元素插入到元素中.它将元素添加到正在构建的流中. 用法: void accept(T t) 参数:此方法接受强制参数t,该参数是 ...
- php对某目录设置ip权限,apache - .htaccess如何单独给某个请求设置IP白名单权限?...
例如http://demo.com/hello 这条url,我想限制只有211.125.10.5这个IP可以访问,其他IP访问均返回403,该如何写.htaccess PS1: /hello不是一个目 ...
- apache 支持.htaccess重写url
1. httpd.conf 添加: <Directory />Options +Indexes +FollowSymLinks +MultiviewsAllowOverride allRe ...
- WordPress页面和搜索页伪静态方法
WordPress页面和搜索页设置伪静态的前提是服务器支持伪静态重写URL Rewrite功能.WordPress设置固定连接以后,文章页可以实现伪静态,页面依然不是html结尾的静态页面.下面介绍一 ...
- Eclipse JavaWeb 关于Servlet的部分笔记
这个是参照B站上的一个学习视频做的笔记,但是那个视频里面老师讲的比较碎,我学的不连续,怕忘了,就记好笔记,方便随时查阅. 视频链接:我在B站看的学习视频 目录 WEB启动时创建Servlet 建立Dy ...
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...
- 高性能网络编程(一)----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比 ...
最新文章
- 体系文件管理解决方案
- 图解RHEL6安装过程、VMware-tools的安装及repo仓库的配置
- Java黑皮书课后题第5章:**5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9
- RouterModule.forRoot 和 RouterModule.forChild 的区别
- jmeter(二)录制脚本
- mac 连接hbase的图形化界面_MAC安装Hbase以及Hbase基本命令
- [深度学习-原理]浅谈Attention Model
- Android一个简单易用的进度条
- docker利用Dockerfile来制作镜像
- 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
- python3 科学计算_python3 科学计算之pandas入门(一)
- 从源码角度彻底理解ReentrantLock(重入锁)
- 密码学中PBC库的使用
- 【Java基础教程】用Java实现猜数字小游戏
- 东电计算机专业好就业吗,东北电力大学就业前景怎样好不好
- 爬虫练习-爬取拉勾网招聘信息(2020.2.2)
- 【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项
- 搭建在线网校平台的三个好处
- 旗帜软件工作室——第一届年会总结
- 数据库(一):MySQL
热门文章
- SAP UI5 使用 Smart Control 的一个具体例子
- SAP Spartacus B2B user列表对应的Angular Component
- 程序员打造个人品牌 - Personal Brand的重要性
- SAP Spartacus activeBaseSite的设置逻辑
- 各种Java实现的常用排序算法
- JavaScript ES6对Proxy的原生支持的一个例子
- SAP Fiori Elements - how is enableAutoBinding set for SmartTable
- command exec make executable file not found in %PATH%
- SAP CRM Fiori应用Appointment startup parameters - 启动参数
- 使用async,await关键字进行API Access Token的获取