a5656456 发表于 2021-7-3 15:55:14

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
[*]Java代码http://conkeyn.iteye.com/images/icon_star.png

[*]<?php
[*]$language_message["china"]="中文";
[*]$language_message["english"]="英文";
[*]?>

/include/language/en/language.php[*]Java代码http://conkeyn.iteye.com/images/icon_star.png

[*]<?php
[*]$language_message["china"]="china";
[*]$language_message["english"]="english";
[*]?>

/chang_language.php[*]Java代码http://conkeyn.iteye.com/images/icon_star.png

[*]<?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://"';
[*]   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.tplHtml代码http://conkeyn.iteye.com/images/icon_star.png


[*]<!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);
[*]?>





页: [1]
查看完整版本: php多语言切换