芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp81/includes/I18N/Negotiator.php
| // | | // +----------------------------------------------------------------------+// // $Id: Negotiator.php 110339 2003-01-04 11:55:29Z mj $ /** * * //instantiate Locale_Negotiator * $negotiator = & new I18N_Negotiator(); * * //define which language[s] your site supports :: optional * $supportLangs = array('fr','jp'); * * //find first matched language * $lang = $negotiator->getLanguageMatch($supportedLangs); * * //define which countries your site supports :: optional * $supportCountries = array('gb','us'); * * //find first matched Country * $countryCode = $negotiator->getCountryMatch($lang,$supportCountries); * * echo 'Language Code: '.$lang.' * Language Name: '.$negotiator->getLanguageName($lang).' * Country Code: '.$countryCode.' * Country Name: '.$negotiator->getCountryName($countryCode); */ class I18N_Negotiator{ // {{{ properties /** * Save default country code. * * @type : string * @access: private */ var $_defaultCountry; /** * Save default language code. * * @type : string * @access: private */ var $_defaultLanguage; /** * Save default charset code. * * @type : string * @access: private */ var $_defaultCharset; // }}} // {{{ constructor /** * Find language code, country code, charset code, and dialect or variant * of Locale setting in user's browser from $HTTP_ACCEPT_LANGUAGE, * $LANGUAGE_ACCEPT_CHARSET * * @param : string Default Language * @param : string Default Charset * @param : string Default Country */ function I18N_Negotiator($defaultLanguage = "en", $defaultCharset = "ISO-8859-1", $defaultCountry = "") { if($_SERVER) { $HTTP_ACCEPT_LANGUAGE = ( in_array("HTTP_ACCEPT_LANGUAGE", array_keys($_SERVER)) ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : ""; $HTTP_ACCEPT_CHARSET = ( in_array("HTTP_ACCEPT_CHARSET", array_keys($_SERVER)) ) ? $_SERVER['HTTP_ACCEPT_CHARSET'] : ""; } else { global $HTTP_ACCEPT_LANGUAGE,$HTTP_ACCEPT_CHARSET; } $this->_defaultCountry = $defaultCountry; $this->_defaultLanguage = $defaultLanguage; $this->_defaultCharset = $defaultCharset; $langs = explode(',',$HTTP_ACCEPT_LANGUAGE); foreach($langs AS $lang_tag) { // Cut off any q-value that might come after a semi-colon if($pos = strpos($lang_tag, ';')) { $lang_tag = trim(substr($lang_tag,0,$pos)); } $lang = $lang_tag; if($pos = strpos($lang_tag, '-')) { $primary_tag = substr($lang_tag,0,$pos); $sub_tag = substr($lang_tag,($pos+1)); if($primary_tag == 'i') { /** * Language not listed in ISO 639 that are not variants * of any listed language, which can be registerd with the * i-prefix, such as i-cherokee */ $lang = $sub_tag; } else { $lang = $primary_tag; $this->_prepareI18NCountry(); if($this->_lc->isValidCode($sub_tag)) { $this->_country[$lang][] = $sub_tag; } else { /** * Dialect or variant information such as no-nynorsk or * en-cockney. * Script variations, such as az-arabic and az-cyrillic */ $this->_lang_variation[$lang][] = $sub_tag; } } } $this->_acceptLanguage[] = $lang; } $this->_acceptCharset = explode(',',$HTTP_ACCEPT_CHARSET); } // }}} // {{{ _constructor(); /** * Dummy constructor * call actual constructor */ function _constructor() { $this->I18N_Negotiator(); } // }}} // {{{ destructor /** * It does nothing right now */ function _I18N_Negotiater() { } // }}} // {{{ getCountryMatch() /** * Find Country Match * * @param : string * @param : array * * @return: array * @access: public */ function getCountryMatch($lang='',$countries = '') { if(!$lang) { return FALSE; } return $this->_getMatch($countries,$this->_country[$lang], $this->_defaultCountry); } // }}} // {{{ getVariantInfo() /** * Return variant info for passed parameter. * * @param : string * * @return: string * @access: public */ function getVariantInfo($lang) { return $this->_lang_variation[$lang]; } // }}} // {{{ getCharsetMatch() /** * Find Charset match * * @param : array * * @return: string * @access: public */ function getCharsetMatch($chasets = '') { return $this->_getMatch($charsets,$this->_acceptCharset, $this->_defaultCharset); } // }}} // {{{ getLanguageMatch() /** * Find Language match * * @param : array * * @return: string * @access: public */ function getLanguageMatch($langs = '') { return $this->_getMatch($langs,$this->_acceptLanguage, $this->_defaultLanguage); } // }}} // {{{ _getMatch() /** * Return first matched value from first and second parameter. * If there is no match found, then return third parameter. * * @param : array * @param : array * @param : string * * @return: string * @access: private */ function _getMatch($needle,$heystack,$default = '') { if(!$heystack) { return $default; } if(!$needle) { return array_shift($heystack); } if($result = array_shift(array_intersect($heystack,$needle))) { return $result; } return $default; } /** * Find Country name for country code passed * * @param : string country code * * @return: void * @access: private */ function getCountryName($code) { $this->_prepareI18NCountry(); return $this->_lc->getName($code); } /** * Find Country name for country code passed * * @param : string country code * * @return: void * @access: private */ function getLanguageName($code) { $this->_prepareI18NLanguage(); return $this->_ll->getName($code); } /** * Check if I18N_Language class has been instantiated and set to $this->_ll * If it's not, it will load the script and instantiate I18N_Language class * * @return: void * @access: private */ function _prepareI18NLanguage() { if(!isset($this->_ll)) { include_once('I18N/Language.php'); $this->_ll =& new I18N_Language(); } } /** * Check if I18N_Country class has been instantiated and set to $this->_lc * If it's not, it will load the script and instantiate I18N_Country class * * @return: void * @access: private */ function _prepareI18NCountry() { if(!isset($this->_lc)) { include_once('I18N/Country.php'); $this->_lc =& new I18N_Country(); } } } ?>