00001 <?php
00030 class Zend_Locale
00031 {
00037 private static $_localeData = array(
00038 'root' => true, 'aa_DJ' => true, 'aa_ER' => true, 'aa_ET' => true, 'aa' => true,
00039 'af_NA' => true, 'af_ZA' => true, 'af' => true, 'ak_GH' => true, 'ak' => true,
00040 'am_ET' => true, 'am' => true, 'ar_AE' => true, 'ar_BH' => true, 'ar_DZ' => true,
00041 'ar_EG' => true, 'ar_IQ' => true, 'ar_JO' => true, 'ar_KW' => true, 'ar_LB' => true,
00042 'ar_LY' => true, 'ar_MA' => true, 'ar_OM' => true, 'ar_QA' => true, 'ar_SA' => true,
00043 'ar_SD' => true, 'ar_SY' => true, 'ar_TN' => true, 'ar_YE' => true, 'ar' => true,
00044 'as_IN' => true, 'as' => true, 'az_AZ' => true, 'az' => true, 'be_BY' => true,
00045 'be' => true, 'bg_BG' => true, 'bg' => true, 'bn_BD' => true, 'bn_IN' => true,
00046 'bn' => true, 'bo_CN' => true, 'bo_IN' => true, 'bo' => true, 'bs_BA' => true,
00047 'bs' => true, 'byn_ER'=> true, 'byn' => true, 'ca_ES' => true, 'ca' => true,
00048 'cch_NG'=> true, 'cch' => true, 'cop' => true, 'cs_CZ' => true, 'cs' => true,
00049 'cy_GB' => true, 'cy' => true, 'da_DK' => true, 'da' => true, 'de_AT' => true,
00050 'de_BE' => true, 'de_CH' => true, 'de_DE' => true, 'de_LI' => true, 'de_LU' => true,
00051 'de' => true, 'dv_MV' => true, 'dv' => true, 'dz_BT' => true, 'dz' => true,
00052 'ee_GH' => true, 'ee_TG' => true, 'ee' => true, 'el_CY' => true, 'el_GR' => true,
00053 'el' => true, 'en_AS' => true, 'en_AU' => true, 'en_BE' => true, 'en_BW' => true,
00054 'en_BZ' => true, 'en_CA' => true, 'en_GB' => true, 'en_GU' => true, 'en_HK' => true,
00055 'en_IE' => true, 'en_IN' => true, 'en_JM' => true, 'en_MH' => true, 'en_MP' => true,
00056 'en_MT' => true, 'en_NA' => true, 'en_NZ' => true, 'en_PH' => true, 'en_PK' => true,
00057 'en_SG' => true, 'en_TT' => true, 'en_UM' => true, 'en_US' => true, 'en_VI' => true,
00058 'en_ZA' => true, 'en_ZW' => true, 'en' => true, 'eo' => true, 'es_AR' => true,
00059 'es_BO' => true, 'es_CL' => true, 'es_CO' => true, 'es_CR' => true, 'es_DO' => true,
00060 'es_EC' => true, 'es_ES' => true, 'es_GT' => true, 'es_HN' => true, 'es_MX' => true,
00061 'es_NI' => true, 'es_PA' => true, 'es_PE' => true, 'es_PR' => true, 'es_PY' => true,
00062 'es_SV' => true, 'es_US' => true, 'es_UY' => true, 'es_VE' => true, 'es' => true,
00063 'et_EE' => true, 'et' => true, 'eu_ES' => true, 'eu' => true, 'fa_AF' => true,
00064 'fa_IR' => true, 'fa' => true, 'fi_FI' => true, 'fi' => true, 'fil_PH'=> true,
00065 'fil' => true, 'fo_FO' => true, 'fo' => true, 'fr_BE' => true, 'fr_CA' => true,
00066 'fr_CH' => true, 'fr_FR' => true, 'fr_LU' => true, 'fr_MC' => true, 'fr_SN' => true,
00067 'fr' => true, 'fur_IT'=> true, 'fur' => true, 'ga_IE' => true, 'ga' => true,
00068 'gaa_GH'=> true, 'gaa' => true, 'gez_ER'=> true, 'gez_ET'=> true, 'gez' => true,
00069 'gl_ES' => true, 'gl' => true, 'gsw_CH'=> true, 'gsw' => true, 'gu_IN' => true,
00070 'gu' => true, 'gv_GB' => true, 'gv' => true, 'ha_GH' => true, 'ha_NE' => true,
00071 'ha_NG' => true, 'ha_SD' => true, 'ha' => true, 'haw_US'=> true, 'haw' => true,
00072 'he_IL' => true, 'he' => true, 'hi_IN' => true, 'hi' => true, 'hr_HR' => true,
00073 'hr' => true, 'hu_HU' => true, 'hu' => true, 'hy_AM' => true, 'hy' => true,
00074 'ia' => true, 'id_ID' => true, 'id' => true, 'ig_NG' => true, 'ig' => true,
00075 'ii_CN' => true, 'ii' => true, 'in' => true, 'is_IS' => true, 'is' => true,
00076 'it_CH' => true, 'it_IT' => true, 'it' => true, 'iu' => true, 'iw' => true,
00077 'ja_JP' => true, 'ja' => true, 'ka_GE' => true, 'ka' => true, 'kaj_NG'=> true,
00078 'kaj' => true, 'kam_KE'=> true, 'kam' => true, 'kcg_NG'=> true, 'kcg' => true,
00079 'kfo_CI'=> true, 'kfo' => true, 'kk_KZ' => true, 'kk' => true, 'kl_GL' => true,
00080 'kl' => true, 'km_KH' => true, 'km' => true, 'kn_IN' => true, 'kn' => true,
00081 'ko_KR' => true, 'ko' => true, 'kok_IN'=> true, 'kok' => true, 'kpe_GN'=> true,
00082 'kpe_LR'=> true, 'kpe' => true, 'ku_IQ' => true, 'ku_IR' => true, 'ku_SY' => true,
00083 'ku_TR' => true, 'ku' => true, 'kw_GB' => true, 'kw' => true, 'ky_KG' => true,
00084 'ky' => true, 'ln_CD' => true, 'ln_CG' => true, 'ln' => true, 'lo_LA' => true,
00085 'lo' => true, 'lt_LT' => true, 'lt' => true, 'lv_LV' => true, 'lv' => true,
00086 'mk_MK' => true, 'mk' => true, 'ml_IN' => true, 'ml' => true, 'mn_CN' => true,
00087 'mn_MN' => true, 'mn' => true, 'mo' => true, 'mr_IN' => true, 'mr' => true,
00088 'ms_BN' => true, 'ms_MY' => true, 'ms' => true, 'mt_MT' => true, 'mt' => true,
00089 'my_MM' => true, 'my' => true, 'nb_NO' => true, 'nb' => true, 'nds_DE'=> true,
00090 'nds' => true, 'ne_IN' => true, 'ne_NP' => true, 'ne' => true, 'nl_BE' => true,
00091 'nl_NL' => true, 'nl' => true, 'nn_NO' => true, 'nn' => true, 'no' => true,
00092 'nr_ZA' => true, 'nr' => true, 'nso_ZA'=> true, 'nso' => true, 'ny_MW' => true,
00093 'ny' => true, 'oc_FR' => true, 'oc' => true, 'om_ET' => true, 'om_KE' => true,
00094 'om' => true, 'or_IN' => true, 'or' => true, 'pa_IN' => true, 'pa_PK' => true,
00095 'pa' => true, 'pl_PL' => true, 'pl' => true, 'ps_AF' => true, 'ps' => true,
00096 'pt_BR' => true, 'pt_PT' => true, 'pt' => true, 'ro_MD' => true, 'ro_RO' => true,
00097 'ro' => true, 'ru_RU' => true, 'ru_UA' => true, 'ru' => true, 'rw_RW' => true,
00098 'rw' => true, 'sa_IN' => true, 'sa' => true, 'se_FI' => true, 'se_NO' => true,
00099 'se' => true, 'sh_BA' => true, 'sh_CS' => true, 'sh_YU' => true, 'sh' => true,
00100 'si_LK' => true, 'si' => true, 'sid_ET'=> true, 'sid' => true, 'sk_SK' => true,
00101 'sk' => true, 'sl_SI' => true, 'sl' => true, 'so_DJ' => true, 'so_ET' => true,
00102 'so_KE' => true, 'so_SO' => true, 'so' => true, 'sq_AL' => true, 'sq' => true,
00103 'sr_BA' => true, 'sr_CS' => true, 'sr_ME' => true, 'sr_RS' => true, 'sr_YU' => true,
00104 'sr' => true, 'ss_SZ' => true, 'ss_ZA' => true, 'ss' => true, 'st_LS' => true,
00105 'st_ZA' => true, 'st' => true, 'sv_FI' => true, 'sv_SE' => true, 'sv' => true,
00106 'sw_KE' => true, 'sw_TZ' => true, 'sw' => true, 'syr_SY'=> true, 'syr' => true,
00107 'ta_IN' => true, 'ta' => true, 'te_IN' => true, 'te' => true, 'tg_TJ' => true,
00108 'tg' => true, 'th_TH' => true, 'th' => true, 'ti_ER' => true, 'ti_ET' => true,
00109 'ti' => true, 'tig_ER'=> true, 'tig' => true, 'tl' => true, 'tn_ZA' => true,
00110 'tn' => true, 'to_TO' => true, 'to' => true, 'tr_TR' => true, 'tr' => true,
00111 'trv_TW'=> true, 'trv' => true, 'ts_ZA' => true, 'ts' => true, 'tt_RU' => true,
00112 'tt' => true, 'ug_CN' => true, 'ug' => true, 'uk_UA' => true, 'uk' => true,
00113 'ur_IN' => true, 'ur_PK' => true, 'ur' => true, 'uz_AF' => true, 'uz_UZ' => true,
00114 'uz' => true, 've_ZA' => true, 've' => true, 'vi_VN' => true, 'vi' => true,
00115 'wal_ET'=> true, 'wal' => true, 'wo_SN' => true, 'wo' => true, 'xh_ZA' => true,
00116 'xh' => true, 'yo_NG' => true, 'yo' => true, 'zh_CN' => true, 'zh_HK' => true,
00117 'zh_MO' => true, 'zh_SG' => true, 'zh_TW' => true, 'zh' => true, 'zu_ZA' => true,
00118 'zu' => true
00119 );
00120
00124 const BROWSER = 'browser';
00125 const ENVIRONMENT = 'environment';
00126 const ZFDEFAULT = 'default';
00127
00134 public static $compatibilityMode = false;
00135
00141 private static $_breakChain = false;
00142
00148 protected $_locale;
00149
00155 protected static $_auto;
00156
00162 protected static $_browser;
00163
00169 protected static $_environment;
00170
00176 protected static $_default = array('en' => true);
00177
00191 public function __construct($locale = null)
00192 {
00193 $locale = self::_prepareLocale($locale);
00194 $this->setLocale((string) $locale);
00195 }
00196
00202 public function serialize()
00203 {
00204 return serialize($this);
00205 }
00206
00212 public function toString()
00213 {
00214 return (string) $this->_locale;
00215 }
00216
00223 public function __toString()
00224 {
00225 return $this->toString();
00226 }
00227
00233 public static function getDefault()
00234 {
00235 if ((self::$compatibilityMode === true) or (func_num_args() > 0)) {
00236 if (!self::$_breakChain) {
00237 self::$_breakChain = true;
00238 trigger_error('You are running Zend_Locale in compatibility mode... please migrate your scripts', E_USER_NOTICE);
00239 $params = func_get_args();
00240 $param = null;
00241 if (isset($params[0])) {
00242 $param = $params[0];
00243 }
00244 return self::getOrder($param);
00245 }
00246
00247 self::$_breakChain = false;
00248 }
00249
00250 return self::$_default;
00251 }
00252
00265 public static function setDefault($locale, $quality = 1)
00266 {
00267 if (($locale === 'auto') or ($locale === 'root') or ($locale === 'default') or
00268 ($locale === 'environment') or ($locale === 'browser')) {
00269 require_once 'Zend/Locale/Exception.php';
00270 throw new Zend_Locale_Exception('Only full qualified locales can be used as default!');
00271 }
00272
00273 if (($quality < 0.1) or ($quality > 100)) {
00274 require_once 'Zend/Locale/Exception.php';
00275 throw new Zend_Locale_Exception("Quality must be between 0.1 and 100");
00276 }
00277
00278 if ($quality > 1) {
00279 $quality /= 100;
00280 }
00281
00282 $locale = self::_prepareLocale($locale);
00283 if (isset(self::$_localeData[(string) $locale]) === true) {
00284 self::$_default = array((string) $locale => $quality);
00285 } else {
00286 $elocale = explode('_', (string) $locale);
00287 if (isset(self::$_localeData[$elocale[0]]) === true) {
00288 self::$_default = array($elocale[0] => $quality);
00289 } else {
00290 require_once 'Zend/Locale/Exception.php';
00291 throw new Zend_Locale_Exception("Unknown locale '" . (string) $locale . "' can not be set as default!");
00292 }
00293 }
00294 }
00295
00305 public static function getEnvironment()
00306 {
00307 if (self::$_environment !== null) {
00308 return self::$_environment;
00309 }
00310
00311 require_once 'Zend/Locale/Data/Translation.php';
00312
00313 $language = setlocale(LC_ALL, 0);
00314 $languages = explode(';', $language);
00315 $languagearray = array();
00316
00317 foreach ($languages as $locale) {
00318 if (strpos($locale, '=') !== false) {
00319 $language = substr($locale, strpos($locale, '='));
00320 $language = substr($language, 1);
00321 }
00322
00323 if ($language !== 'C') {
00324 if (strpos($language, '.') !== false) {
00325 $language = substr($language, 0, (strpos($language, '.') - 1));
00326 } else if (strpos($language, '@') !== false) {
00327 $language = substr($language, 0, (strpos($language, '@') - 1));
00328 }
00329
00330 $splitted = explode('_', $language);
00331 $language = (string) $language;
00332 if (isset(self::$_localeData[$language]) === true) {
00333 $languagearray[$language] = 1;
00334 if (strlen($language) > 4) {
00335 $languagearray[substr($language, 0, 2)] = 1;
00336 }
00337
00338 continue;
00339 }
00340
00341 if (empty(Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]]) === false) {
00342 if (empty(Zend_Locale_Data_Translation::$localeTranslation[$splitted[1]]) === false) {
00343 $languagearray[Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]] . '_' .
00344 Zend_Locale_Data_Translation::$localeTranslation[$splitted[1]]] = 1;
00345 }
00346
00347 $languagearray[Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]]] = 1;
00348 }
00349 }
00350 }
00351
00352 self::$_environment = $languagearray;
00353 return $languagearray;
00354 }
00355
00365 public static function getBrowser()
00366 {
00367 if (self::$_browser !== null) {
00368 return self::$_browser;
00369 }
00370
00371 $httplanguages = getenv('HTTP_ACCEPT_LANGUAGE');
00372 $languages = array();
00373 if (empty($httplanguages) === true) {
00374 return $languages;
00375 }
00376
00377 $accepted = preg_split('/,\s*/', $httplanguages);
00378
00379 foreach ($accepted as $accept) {
00380 $match = null;
00381 $result = preg_match('/^([a-z]{1,8}(?:[-_][a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i',
00382 $accept, $match);
00383
00384 if ($result < 1) {
00385 continue;
00386 }
00387
00388 if (isset($match[2]) === true) {
00389 $quality = (float) $match[2];
00390 } else {
00391 $quality = 1.0;
00392 }
00393
00394 $countrys = explode('-', $match[1]);
00395 $region = array_shift($countrys);
00396
00397 $country2 = explode('_', $region);
00398 $region = array_shift($country2);
00399
00400 foreach ($countrys as $country) {
00401 $languages[$region . '_' . strtoupper($country)] = $quality;
00402 }
00403
00404 foreach ($country2 as $country) {
00405 $languages[$region . '_' . strtoupper($country)] = $quality;
00406 }
00407
00408 if ((isset($languages[$region]) === false) || ($languages[$region] < $quality)) {
00409 $languages[$region] = $quality;
00410 }
00411 }
00412
00413 self::$_browser = $languages;
00414 return $languages;
00415 }
00416
00423 public function setLocale($locale = null)
00424 {
00425 $locale = self::_prepareLocale($locale);
00426
00427 if (isset(self::$_localeData[(string) $locale]) === false) {
00428 $region = substr((string) $locale, 0, 3);
00429 if (isset($region[2]) === true) {
00430 if (($region[2] === '_') or ($region[2] === '-')) {
00431 $region = substr($region, 0, 2);
00432 }
00433 }
00434
00435 if (isset(self::$_localeData[(string) $region]) === true) {
00436 $this->_locale = $region;
00437 } else {
00438 $this->_locale = 'root';
00439 }
00440 } else {
00441 $this->_locale = $locale;
00442 }
00443 }
00444
00450 public function getLanguage()
00451 {
00452 $locale = explode('_', $this->_locale);
00453 return $locale[0];
00454 }
00455
00461 public function getRegion()
00462 {
00463 $locale = explode('_', $this->_locale);
00464 if (isset($locale[1]) === true) {
00465 return $locale[1];
00466 }
00467
00468 return false;
00469 }
00470
00476 public static function getHttpCharset()
00477 {
00478 $httpcharsets = getenv('HTTP_ACCEPT_CHARSET');
00479
00480 $charsets = array();
00481 if ($httpcharsets === false) {
00482 return $charsets;
00483 }
00484
00485 $accepted = preg_split('/,\s*/', $httpcharsets);
00486 foreach ($accepted as $accept) {
00487 if (empty($accept) === true) {
00488 continue;
00489 }
00490
00491 if (strpos($accept, ';') !== false) {
00492 $quality = (float) substr($accept, (strpos($accept, '=') + 1));
00493 $pos = substr($accept, 0, strpos($accept, ';'));
00494 $charsets[$pos] = $quality;
00495 } else {
00496 $quality = 1.0;
00497 $charsets[$accept] = $quality;
00498 }
00499 }
00500
00501 return $charsets;
00502 }
00503
00510 public function equals(Zend_Locale $object)
00511 {
00512 if ($object->toString() === $this->toString()) {
00513 return true;
00514 }
00515
00516 return false;
00517 }
00518
00529 public static function getTranslationList($path = null, $locale = null, $value = null)
00530 {
00531 require_once 'Zend/Locale/Data.php';
00532 $locale = self::_prepareLocale($locale);
00533 $result = Zend_Locale_Data::getList($locale, $path, $value);
00534 if (empty($result) === true) {
00535 return false;
00536 }
00537
00538 return $result;
00539 }
00540
00548 public static function getLanguageTranslationList($locale = null)
00549 {
00550 trigger_error("The method getLanguageTranslationList is deprecated. Use getTranslationList('language', $locale) instead", E_USER_NOTICE);
00551 return self::getTranslationList('language', $locale);
00552 }
00553
00561 public static function getScriptTranslationList($locale = null)
00562 {
00563 trigger_error("The method getScriptTranslationList is deprecated. Use getTranslationList('script', $locale) instead", E_USER_NOTICE);
00564 return self::getTranslationList('script', $locale);
00565 }
00566
00574 public static function getCountryTranslationList($locale = null)
00575 {
00576 trigger_error("The method getCountryTranslationList is deprecated. Use getTranslationList('territory', $locale, 2) instead", E_USER_NOTICE);
00577 return self::getTranslationList('territory', $locale, 2);
00578 }
00579
00588 public static function getTerritoryTranslationList($locale = null)
00589 {
00590 trigger_error("The method getTerritoryTranslationList is deprecated. Use getTranslationList('territory', $locale, 1) instead", E_USER_NOTICE);
00591 return self::getTranslationList('territory', $locale, 1);
00592 }
00593
00603 public static function getTranslation($value = null, $path = null, $locale = null)
00604 {
00605 require_once 'Zend/Locale/Data.php';
00606 $locale = self::_prepareLocale($locale);
00607 $result = Zend_Locale_Data::getContent($locale, $path, $value);
00608 if (empty($result) === true) {
00609 return false;
00610 }
00611
00612 return $result;
00613 }
00614
00623 public static function getLanguageTranslation($value, $locale = null)
00624 {
00625 trigger_error("The method getLanguageTranslation is deprecated. Use getTranslation($value, 'language', $locale) instead", E_USER_NOTICE);
00626 return self::getTranslation($value, 'language', $locale);
00627 }
00628
00637 public static function getScriptTranslation($value, $locale = null)
00638 {
00639 trigger_error("The method getScriptTranslation is deprecated. Use getTranslation($value, 'script', $locale) instead", E_USER_NOTICE);
00640 return self::getTranslation($value, 'script', $locale);
00641 }
00642
00651 public static function getCountryTranslation($value, $locale = null)
00652 {
00653 trigger_error("The method getCountryTranslation is deprecated. Use getTranslation($value, 'country', $locale) instead", E_USER_NOTICE);
00654 return self::getTranslation($value, 'country', $locale);
00655 }
00656
00666 public static function getTerritoryTranslation($value, $locale = null)
00667 {
00668 trigger_error("The method getTerritoryTranslation is deprecated. Use getTranslation($value, 'territory', $locale) instead", E_USER_NOTICE);
00669 return self::getTranslation($value, 'territory', $locale);
00670 }
00671
00678 public static function getQuestion($locale = null)
00679 {
00680 require_once 'Zend/Locale/Data.php';
00681 $locale = self::_prepareLocale($locale);
00682 $quest = Zend_Locale_Data::getList($locale, 'question');
00683 $yes = explode(':', $quest['yes']);
00684 $no = explode(':', $quest['no']);
00685 $quest['yes'] = $yes[0];
00686 $quest['yesarray'] = $yes;
00687 $quest['no'] = $no[0];
00688 $quest['noarray'] = $no;
00689 $quest['yesexpr'] = self::_prepareQuestionString($yes);
00690 $quest['noexpr'] = self::_prepareQuestionString($no);
00691
00692 return $quest;
00693 }
00694
00701 private static function _prepareQuestionString($input)
00702 {
00703 $regex = '';
00704 if (is_array($input) === true) {
00705 $regex = '^';
00706 $start = true;
00707 foreach ($input as $row) {
00708 if ($start === false) {
00709 $regex .= '|';
00710 }
00711
00712 $start = false;
00713 $regex .= '(';
00714 $one = null;
00715 if (strlen($row) > 2) {
00716 $one = true;
00717 }
00718
00719 foreach (str_split($row, 1) as $char) {
00720 $regex .= '[' . $char;
00721 $regex .= strtoupper($char) . ']';
00722 if ($one === true) {
00723 $one = false;
00724 $regex .= '(';
00725 }
00726 }
00727
00728 if ($one === false) {
00729 $regex .= ')';
00730 }
00731
00732 $regex .= '?)';
00733 }
00734 }
00735
00736 return $regex;
00737 }
00738
00750 public static function isLocale($locale, $strict = false, $compatible = true)
00751 {
00752 if ($locale instanceof Zend_Locale) {
00753 return true;
00754 }
00755
00756 if (($locale !== null) and !is_string($locale) and !is_array($locale)) {
00757 return false;
00758 }
00759
00760 try {
00761 $locale = self::_prepareLocale($locale, $strict);
00762 } catch (Zend_Locale_Exception $e) {
00763 return false;
00764 }
00765
00766 if (($compatible === true) and (self::$compatibilityMode === true)) {
00767 trigger_error('You are running Zend_Locale in compatibility mode... please migrate your scripts', E_USER_NOTICE);
00768 if (isset(self::$_localeData[$locale]) === true) {
00769 return $locale;
00770 } else if (!$strict) {
00771 $locale = explode('_', $locale);
00772 if (isset(self::$_localeData[$locale[0]]) === true) {
00773 return $locale[0];
00774 }
00775 }
00776 } else {
00777 if (isset(self::$_localeData[$locale]) === true) {
00778 return true;
00779 } else if (!$strict) {
00780 $locale = explode('_', $locale);
00781 if (isset(self::$_localeData[$locale[0]]) === true) {
00782 return true;
00783 }
00784 }
00785 }
00786
00787 return false;
00788 }
00789
00800 public static function findLocale($locale = null)
00801 {
00802 if ($locale === null) {
00803 require_once 'Zend/Registry.php';
00804 if (Zend_Registry::isRegistered('Zend_Locale')) {
00805 $locale = Zend_Registry::get('Zend_Locale');
00806 }
00807 }
00808
00809 require_once 'Zend/Locale.php';
00810 if ($locale === null) {
00811 $locale = new Zend_Locale();
00812 }
00813
00814 if (!Zend_Locale::isLocale($locale, true, false)) {
00815 if (!Zend_Locale::isLocale($locale, false, false)) {
00816 require_once 'Zend/Locale/Exception.php';
00817 throw new Zend_Locale_Exception("The locale '$locale' is no known locale");
00818 }
00819
00820 $locale = new Zend_Locale($locale);
00821 }
00822
00823 if ($locale instanceof Zend_Locale) {
00824 $locale = $locale->toString();
00825 }
00826
00827 return $locale;
00828 }
00829
00837 public static function getLocaleList()
00838 {
00839 $list = self::$_localeData;
00840 unset($list['root']);
00841 unset($list['auto']);
00842 unset($list['browser']);
00843 unset($list['environment']);
00844 return $list;
00845 }
00846
00852 public static function getCache()
00853 {
00854 require_once 'Zend/Locale/Data.php';
00855 $cache = Zend_Locale_Data::getCache();
00856
00857 return $cache;
00858 }
00859
00866 public static function setCache(Zend_Cache_Core $cache)
00867 {
00868 require_once 'Zend/Locale/Data.php';
00869 Zend_Locale_Data::setCache($cache);
00870 }
00871
00877 public static function hasCache()
00878 {
00879 require_once 'Zend/Locale/Data.php';
00880 return Zend_Locale_Data::hasCache();
00881 }
00882
00888 public static function removeCache()
00889 {
00890 require_once 'Zend/Locale/Data.php';
00891 Zend_Locale_Data::removeCache();
00892 }
00893
00899 public static function clearCache()
00900 {
00901 require_once 'Zend/Locale/Data.php';
00902 Zend_Locale_Data::clearCache();
00903 }
00904
00911 public static function disableCache($flag)
00912 {
00913 require_once 'Zend/Locale/Data.php';
00914 Zend_Locale_Data::disableCache($flag);
00915 }
00916
00925 private static function _prepareLocale($locale, $strict = false)
00926 {
00927 if ($locale instanceof Zend_Locale) {
00928 $locale = $locale->toString();
00929 }
00930
00931 if (is_array($locale)) {
00932 return '';
00933 }
00934
00935 if (empty(self::$_auto) === true) {
00936 self::$_browser = self::getBrowser();
00937 self::$_environment = self::getEnvironment();
00938 self::$_breakChain = true;
00939 self::$_auto = self::getBrowser() + self::getEnvironment() + self::getDefault();
00940 }
00941
00942 if (!$strict) {
00943 if ($locale === 'browser') {
00944 $locale = self::$_browser;
00945 }
00946
00947 if ($locale === 'environment') {
00948 $locale = self::$_environment;
00949 }
00950
00951 if ($locale === 'default') {
00952 $locale = self::$_default;
00953 }
00954
00955 if (($locale === 'auto') or ($locale === null)) {
00956 $locale = self::$_auto;
00957 }
00958
00959 if (is_array($locale) === true) {
00960 $locale = key($locale);
00961 }
00962 }
00963
00964
00965 if ($locale === null) {
00966 require_once 'Zend/Locale/Exception.php';
00967 throw new Zend_Locale_Exception('Autodetection of Locale has been failed!');
00968 }
00969
00970 if (strpos($locale, '-') !== false) {
00971 $locale = strtr($locale, '-', '_');
00972 }
00973
00974 $parts = explode('_', $locale);
00975 if (!isset(self::$_localeData[$parts[0]])) {
00976 return '';
00977 }
00978
00979 foreach($parts as $key => $value) {
00980 if ((strlen($value) < 2) || (strlen($value) > 3)) {
00981 unset($parts[$key]);
00982 }
00983 }
00984
00985 $locale = implode('_', $parts);
00986 return (string) $locale;
00987 }
00988
00998 public static function getOrder($order = null)
00999 {
01000 switch ($order) {
01001 case self::ENVIRONMENT:
01002 self::$_breakChain = true;
01003 $languages = self::getEnvironment() + self::getBrowser() + self::getDefault();
01004 break;
01005
01006 case self::ZFDEFAULT:
01007 self::$_breakChain = true;
01008 $languages = self::getDefault() + self::getEnvironment() + self::getBrowser();
01009 break;
01010
01011 default:
01012 self::$_breakChain = true;
01013 $languages = self::getBrowser() + self::getEnvironment() + self::getDefault();
01014 break;
01015 }
01016
01017 return $languages;
01018 }
01019 }