php 多语言切换

目录结构:

 

//============================================

文件内容:

/include/language.php

 

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

 

/include/language/en/language.php

 /chang_language.php

getFileDir("language.php");
include($language_file);
?>

 /header.php

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





多语言测试



 /test_language.php

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地址可以使用。

 

 

 

 

 

你可能感兴趣的:(PHP)