多语言国际化1

简介:

 


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

文件内容:

/include/language.php

Java代码   收藏代码
  1. <?php  
  2. $languages = array ();  
  3. $languages ['zh-cn'] ["name"] = "china";  
  4. $languages ["zh-cn"] ["image"] = "flag1.jpg";  
  5. $languages ["en"] ["name"] = "english";  
  6. $languages ["en"] ["image"] = "flag2.jpg";  
  7. class Language {  
  8.     public $language_area;  
  9.     public $language_country;  
  10.     public $language_dir;  
  11.     public $dir;  
  12.     public function __construct() {  
  13.         $this->dir = str_replace ( "\\", "/", dirname ( __FILE__ ) ) . "/language/";  
  14.         $this->initDefaultLanguage ();  
  15.         if (empty ( $this->language_country ) && ! empty ( $this->language_area )) {  
  16.             $this->language_country = substr ( $this->language_area, 0, strpos ( $this->language_area, "-" ) );  
  17.         }  
  18.         $this->initLanguageDir ();  
  19.     }  
  20.       
  21.     /* 
  22.     取得语言文件的绝对路径 
  23.     */  
  24.     public function getFileDir($file) {  
  25.         $dir = $this->dir;  
  26.         if (file_exists ( $this->getLanguageDir () . $file )) {  
  27.             return $this->getLanguageDir () . $file;  
  28.         } else if (file_exists ( $dir . $this->language_area . "/" . $file )) {  
  29.             return $dir . $this->language_area . "/" . $file;  
  30.         } else if (file_exists ( $dir . $this->language_country . "/" . $file )) {  
  31.             return $dir . $this->language_country . "/" . $file;  
  32.         } else if (file_exists ( $dir . "en/" . $file )) {  
  33.             return $dir . "en/" . $file;  
  34.         } else {  
  35.             return false;  
  36.         }  
  37.     }  
  38.     /* 
  39.     取得当前使用语言的文件夹 
  40.     */  
  41.     public function getLanguageDir() {  
  42.         return $this->language_dir;  
  43.     }  
  44.       
  45.     /* 
  46.     初始化语言文件夹 
  47.     */  
  48.     private function initLanguageDir() {  
  49.         $dir = $this->dir;  
  50.         if (file_exists ( $dir . $this->language_area ) && ! empty ( $this->language_area )) {  
  51.             $this->language_dir = $dir . $this->language_area . "/";  
  52.         } else if (file_exists ( $dir . $this->language_country ) && ! empty ( $this->language_country )) {  
  53.             $this->language_dir = $dir . $this->language_country . "/";  
  54.         } else {  
  55.             $this->language_dir = $dir . "en/";  
  56.         }  
  57.     }  
  58.       
  59.     /* 
  60.     初始化默认语言 
  61.     */  
  62.     public function initDefaultLanguage() {  
  63.         if ($this->getCookieLanguage ()) {  
  64.             return;  
  65.         }  
  66.         $language = $_SERVER ['HTTP_ACCEPT_LANGUAGE'];  
  67.         preg_match_all ( "/[\w-]+/", $language, $language );  
  68.         $this->language_area = $language [0] [0];  
  69.         @$this->language_country = $language [0] [1];  
  70.         $this->setCookieLanguage ();  
  71.     }  
  72.       
  73.     /* 
  74.     从cookie中导入语言种类 
  75.     */  
  76.     public function getCookieLanguage() {  
  77.         if (! @empty ( $_COOKIE ['lang'] )) {  
  78.             $language = $_COOKIE ['lang'];  
  79.             if (strpos ( $language, "-" )) {  
  80.                 $this->language_area = $language;  
  81.             } else {  
  82.                 $this->language_country = $language;  
  83.             }  
  84.             return true;  
  85.         }  
  86.         return false;  
  87.     }  
  88.       
  89.     /* 
  90.        把当前的语言种类放到cookie中 
  91.     */  
  92.     public function setCookieLanguage($lang = "") {  
  93.         if (empty ( $lang )) {  
  94.             $lang = $this->language_area;  
  95.         }  
  96.         if (empty ( $lang )) {  
  97.             $lang = $this->language_country;  
  98.         }  
  99.         if (empty ( $lang )) {  
  100.             return false;  
  101.         }  
  102.         setcookie ( "lang", $lang, time () + 365 * 24 * 3600"/", $this->getDomain () );  
  103.         return true;  
  104.     }  
  105.       
  106.     public function getDomain() {  
  107.         if (empty ( $this->domain )) {  
  108.             $domain = $_SERVER ['SERVER_NAME'];  
  109.             if (strcasecmp ( $domain, "localhost" ) === 0) {  
  110.                 $this->domain = $domain;  
  111.                 return $this->domain;  
  112.             }  
  113.             if (preg_match ( "/^(\d+\.){3}\d+$/", $domain, $domain_temp )) {  
  114.                 $this->domain = $domain_temp [0];  
  115.                 return $this->domain;  
  116.             }  
  117.             preg_match_all ( "/\w+\.\w+$/", $domain, $domain );  
  118.             $this->domain = $domain [0] [0];  
  119.             return $this->domain;  
  120.         } else {  
  121.             return $this->domain;  
  122.         }  
  123.     }  
  124. }  
  125. ?>  

 /include/language/zh-cn/language.php

