conkeyn 发表于 2013-1-29 07:38:16

php 多语言切换

目录结构:
 
http://www.agoit.com/upload/attachment/79376/45169238-a671-365b-beff-30607e727a95.jpg
//============================================
文件内容:
/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 ;@$this->language_country = $language ;$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 ;return $this->domain;}preg_match_all ( "/\w+\.\w+$/", $domain, $domain );$this->domain = $domain ;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
<?phpinclude_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> <?phpforeach($languages as $key=>$value){echo '<li><a href="javascript://" ';   echo '>',$language_message[$languages[$key]["name"]],' <img src="images/',$languages[$key]["image"],'" border="0"/></a></li>';}?></ul> /header.php
<?phpinclude_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
<?phpinclude_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地址可以使用。
 
 
 
 
 
页: [1]
查看完整版本: php 多语言切换