php多语言切换---转载

文件内容:

/include/language.php

  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. public function getFileDir($file) {
  24. $dir = $this->dir;
  25. if (file_exists ( $this->getLanguageDir () . $file )) {
  26. return $this->getLanguageDir () . $file;
  27. } else if (file_exists ( $dir . $this->language_area . "/" . $file )) {
  28. return $dir . $this->language_area . "/" . $file;
  29. } else if (file_exists ( $dir . $this->language_country . "/" . $file )) {
  30. return $dir . $this->language_country . "/" . $file;
  31. } else if (file_exists ( $dir . "en/" . $file )) {
  32. return $dir . "en/" . $file;
  33. } else {
  34. return false;
  35. }
  36. }
  37. /*
  38. 取得当前使用语言的文件夹
  39. */
  40. public function getLanguageDir() {
  41. return $this->language_dir;
  42. }
  43. /*
  44. 初始化语言文件夹
  45. */
  46. private function initLanguageDir() {
  47. $dir = $this->dir;
  48. if (file_exists ( $dir . $this->language_area ) && ! empty ( $this->language_area )) {
  49. $this->language_dir = $dir . $this->language_area . "/";
  50. } else if (file_exists ( $dir . $this->language_country ) && ! empty ( $this->language_country )) {
  51. $this->language_dir = $dir . $this->language_country . "/";
  52. } else {
  53. $this->language_dir = $dir . "en/";
  54. }
  55. }
  56. /*
  57. 初始化默认语言
  58. */
  59. public function initDefaultLanguage() {
  60. if ($this->getCookieLanguage ()) {
  61. return;
  62. }
  63. $language = $_SERVER ['HTTP_ACCEPT_LANGUAGE'];
  64. preg_match_all ( "/[\w-]+/", $language, $language );
  65. $this->language_area = $language [0] [0];
  66. @$this->language_country = $language [0] [1];
  67. $this->setCookieLanguage ();
  68. }
  69. /*
  70. 从cookie中导入语言种类
  71. */
  72. public function getCookieLanguage() {
  73. if (! @empty ( $_COOKIE ['lang'] )) {
  74. $language = $_COOKIE ['lang'];
  75. if (strpos ( $language, "-" )) {
  76. $this->language_area = $language;
  77. } else {
  78. $this->language_country = $language;
  79. }
  80. return true;
  81. }
  82. return false;
  83. }
  84. /*
  85. 把当前的语言种类放到cookie中
  86. */
  87. public function setCookieLanguage($lang = "") {
  88. if (empty ( $lang )) {
  89. $lang = $this->language_area;
  90. }
  91. if (empty ( $lang )) {
  92. $lang = $this->language_country;
  93. }
  94. if (empty ( $lang )) {
  95. return false;
  96. }
  97. setcookie ( "lang", $lang, time () + 365 * 24 * 3600, "/", $this->getDomain () );
  98. return true;
  99. }
  100. public function getDomain() {
  101. if (empty ( $this->domain )) {
  102. $domain = $_SERVER ['SERVER_NAME'];
  103. if (strcasecmp ( $domain, "localhost" ) === 0) {
  104. $this->domain = $domain;
  105. return $this->domain;
  106. }
  107. if (preg_match ( "/^(\d+\.){3}\d+$/", $domain, $domain_temp )) {
  108. $this->domain = $domain_temp [0];
  109. return $this->domain;
  110. }
  111. preg_match_all ( "/\w+\.\w+$/", $domain, $domain );
  112. $this->domain = $domain [0] [0];
  113. return $this->domain;
  114. } else {
  115. return $this->domain;
  116. }
  117. }
  118. }
  119. ?>

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

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

/include/language/en/language.php

  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. // writeCookie("myCookie", "my name", 24);
  23. // Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.
  24. function setCookie( name, value, expires, path, domain, secure ) {
  25. var today = new Date();
  26. today.setTime( today.getTime() );
  27. if ( expires ) {
  28. expires = expires * 1000 * 60 * 60 * 24;
  29. }
  30. var expires_date = new Date( today.getTime() + (expires) );
  31. document.cookie = name+'='+escape( value ) +
  32. ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
  33. ( ( path ) ? ';path=' + path : '' ) +
  34. ( ( domain ) ? ';domain=' + domain : '' ) +
  35. ( ( secure ) ? ';secure' : '' );
  36. }
  37. </script>
  38. <ul>
  39. <?php
  40. foreach($languages as $key=>$value)
  41. {
  42. echo '<li><a href="javascript://" onclick="change_language(\'',$key,'\')"';
  43. echo '>',$language_message[$languages[$key]["name"]],' <img src="data:images/',$languages[$key]["image"],'" border="0"/></a></li>';
  44. }
  45. ?>
  46. </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. ?>

/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>

/test_language.php

  1. <?php
  2. include_once 'header.php';
  3. include_once 'header.tpl';
  4. $language_file = $lang->getFileDir ( "speak_language.php" );
  5. require_once ($language_file);
  6. print_r($speak_language_message);
  7. ?>
上一篇:Normalize [ 浏览器渲染格式化 ]


下一篇:ONLY三行脚本 SQL数据恢复到指定时间点