Java代码   收藏代码
  1. <?php   
  2. $language_message["china"]="中文";  
  3. $language_message["english"]="英文";  
  4. ?>  

 /include/language/en/language.php

Java代码   收藏代码
  1. <?php   
  2. $language_message["china"]="china";  
  3. $language_message["english"]="english";  
  4. ?>  
/chang_language.php代码   收藏代码
  1. <?php  
  2. include_once 'header.php';  
  3. include_once 'header.tpl';  
  4. $language_file=$lang->getFileDir("language.php");  
  5. include($language_file);  
  6. ?>  
  7. <script language="javascript">  
  8. var domain="<?php echo $lang->getDomain();?>";  
  9. var cur_language="<?php echo $current_language;?>";  
  10. function change_language(lan)  
  11. {  
  12.     alert("lan");  
  13.     setCookie("lang",lan,1,"/",domain,false);  
  14.      if(cur_language==lan)  
  15.      {  
  16.          return ;  
  17.      }  
  18.      <?php if(!$_POST){ ?>  
  19.      document.location.reload();  
  20.      <?php } ?>  
  21. }  
  22.   
  23. // writeCookie("myCookie""my name"24);  
  24.   
  25. // Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.  
  26.   
  27.   
  28. function setCookie( name, value, expires, path, domain, secure ) {  
  29.   
  30.     var today = new Date();  
  31.       
  32.     today.setTime( today.getTime() );  
  33.       
  34.     if ( expires ) {  
  35.       
  36.     expires = expires * 1000 * 60 * 60 * 24;  
  37.       
  38.     }  
  39.       
  40.     var expires_date = new Date( today.getTime() + (expires) );  
  41.       
  42.     document.cookie = name+'='+escape( value ) +  
  43.       
  44.     ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()  
  45.       
  46.     ( ( path ) ? ';path=' + path : '' ) +  
  47.       
  48.     ( ( domain ) ? ';domain=' + domain : '' ) +  
  49.       
  50.     ( ( secure ) ? ';secure' : '' );  
  51.   
  52. }  
  53.   
  54.   
  55. </script>  
  56. <ul>  
  57.  <?php  
  58. foreach($languages as $key=>$value)  
  59. {  
  60.   echo '<li><a href="javascript://" onclick="change_language(\'',$key,'\')"';  
  61.    echo '>',$language_message[$languages[$key]["name"]],' <img src="images/',$languages[$key]["image"],'" border="0"/></a></li>';  
  62. }  
  63. ?>  
  64. </ul>  
 
/header.php代码   收藏代码
  1. <?php  
  2. include_once (dirname ( __FILE__ ) . "/include/language.php");  
  3. $lang = new Language ( );  
  4. //print_r($lang->language_area);  
  5. $current_language = getCurrentLanguage ();  
  6. //print_r($current_language);  
  7. function getCurrentLanguage() {  
  8.     global $lang, $languages;  
  9.     if (array_key_exists ( $lang->language_area, $languages )) {  
  10.         return $lang->language_area;  
  11.     } else if (array_key_exists ( $lang->language_country, $languages )) {  
  12.         return $lang->language_country;  
  13.     } else {  
  14.         return "en";  
  15.     }  
  16.   
  17. }  
  18. ?>  
 
/header.tpl代码   收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>多语言测试</title>  
  6. <link href="css/css.css" rel="stylesheet" type="text/css" />  
  7. <script type="text/javascript" src="javascript/prototype_1_6.js"></script>  
  8. </head>  
 

测试地址为:http://127.0.0.1/multiple_language/chang_language.php

localhost不能使用 ,正式域名及IP地址可以使用。

相关文章
|
4天前
|
自然语言处理 中间件 开发者
Django的国际化与本地化支持:打造多语言应用
【4月更文挑战第15天】Django,一款强大的Web框架,内置出色的支持国际化和本地化功能,使得创建多语言应用变得简单。本文介绍了国际化(i18n)与本地化(l10n)的概念,阐述了Django的相应机制,包括标记可翻译字符串、提取与翻译、设置语言和地区、本地化格式处理。遵循文中步骤,开发者能有效构建适应不同语言和地区需求的Web应用,提升用户体验。
|
6月前
|
自然语言处理
81 # 多语言
81 # 多语言
40 0
|
6月前
|
Web App开发 XML 自然语言处理
开源软件的国际化和本地化
开源软件的国际化和本地化
57 1
|
8月前
|
XML 存储 JSON
前端国际化和本地化的实现方法
前端国际化和本地化的实现方法
338 0
|
12月前
|
JavaScript
对国际化 i18n 项目的一点思考
对国际化 i18n 项目的一点思考
190 0
Yii2的国际化和本地化支持是什么?底层原理是什么?
Yii2的国际化和本地化支持是什么?底层原理是什么?
116 0
|
移动开发 自然语言处理 小程序
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
国际化
国际化
78 0
国际化
国际化器
国际化器
58 0