language.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. $languages = array(
  3. 'en-US' => array('English', 'English'),
  4. 'zh-CN' => array('简体中文', 'Chinese_simplified'),
  5. 'zh-SG' => array('简体中文(新加坡)', 'Chinese_simplified'),
  6. 'zh-HK' => array('繁體中文(香港)', 'Chinese_traditional'),
  7. 'zh-TW' => array('繁體中文(台湾)', 'Chinese_traditional'),
  8. 'af' => array('Afrikaans', 'Afrikaans'),
  9. 'sq' => array('የአልባኒያ', 'Albanian'),
  10. 'am' => array('Amharic', 'Amharic'),
  11. 'ar' => array('Arabic', 'Arabic'),
  12. 'hy' => array('Armenian', 'Armenian'),
  13. 'az' => array('Azərbaycan', 'Azeerbaijani'),
  14. 'eu' => array('Basque', 'Basque'),
  15. 'be' => array('Belarusian', 'Belarusian'),
  16. 'bn' => array('Bengali', 'Bengali'),
  17. 'bs' => array('Bosnian', 'Bosnian'),
  18. 'bg' => array('Bulgarian', 'Bulgarian'),
  19. 'my' => array('Burmese', 'Burmese'),
  20. 'ca' => array('Catalan', 'Catalan'),
  21. 'ce' => array('Cebuano', 'Cebuano'), // 宿务语
  22. 'ch' => array('Chichewa', 'Chichewa'),
  23. 'co' => array('Corsican', 'Corsican'),
  24. 'hr' => array('Croatian', 'Croatian'),
  25. 'cs' => array('Czech', 'Czech'),
  26. 'da' => array('Danish', 'Danish'),
  27. 'nl' => array('Dutch', 'Dutch'),
  28. 'eo' => array('Esperanto', 'Esperanto'),
  29. 'et' => array('Estonian', 'Estonian'),
  30. 'fa' => array('Farsi', 'Farsi'),
  31. 'fil' => array('Filipino', 'Filipino'),
  32. 'fi' => array('Finnish', 'Finnish'),
  33. 'fr' => array('français', 'French'),
  34. 'fy' => array('Frisian', 'Frisian'),
  35. 'gl' => array('Galician', 'Galician'),
  36. 'ka' => array('Georgian', 'Georgian'),
  37. 'de' => array('Deutsch', 'German'),
  38. 'el' => array('Greek', 'Greek'),
  39. 'gu' => array('Gujarati', 'Gujarati'),
  40. 'ko' => array('Haitian Creole', 'Haitian Creole'),
  41. 'ha' => array('Hausa', 'Hausa'),
  42. 'haw' => array('Hawaiian', 'Hawaiian'),
  43. 'he' => array('Hebrew', 'Hebrew'),
  44. 'hi' => array('Hindi', 'Hindi'),
  45. 'hm' => array('Hmong', 'Hmong'),
  46. 'hu' => array('Hungarian', 'Hungarian'),
  47. 'is' => array('Icelandic', 'Icelandic'),
  48. 'ig' => array('Igbo', 'Igbo'),
  49. 'id' => array('Indonesian', 'Indonesian'),
  50. 'ga' => array('Irish', 'Irish'),
  51. 'it' => array('Italian', 'Italian'),
  52. 'jp' => array('日本語', 'Japanese'),
  53. 'jv' => array('Wong Jawa', 'Javanese'),
  54. 'kn' => array('Kannada', 'Kannada'),
  55. 'kk' => array('Kazakh', 'Kazakh'),
  56. 'kh' => array('Khmer', 'Khmer'),
  57. 'ko' => array('한국의', 'Korean'),
  58. 'ku' => array('Kurdish', 'Kurdish'),
  59. 'kz' => array('Kyrgyz', 'Kyrgyz'),
  60. 'lo' => array('ພາສາລາວ', 'Lao'),
  61. 'la' => array('Latinae', 'Latin'),
  62. 'lv' => array('Latvian', 'Latvian'),
  63. 'lt' => array('Lithuanian', 'Lithuanian'),
  64. 'lu' => array('Luxembourgish', 'Luxembourgish'),
  65. 'mk' => array('Macedonian', 'Macedonian'),
  66. 'ma' => array('Malagasy', 'Malagasy'),
  67. 'ms' => array('Malay', 'Malay'),
  68. 'ml' => array('Malayalam', 'Malayalam'),
  69. 'mt' => array('Maltese', 'Maltese'),
  70. 'ma' => array('Maori', 'Maori'),
  71. 'mr' => array('Marathi', 'Marathi'),
  72. 'mn' => array('Mongolian', 'Mongolian'),
  73. 'ne' => array('Nepali', 'Nepali'),
  74. 'no' => array('Norwegian', 'Norwegian'),
  75. 'pa' => array('Pashto', 'Pashto'),
  76. 'pe' => array('Persian', 'Persian'),
  77. 'po' => array('Polish', 'Polish'),
  78. 'pg' => array('Português', 'Portuguese'),
  79. 'pu' => array('Punjabi', 'Punjabi'),
  80. 'ro' => array('Romanian', 'Romanian'),
  81. 'ru' => array('Russian', 'Russian'),
  82. 'sa' => array('Samoan', 'Samoan'),
  83. 'gd' => array('Scots Gaelic', 'Scots Gaelic'),
  84. 'sr' => array('Serbian', 'Serbian'),
  85. 'se' => array('Sesotho', 'Sesotho'),
  86. 'sh' => array('Shona', 'Shona'),
  87. 'si' => array('Sindhi', 'Sindhi'),
  88. 'sin' => array('Sinhala', 'Sinhala'),
  89. 'sk' => array('Slovak', 'Slovak'),
  90. 'sl' => array('Slovenian', 'Slovenian'),
  91. 'so' => array('Somali', 'Somali'),
  92. 'es' => array('Spanish', 'Spanish'),
  93. 'su' => array('Sundanese', 'Sundanese'),
  94. 'sw' => array('Swahili', 'Swahili'),
  95. 'sv' => array('Swedish', 'Swedish'),
  96. 'tj' => array('Tajik', 'Tajik'),
  97. 'ta' => array('Tamil', 'Tamil'),
  98. 'te' => array('Telugu', 'Telugu'),
  99. 'ts' => array('Thai', 'Thai'),
  100. 'tu' => array('Turkish', 'Turkish'),
  101. 'uk' => array('Ukrainian', 'Ukrainian'),
  102. 'ur' => array('Urdu', 'Urdu'),
  103. 'uz' => array('Uzbek', 'Uzbek'),
  104. 'vi' => array('Vietnamese', 'Vietnamese'),
  105. 'we' => array('Welsh', 'Welsh'),
  106. 'xh' => array('Xhosa', 'Xhosa'),
  107. 'yi' => array('Yiddish', 'Yiddish'),
  108. 'yo' => array('Yorùbá', 'Yoruba'),
  109. 'zu' => array('Zulu', 'Zulu')
  110. );
  111. class Language
  112. {
  113. public $language_area;
  114. public $language_country;
  115. public $language_dir;
  116. public $dir;
  117. public function __construct()
  118. {
  119. $this->dir = str_replace("\\", "/", dirname(__FILE__)) . "/language/";
  120. $this->initDefaultLanguage();
  121. if (empty($this->language_country) && !empty($this->language_area)) {
  122. $this->language_country = substr($this->language_area, 0, strpos($this->language_area, "-"));
  123. }
  124. $this->initLanguageDir();
  125. }
  126. /*
  127. 取得翻译文件的绝对路径
  128. */
  129. public function getFileDir($file)
  130. {
  131. $dir = $this->dir;
  132. if (file_exists($this->getLanguageDir() . $file)) {
  133. return $this->getLanguageDir() . $file;
  134. } else {
  135. if (file_exists($dir . $this->language_area . "/" . $file)) {
  136. return $dir . $this->language_area . "/" . $file;
  137. } else {
  138. if (file_exists($dir . $this->language_country . "/" . $file)) {
  139. return $dir . $this->language_country . "/" . $file;
  140. } else {
  141. // if (file_exists($dir . "en-US/" . $file)) {
  142. return $dir . "en-US/" . $file;
  143. // } else {
  144. // return false;
  145. // }
  146. }
  147. }
  148. }
  149. }
  150. /*
  151. 取得当前使用语言的文件夹
  152. */
  153. public function getLanguageDir()
  154. {
  155. return $this->language_dir;
  156. }
  157. /*
  158. 初始化语言文件夹
  159. */
  160. private function initLanguageDir()
  161. {
  162. $dir = $this->dir;
  163. if (file_exists($dir . $this->language_area) && !empty($this->language_area)) {
  164. $this->language_dir = $dir . $this->language_area . '/';
  165. } else {
  166. if (file_exists($dir . $this->language_country) && !empty($this->language_country)) {
  167. $this->language_dir = $dir . $this->language_country . '/';
  168. } else {
  169. $this->language_dir = $dir . 'en-US/';
  170. }
  171. }
  172. }
  173. /*
  174. 初始化默认语言
  175. */
  176. public function initDefaultLanguage()
  177. {
  178. if ($this->getCookieLanguage()) {
  179. return;
  180. }
  181. $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  182. preg_match_all("/[\\w-]+/", $language, $language);
  183. $this->language_area = $language[0][0];
  184. @($this->language_country = $language[0][1]);
  185. $this->setCookieLanguage();
  186. }
  187. /*
  188. 从cookie中导入语言种类
  189. */
  190. public function getCookieLanguage()
  191. {
  192. if (!@empty($_COOKIE['lang'])) {
  193. $language = $_COOKIE['lang'];
  194. if (strpos($language, "-")) {
  195. $this->language_area = $language;
  196. } else {
  197. $this->language_country = $language;
  198. }
  199. return true;
  200. }
  201. return false;
  202. }
  203. /*
  204. 把当前的语言种类放到cookie中
  205. */
  206. public function setCookieLanguage($lang = "")
  207. {
  208. if (empty($lang)) {
  209. $lang = $this->language_area;
  210. }
  211. if (empty($lang)) {
  212. $lang = $this->language_country;
  213. }
  214. if (empty($lang)) {
  215. return false;
  216. }
  217. setcookie("lang", $lang, time() + 365 * 24 * 3600, "/", $this->getDomain());
  218. return true;
  219. }
  220. public function getDomain()
  221. {
  222. if (empty($this->domain)) {
  223. $domain = $_SERVER['SERVER_NAME'];
  224. if (strcasecmp($domain, "localhost") === 0) {
  225. $this->domain = $domain;
  226. return $this->domain;
  227. }
  228. if (preg_match("/^(\\d+\\.){3}\\d+\$/", $domain, $domain_temp)) {
  229. $this->domain = $domain_temp[0];
  230. return $this->domain;
  231. }
  232. preg_match_all("/\\w+\\.\\w+\$/", $domain, $domain);
  233. $this->domain = $domain[0][0];
  234. return $this->domain;
  235. } else {
  236. return $this->domain;
  237. }
  238. }
  239. }