收起左侧

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

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

    管理员

    3578

    主题

    3636

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16661

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 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 Licensed © 2001-2013 Comsenz Inc.