Useful Information Note

PHP多语言切换

文件:/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_demo.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>




上一篇:PHP 多语言切换的简单实现方法
下一篇:PHP 替换str_replace的使用方法,支持多个替换