我在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?相关推荐

  1. 杰奇linux伪静态,常用的13个.htaccess重写URL的伪静态规则

    网站伪静态重写url是提高URL标准化一个比较实用的方法: 下面是我收集的13种伪静态重写规则, 使用方法:把规则里的域名 http://example.com 改成你自己的网站域名 放在网站根目录下 ...

  2. php网址中mod=,php – Apache mod-rewrite htaccess – 带参数的动态url

    其他程序员! 我正在尝试获取以下动态网址: http://example.com/pdfs/viewpdf?id=1494 要在浏览器的地址栏中重写: http://example.com/pdfs/ ...

  3. java accept()用法_Java Stream.Builder accept()用法及代码示例

    Stream.Builder accept(T t)用于在流的构建阶段将元素插入到元素中.它将元素添加到正在构建的流中. 用法: void accept(T t) 参数:此方法接受强制参数t,该参数是 ...

  4. php对某目录设置ip权限,apache - .htaccess如何单独给某个请求设置IP白名单权限?...

    例如http://demo.com/hello 这条url,我想限制只有211.125.10.5这个IP可以访问,其他IP访问均返回403,该如何写.htaccess PS1: /hello不是一个目 ...

  5. apache 支持.htaccess重写url

    1. httpd.conf 添加: <Directory />Options +Indexes +FollowSymLinks +MultiviewsAllowOverride allRe ...

  6. WordPress页面和搜索页伪静态方法

    WordPress页面和搜索页设置伪静态的前提是服务器支持伪静态重写URL Rewrite功能.WordPress设置固定连接以后,文章页可以实现伪静态,页面依然不是html结尾的静态页面.下面介绍一 ...

  7. Eclipse JavaWeb 关于Servlet的部分笔记

    这个是参照B站上的一个学习视频做的笔记,但是那个视频里面老师讲的比较碎,我学的不连续,怕忘了,就记好笔记,方便随时查阅. 视频链接:我在B站看的学习视频 目录 WEB启动时创建Servlet 建立Dy ...

  8. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  9. 高性能网络编程(一)----accept建立连接

    最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比 ...

最新文章

  1. 体系文件管理解决方案
  2. 图解RHEL6安装过程、VMware-tools的安装及repo仓库的配置
  3. Java黑皮书课后题第5章:**5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9
  4. RouterModule.forRoot 和 RouterModule.forChild 的区别
  5. jmeter(二)录制脚本
  6. mac 连接hbase的图形化界面_MAC安装Hbase以及Hbase基本命令
  7. [深度学习-原理]浅谈Attention Model
  8. Android一个简单易用的进度条
  9. docker利用Dockerfile来制作镜像
  10. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
  11. python3 科学计算_python3 科学计算之pandas入门(一)
  12. 从源码角度彻底理解ReentrantLock(重入锁)
  13. 密码学中PBC库的使用
  14. 【Java基础教程】用Java实现猜数字小游戏
  15. 东电计算机专业好就业吗,东北电力大学就业前景怎样好不好
  16. 爬虫练习-爬取拉勾网招聘信息(2020.2.2)
  17. 【MOOC】JS脚本|便于复制粘贴中国大学MOOC网站的测试题和选项
  18. 搭建在线网校平台的三个好处
  19. 旗帜软件工作室——第一届年会总结
  20. 数据库(一):MySQL

热门文章

  1. SAP UI5 使用 Smart Control 的一个具体例子
  2. SAP Spartacus B2B user列表对应的Angular Component
  3. 程序员打造个人品牌 - Personal Brand的重要性
  4. SAP Spartacus activeBaseSite的设置逻辑
  5. 各种Java实现的常用排序算法
  6. JavaScript ES6对Proxy的原生支持的一个例子
  7. SAP Fiori Elements - how is enableAutoBinding set for SmartTable
  8. command exec make executable file not found in %PATH%
  9. SAP CRM Fiori应用Appointment startup parameters - 启动参数
  10. 使用async,await关键字进行API Access Token的获取