目录结构:
//============================================
文件内容:
/include/language.php
<?php $languages = array (); $languages ['zh-cn'] ["name"] = "china"; $languages ["zh-cn"] ["image"] = "flag1.jpg"; $languages ["en"] ["name"] = "english"; $languages ["en"] ["image"] = "flag2.jpg"; class Language { public $language_area; public $language_country; public $language_dir; public $dir; public function __construct() { $this->dir = str_replace ( "\\", "/", dirname ( __FILE__ ) ) . "/language/"; $this->initDefaultLanguage (); if (empty ( $this->language_country ) && ! empty ( $this->language_area )) { $this->language_country = substr ( $this->language_area, 0, strpos ( $this->language_area, "-" ) ); } $this->initLanguageDir (); } /* 取得语言文件的绝对路径 */ public function getFileDir($file) { $dir = $this->dir; if (file_exists ( $this->getLanguageDir () . $file )) { return $this->getLanguageDir () . $file; } else if (file_exists ( $dir . $this->language_area . "/" . $file )) { return $dir . $this->language_area . "/" . $file; } else if (file_exists ( $dir . $this->language_country . "/" . $file )) { return $dir . $this->language_country . "/" . $file; } else if (file_exists ( $dir . "en/" . $file )) { return $dir . "en/" . $file; } else { return false; } } /* 取得当前使用语言的文件夹 */ public function getLanguageDir() { return $this->language_dir; } /* 初始化语言文件夹 */ private function initLanguageDir() { $dir = $this->dir; if (file_exists ( $dir . $this->language_area ) && ! empty ( $this->language_area )) { $this->language_dir = $dir . $this->language_area . "/"; } else if (file_exists ( $dir . $this->language_country ) && ! empty ( $this->language_country )) { $this->language_dir = $dir . $this->language_country . "/"; } else { $this->language_dir = $dir . "en/"; } } /* 初始化默认语言 */ public function initDefaultLanguage() { if ($this->getCookieLanguage ()) { return; } $language = $_SERVER ['HTTP_ACCEPT_LANGUAGE']; preg_match_all ( "/[\w-]+/", $language, $language ); $this->language_area = $language [0] [0]; @$this->language_country = $language [0] [1]; $this->setCookieLanguage (); } /* 从cookie中导入语言种类 */ public function getCookieLanguage() { if (! @empty ( $_COOKIE ['lang'] )) { $language = $_COOKIE ['lang']; if (strpos ( $language, "-" )) { $this->language_area = $language; } else { $this->language_country = $language; } return true; } return false; } /* 把当前的语言种类放到cookie中 */ public function setCookieLanguage($lang = "") { if (empty ( $lang )) { $lang = $this->language_area; } if (empty ( $lang )) { $lang = $this->language_country; } if (empty ( $lang )) { return false; } setcookie ( "lang", $lang, time () + 365 * 24 * 3600, "/", $this->getDomain () ); return true; } public function getDomain() { if (empty ( $this->domain )) { $domain = $_SERVER ['SERVER_NAME']; if (strcasecmp ( $domain, "localhost" ) === 0) { $this->domain = $domain; return $this->domain; } if (preg_match ( "/^(\d+\.){3}\d+$/", $domain, $domain_temp )) { $this->domain = $domain_temp [0]; return $this->domain; } preg_match_all ( "/\w+\.\w+$/", $domain, $domain ); $this->domain = $domain [0] [0]; return $this->domain; } else { return $this->domain; } } } ?>
/include/language/zh-cn/language.php
<?php $language_message["china"]="中文"; $language_message["english"]="英文"; ?>
/include/language/en/language.php
<?php $language_message["china"]="china"; $language_message["english"]="english"; ?>
/chang_language.php
<?php include_once 'header.php'; include_once 'header.tpl'; $language_file=$lang->getFileDir("language.php"); include($language_file); ?> <script language="javascript"> var domain="<?php echo $lang->getDomain();?>"; var cur_language="<?php echo $current_language;?>"; function change_language(lan) { alert("lan"); setCookie("lang",lan,1,"/",domain,false); if(cur_language==lan) { return ; } <?php if(!$_POST){ ?> document.location.reload(); <?php } ?> } // writeCookie("myCookie", "my name", 24); // Stores the string "my name" in the cookie "myCookie" which expires after 24 hours. function setCookie( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name+'='+escape( value ) + ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString() ( ( path ) ? ';path=' + path : '' ) + ( ( domain ) ? ';domain=' + domain : '' ) + ( ( secure ) ? ';secure' : '' ); } </script> <ul> <?php foreach($languages as $key=>$value) { echo '<li><a href="javascript://" onclick="change_language(\'',$key,'\')"'; echo '>',$language_message[$languages[$key]["name"]],' <img src="images/',$languages[$key]["image"],'" border="0"/></a></li>'; } ?> </ul>
/header.php
<?php include_once (dirname ( __FILE__ ) . "/include/language.php"); $lang = new Language ( ); //print_r($lang->language_area); $current_language = getCurrentLanguage (); //print_r($current_language); function getCurrentLanguage() { global $lang, $languages; if (array_key_exists ( $lang->language_area, $languages )) { return $lang->language_area; } else if (array_key_exists ( $lang->language_country, $languages )) { return $lang->language_country; } else { return "en"; } } ?>
/header.tpl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>多语言测试</title> <link href="css/css.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="javascript/prototype_1_6.js"></script> </head>
/test_language.php
<?php include_once 'header.php'; include_once 'header.tpl'; $language_file = $lang->getFileDir ( "speak_language.php" ); require_once ($language_file); print_r($speak_language_message); ?>
测试地址为:http://127.0.0.1/multiple_language/chang_language.php
localhost不能使用,正式域名及IP地址可以使用。