/IdeaPHP/library/Idea/Language.php
PHP | 199 lines | 95 code | 19 blank | 85 comment | 9 complexity | be4bb68959a5d067ae862661302ab886 MD5 | raw file
- <?php
- class Idea_Language{
-
- /**
- *
- * @var Idea_Language
- */
- static protected $_instance;
-
- /**
- * ????
- * @var array
- */
- protected $_data = array();
-
- /**
- * ??????????
- * @var array
- */
- protected $clientLanguage;
-
- /**
- * ?????
- * @var string
- */
- protected $currentLanguage;
-
- protected $_dir;
-
- protected function __construct(){
- $this->set();
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??10:59:10
- * @return Idea_Language
- */
- static public function getInstance(){
- if (self::$_instance === null){
- self::$_instance = new self();
- }
- return self::$_instance;
- }
-
- /**
- * ??????????
- * @version Oren.Chen 2011-10-18 ??12:04:07
- * @param bool $re
- * @return array
- */
- public function detect($re = false){
- if ($this->clientLanguage === null || $re){
- $this->clientLanguage = $browser_langs = array();
- if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
- $browser_accept = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- foreach ($browser_accept as $item){
- if (preg_match("!([a-z-]+)(;q=([0-9\\.]+))?!", trim($item), $found)){
- $browser_langs[$found[1]] = (isset($found[3]) ? (float) $found[3] : 1.0);
- }
- }
- arsort($browser_langs);
- foreach (array_keys($browser_langs) as $lancode){
- $this->clientLanguage[] = $lancode;
- }
- }
- }
- return $this->clientLanguage;
- }
-
- /**
- * ??????
- * @version Oren.Chen 2011-10-18 ??12:41:24
- * @param string $langcode
- */
- public function set($langcode = null){
- if ($langcode === null){
- $browser_langs = $this->detect();
- $this->currentLanguage = $browser_langs[0];
- }else {
- $this->currentLanguage = $langcode;
- }
- }
-
- /**
- * ????
- * @version Oren.Chen 2011-10-18 ??03:32:53
- * @param string $filename
- */
- public function load($filename){
- $file = $this->_dir . $this->currentLanguage . DIRECTORY_SEPARATOR . $filename . '.php';
- if (is_file($file)){
- $data = include $file;
- if (is_array($data)){
- $this->_data = array_merge($this->_data, $data);
- }
- return true;
- }
- return false;
- }
-
- /**
- * ?????
- * @version Oren.Chen 2011-10-18 ??03:32:44
- * @param string $dir
- */
- public function bind($dir){
- $this->_dir = $dir;
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??02:09:24
- * @param string $text
- * @return string
- */
- public function gettext($text){
- return isset($this->_data[$text]) ? $this->_data[$text] : $text;
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??02:09:27
- * @param string $text
- * @param string|array $variable
- * @return string
- */
- public function _($text, $variable = null){
- $args = func_get_args();
- $text = $this->gettext(array_shift($args));
- $current = current($args);
- return vsprintf($text, is_array($current) ? $current : $args);
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??02:09:31
- * @param string $text
- * @param string|array $variable
- */
- public function e($text, $variable = null){
- $args = func_get_args();
- $text = $this->gettext(array_shift($args));
- $current = current($args);
- return vprintf($text, is_array($current) ? $current : $args);
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??02:09:34
- * @param string $text
- * @param string|array $variable
- * @return string
- */
- static public function __($text, $variable = null){
- return call_user_func_array(array(self::$_instance, '_'), func_get_args());
- }
-
- /**
- *
- * @version Oren.Chen 2011-10-18 ??02:09:38
- * @param string $text
- * @param string|array $variable
- */
- static public function _e($text, $variable = null){
- return call_user_func_array(array(self::$_instance, 'e'), func_get_args());
- }
- }
- /**
- * ????????
- * @param string $text
- * @param string|array $variable
- * @return string
- */
- function __($text, $variable = null){
- return call_user_func_array(array(Idea_Language::getInstance(), '__'), func_get_args());
- }
- /*
- * ??????????
- * @param string $text
- * @param string|array $variable
- */
- function _e($text, $variable = null){
- return call_user_func_array(array(Idea_Language::getInstance(), '_e'), func_get_args());
- }
- function _p($text, $variable = null){
- $lang = Idea_Language::getInstance();
- $args = func_get_args();
- $num = func_num_args();
- $text = $lang->gettext(array_shift($args));
- if ($num > 1){
- echo 'printf(' . "'$text'" . ', \''.implode('\',\'', $args).'\');';
- }else {
- echo $text;
- }
- }