收起左侧

    [技术分享] php多语言切换

    0
    回复
    183
    查看
    [复制链接]

    管理员

    2947

    主题

    2973

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10960
    发表于 2021-7-3 15:55:14 | 显示全部楼层 |阅读模式
    • <?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
    • Java代码  [url=][/url]
      • <?php
      • $language_message["china"]="中文";  
      • $language_message["english"]="英文";  
      • ?>

      /include/language/en/language.php
    • Java代码  [url=][/url]
      • <?php
      • $language_message["china"]="china";  
      • $language_message["english"]="english";  
      • ?>

      /chang_language.php
    • Java代码  [url=][/url]
      • <?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.tpl
      Html代码  [url=][/url]

      • <!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、本站所有信息都来源于互联网有违法信息与本网站立场无关。
    2、当有关部门,发现本论坛有违规,违法内容时,可联系站长删除,否则本站不承担任何责任。
    3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
    4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    5、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    6、如果使用本帖附件,本站程序只提供学习使用,请24小时内删除!使用者搭建运营触犯法律,违法,违规,本站不承担任何责任。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在线客服
    专注源码分享6年
    全国免费热线电话

    400-225-995

    周一至周日9:00-23:00

    反馈建议

    a5887776@163.com 在线QQ咨询

    Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.