使用 cookies 记住用户上次访问的语言版本(php 代码)

本网站为双语。http://dallascao.com/cn/ 为中文版本,http://dallscao.com/en/ 为英文版本。访问 http://dallascao.com/ 时,您会被根据您浏览器的默认语言或您上次访问的语言版本重新定向至 /cn/ 或 /en/。我使用了 cookies 来记录您上次访问的语言版本,当您再次访问时,将您定向至该版本。如果您是第一次访问,您打开的将是与您的浏览器默认语言相匹配的语言版本。

以下步骤可实现上述目的。首先编辑英文版本的 header.php,将以下代码插入到 标签之前:

<!--set permanent cookie -->
<?php 
setcookie("lang", "en", time()+94608000, "/", ".dallascao.com");
?>

以上代码在您的电脑上记录一个变量 “lang” ,赋值 “en”。94608000 是过期时间(3年)。”/” 和”.dallascao.com” 意味着该 cookies 自 dallascao.com 及其下属域名的根目录起效。将代码插入 header.ph 后,当您访问英文版本时,您的访问便会被记住。

同样,您需要在中文版本的 header.php 插入以下代码。

<!--set permanent cookie -->
<?php 
setcookie("lang", "cn", time()+94608000, "/", ".dallascao.com");
?>

也就是说当您访问中文版本时,变量 “lang” 便会被赋值 “cn”。

最后,在要目录创建 index.php,内容为:

<?php $lang=$_COOKIE["lang"];
switch ($lang) {
 
case 'cn':
header('Location:  http://dallascao.com/cn');
break;
 
case 'en':
header('Location:  http://dallascao.com/en');
break;
#如果没找到 cookies,则读取用户游览器的默认语言。
default:
	$lang = getDefaultLanguage(); 
	switch ($lang) { 
       case 'zh-cn' : 
               header('Location:  http://dallascao.com/cn'); 
               break; 
       default: 
	          header('Location: http://dallascao.com/en'); 
              break; 
		} 
break;
}
?>
 
 
<?php
 
 
 
#########################################################
# Copyright ? 2008 Darrin Yeager                        #
# http://www.dyeager.org/                               #
# Licensed under BSD license.                           #
#   http://www.dyeager.org/downloads/license-bsd.php    #
#########################################################

function getDefaultLanguage() {
   if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
      return parseDefaultLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
   else
      return parseDefaultLanguage(NULL);
   }
 
function parseDefaultLanguage($http_accept, $deflang = "en") {
   if(isset($http_accept) && strlen($http_accept) > 1)  {
      # Split possible languages into array
      $x = explode(",",$http_accept);
      foreach ($x as $val) {
         #check for q-value and create associative array. No q-value means 1 by rule
         if(preg_match("/(.*);q=([0-1]{0,1}\.\d{0,4})/i",$val,$matches))
            $lang[$matches[1]] = (float)$matches[2];
         else
            $lang[$val] = 1.0;
      }
 
      #return default language (highest q-value)
      $qval = 0.0;
      foreach ($lang as $key => $value) {
         if ($value > $qval) {
            $qval = (float)$value;
            $deflang = $key;
         }
      }
   }
   return strtolower($deflang);
}
 
 
?>

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">