PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/IdeaPHP/library/Idea/Language.php

http://qwaszx.googlecode.com/
PHP | 199 lines | 95 code | 19 blank | 85 comment | 9 complexity | be4bb68959a5d067ae862661302ab886 MD5 | raw file
  1. <?php
  2. class Idea_Language{
  3. /**
  4. *
  5. * @var Idea_Language
  6. */
  7. static protected $_instance;
  8. /**
  9. * ????
  10. * @var array
  11. */
  12. protected $_data = array();
  13. /**
  14. * ??????????
  15. * @var array
  16. */
  17. protected $clientLanguage;
  18. /**
  19. * ?????
  20. * @var string
  21. */
  22. protected $currentLanguage;
  23. protected $_dir;
  24. protected function __construct(){
  25. $this->set();
  26. }
  27. /**
  28. *
  29. * @version Oren.Chen 2011-10-18 ??10:59:10
  30. * @return Idea_Language
  31. */
  32. static public function getInstance(){
  33. if (self::$_instance === null){
  34. self::$_instance = new self();
  35. }
  36. return self::$_instance;
  37. }
  38. /**
  39. * ??????????
  40. * @version Oren.Chen 2011-10-18 ??12:04:07
  41. * @param bool $re
  42. * @return array
  43. */
  44. public function detect($re = false){
  45. if ($this->clientLanguage === null || $re){
  46. $this->clientLanguage = $browser_langs = array();
  47. if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
  48. $browser_accept = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
  49. foreach ($browser_accept as $item){
  50. if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($item), $found)){
  51. $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0);
  52. }
  53. }
  54. arsort($browser_langs);
  55. foreach (array_keys($browser_langs) as $lancode){
  56. $this->clientLanguage[] = $lancode;
  57. }
  58. }
  59. }
  60. return $this->clientLanguage;
  61. }
  62. /**
  63. * ??????
  64. * @version Oren.Chen 2011-10-18 ??12:41:24
  65. * @param string $langcode
  66. */
  67. public function set($langcode = null){
  68. if ($langcode === null){
  69. $browser_langs = $this->detect();
  70. $this->currentLanguage = $browser_langs[0];
  71. }else {
  72. $this->currentLanguage = $langcode;
  73. }
  74. }
  75. /**
  76. * ????
  77. * @version Oren.Chen 2011-10-18 ??03:32:53
  78. * @param string $filename
  79. */
  80. public function load($filename){
  81. $file = $this->_dir . $this->currentLanguage . DIRECTORY_SEPARATOR . $filename . '.php';
  82. if (is_file($file)){
  83. $data = include $file;
  84. if (is_array($data)){
  85. $this->_data = array_merge($this->_data, $data);
  86. }
  87. return true;
  88. }
  89. return false;
  90. }
  91. /**
  92. * ?????
  93. * @version Oren.Chen 2011-10-18 ??03:32:44
  94. * @param string $dir
  95. */
  96. public function bind($dir){
  97. $this->_dir = $dir;
  98. }
  99. /**
  100. *
  101. * @version Oren.Chen 2011-10-18 ??02:09:24
  102. * @param string $text
  103. * @return string
  104. */
  105. public function gettext($text){
  106. return isset($this->_data[$text]) ? $this->_data[$text] : $text;
  107. }
  108. /**
  109. *
  110. * @version Oren.Chen 2011-10-18 ??02:09:27
  111. * @param string $text
  112. * @param string|array $variable
  113. * @return string
  114. */
  115. public function _($text, $variable = null){
  116. $args = func_get_args();
  117. $text = $this->gettext(array_shift($args));
  118. $current = current($args);
  119. return vsprintf($text, is_array($current) ? $current : $args);
  120. }
  121. /**
  122. *
  123. * @version Oren.Chen 2011-10-18 ??02:09:31
  124. * @param string $text
  125. * @param string|array $variable
  126. */
  127. public function e($text, $variable = null){
  128. $args = func_get_args();
  129. $text = $this->gettext(array_shift($args));
  130. $current = current($args);
  131. return vprintf($text, is_array($current) ? $current : $args);
  132. }
  133. /**
  134. *
  135. * @version Oren.Chen 2011-10-18 ??02:09:34
  136. * @param string $text
  137. * @param string|array $variable
  138. * @return string
  139. */
  140. static public function __($text, $variable = null){
  141. return call_user_func_array(array(self::$_instance, '_'), func_get_args());
  142. }
  143. /**
  144. *
  145. * @version Oren.Chen 2011-10-18 ??02:09:38
  146. * @param string $text
  147. * @param string|array $variable
  148. */
  149. static public function _e($text, $variable = null){
  150. return call_user_func_array(array(self::$_instance, 'e'), func_get_args());
  151. }
  152. }
  153. /**
  154. * ????????
  155. * @param string $text
  156. * @param string|array $variable
  157. * @return string
  158. */
  159. function __($text, $variable = null){
  160. return call_user_func_array(array(Idea_Language::getInstance(), '__'), func_get_args());
  161. }
  162. /*
  163. * ??????????
  164. * @param string $text
  165. * @param string|array $variable
  166. */
  167. function _e($text, $variable = null){
  168. return call_user_func_array(array(Idea_Language::getInstance(), '_e'), func_get_args());
  169. }
  170. function _p($text, $variable = null){
  171. $lang = Idea_Language::getInstance();
  172. $args = func_get_args();
  173. $num = func_num_args();
  174. $text = $lang->gettext(array_shift($args));
  175. if ($num > 1){
  176. echo 'printf(' . "'$text'" . ', \''.implode('\',\'', $args).'\');';
  177. }else {
  178. echo $text;
  179. }
  180. }