• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List

E:/E/GEAMP/www/openbiz/openbiz/others/Zend/Locale/Data.php

00001 <?php
00026 require_once 'Zend/Locale.php';
00027 
00037 class Zend_Locale_Data
00038 {
00045     private static $_ldml = array();
00046 
00053     private static $_list = array();
00054 
00061     private static $_cache = null;
00062 
00069     private static $_cacheDisabled = false;
00070 
00095     private static function _readFile($locale, $path, $attribute, $value, $temp)
00096     {
00097         // without attribute - read all values
00098         // with attribute    - read only this value
00099         if (!empty(self::$_ldml[(string) $locale])) {
00100 
00101             $result = self::$_ldml[(string) $locale]->xpath($path);
00102             if (!empty($result)) {
00103                 foreach ($result as &$found) {
00104 
00105                     if (empty($value)) {
00106 
00107                         if (empty($attribute)) {
00108                             // Case 1
00109                             $temp[] = (string) $found;
00110                         } else if (empty($temp[(string) $found[$attribute]])){
00111                             // Case 2
00112                             $temp[(string) $found[$attribute]] = (string) $found;
00113                         }
00114 
00115                     } else if (empty ($temp[$value])) {
00116 
00117                         if (empty($attribute)) {
00118                             // Case 3
00119                             $temp[$value] = (string) $found;
00120                         } else {
00121                             // Case 4
00122                             $temp[$value] = (string) $found[$attribute];
00123                         }
00124 
00125                     }
00126                 }
00127             }
00128         }
00129         return $temp;
00130     }
00131 
00143     private static function _findRoute($locale, $path, $attribute, $value, &$temp)
00144     {
00145         // load locale file if not already in cache
00146         // needed for alias tag when referring to other locale
00147         if (empty(self::$_ldml[(string) $locale])) {
00148             $filename = dirname(__FILE__) . '/Data/' . $locale . '.xml';
00149             if (!file_exists($filename)) {
00150                 require_once 'Zend/Locale/Exception.php';
00151                 throw new Zend_Locale_Exception("Missing locale file '$filename' for '$locale' locale.");
00152             }
00153 
00154             self::$_ldml[(string) $locale] = simplexml_load_file($filename);
00155         }
00156 
00157         // search for 'alias' tag in the search path for redirection
00158         $search = '';
00159         $tok = strtok($path, '/');
00160 
00161         // parse the complete path
00162         if (!empty(self::$_ldml[(string) $locale])) {
00163             while ($tok !== false) {
00164                 $search .=  '/' . $tok;
00165                 if (strpos($search, '[@') !== false) {
00166                     while (strrpos($search, '[@') > strrpos($search, ']')) {
00167                         $tok = strtok('/');
00168                         if (empty($tok)) {
00169                             $search .= '/';
00170                         }
00171                         $search = $search . '/' . $tok;
00172                     }
00173                 }
00174                 $result = self::$_ldml[(string) $locale]->xpath($search . '/alias');
00175 
00176                 // alias found
00177                 if (!empty($result)) {
00178 
00179                     $source = $result[0]['source'];
00180                     $newpath = $result[0]['path'];
00181 
00182                     // new path - path //ldml is to ignore
00183                     if ($newpath != '//ldml') {
00184                         // other path - parse to make real path
00185 
00186                         while (substr($newpath,0,3) == '../') {
00187                             $newpath = substr($newpath, 3);
00188                             $search = substr($search, 0, strrpos($search, '/'));
00189                         }
00190 
00191                         // truncate ../ to realpath otherwise problems with alias
00192                         $path = $search . '/' . $newpath;
00193                         while (($tok = strtok('/'))!== false) {
00194                             $path = $path . '/' . $tok;
00195                         }
00196                     }
00197 
00198                     // reroute to other locale
00199                     if ($source != 'locale') {
00200                         $locale = $source;
00201                     }
00202 
00203                     $temp = self::_getFile($locale, $path, $attribute, $value, $temp);
00204                     return false;
00205                 }
00206 
00207                 $tok = strtok('/');
00208             }
00209         }
00210         return true;
00211     }
00212 
00222     private static function _getFile($locale, $path, $attribute = false, $value = false, $temp = array())
00223     {
00224         $result = self::_findRoute($locale, $path, $attribute, $value, $temp);
00225         if ($result) {
00226             $temp = self::_readFile($locale, $path, $attribute, $value, $temp);
00227         }
00228 
00229         // parse required locales reversive
00230         // example: when given zh_Hans_CN
00231         // 1. -> zh_Hans_CN
00232         // 2. -> zh_Hans
00233         // 3. -> zh
00234         // 4. -> root
00235         if (($locale != 'root') && ($result)) {
00236             $locale = substr($locale, 0, -strlen(strrchr($locale, '_')));
00237             if (!empty($locale)) {
00238                 $temp = self::_getFile($locale, $path, $attribute, $value, $temp);
00239             } else {
00240                 $temp = self::_getFile('root', $path, $attribute, $value, $temp);
00241             }
00242         }
00243         return $temp;
00244     }
00245 
00253     private static function _calendarDetail($locale, $list)
00254     {
00255         $ret = "001";
00256         foreach ($list as $key => $value) {
00257             if (strpos($locale, '_') !== false) {
00258                 $locale = substr($locale, strpos($locale, '_') + 1);
00259             }
00260             if (strpos($key, $locale) !== false) {
00261                 $ret = $key;
00262                 break;
00263             }
00264         }
00265         return $ret;
00266     }
00267 
00274     private static function _checkLocale($locale)
00275     {
00276         if (empty($locale)) {
00277             $locale = new Zend_Locale();
00278         }
00279 
00280         if (!(Zend_Locale::isLocale((string) $locale, null, false))) {
00281             require_once 'Zend/Locale/Exception.php';
00282             throw new Zend_Locale_Exception("Locale (" . (string) $locale . ") is a unknown locale");
00283         }
00284 
00285         return (string) $locale;
00286     }
00287 
00297     public static function getList($locale, $path, $value = false)
00298     {
00299         $locale = self::_checkLocale($locale);
00300 
00301         if (!isset(self::$_cache) && !self::$_cacheDisabled) {
00302             require_once 'Zend/Cache.php';
00303             self::$_cache = Zend_Cache::factory(
00304                 'Core',
00305                 'File',
00306                 array('automatic_serialization' => true),
00307                 array());
00308         }
00309 
00310         $val = $value;
00311         if (is_array($value)) {
00312             $val = implode('_' , $value);
00313         }
00314 
00315         $val = urlencode($val);
00316         $id = strtr('Zend_LocaleL_' . $locale . '_' . $path . '_' . $val, array('-' => '_', '%' => '_', '+' => '_'));
00317         if (!self::$_cacheDisabled && ($result = self::$_cache->load($id))) {
00318             return unserialize($result);
00319         }
00320 
00321         $temp = array();
00322         switch(strtolower($path)) {
00323             case 'language':
00324                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/languages/language', 'type');
00325                 break;
00326 
00327             case 'script':
00328                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/scripts/script', 'type');
00329                 break;
00330 
00331             case 'territory':
00332                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/territories/territory', 'type');
00333                 if ($value === 1) {
00334                     foreach($temp as $key => $value) {
00335                         if ((is_numeric($key) === false) and ($key != 'QO') and ($key != 'QU')) {
00336                             unset($temp[$key]);
00337                         }
00338                     }
00339                 } else if ($value === 2) {
00340                     foreach($temp as $key => $value) {
00341                         if (is_numeric($key) or ($key == 'QO') or ($key == 'QU')) {
00342                             unset($temp[$key]);
00343                         }
00344                     }
00345                 }
00346                 break;
00347 
00348             case 'variant':
00349                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/variants/variant', 'type');
00350                 break;
00351 
00352             case 'key':
00353                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/keys/key', 'type');
00354                 break;
00355 
00356             case 'type':
00357                 if (empty($type)) {
00358                     $temp = self::_getFile($locale, '/ldml/localeDisplayNames/types/type', 'type');
00359                 } else {
00360                     if (($value == 'calendar') or
00361                         ($value == 'collation') or
00362                         ($value == 'currency')) {
00363                         $temp = self::_getFile($locale, '/ldml/localeDisplayNames/types/type[@key=\'' . $value . '\']', 'type');
00364                     } else {
00365                         $temp = self::_getFile($locale, '/ldml/localeDisplayNames/types/type[@type=\'' . $value . '\']', 'type');
00366                     }
00367                 }
00368                 break;
00369 
00370             case 'layout':
00371                 $temp  = self::_getFile($locale, '/ldml/layout/orientation',                 'lines',      'lines');
00372                 $temp += self::_getFile($locale, '/ldml/layout/orientation',                 'characters', 'characters');
00373                 $temp += self::_getFile($locale, '/ldml/layout/inList',                      '',           'inList');
00374                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'currency\']',  '',           'currency');
00375                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'dayWidth\']',  '',           'dayWidth');
00376                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'fields\']',    '',           'fields');
00377                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'keys\']',      '',           'keys');
00378                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'languages\']', '',           'languages');
00379                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'long\']',      '',           'long');
00380                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'measurementSystemNames\']', '', 'measurementSystemNames');
00381                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'monthWidth\']',   '',        'monthWidth');
00382                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'quarterWidth\']', '',        'quarterWidth');
00383                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'scripts\']',   '',           'scripts');
00384                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'territories\']',  '',        'territories');
00385                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'types\']',     '',           'types');
00386                 $temp += self::_getFile($locale, '/ldml/layout/inText[@type=\'variants\']',  '',           'variants');
00387                 break;
00388 
00389             case 'characters':
00390                 $temp  = self::_getFile($locale, '/ldml/characters/exemplarCharacters',                           '', 'characters');
00391                 $temp += self::_getFile($locale, '/ldml/characters/exemplarCharacters[@type=\'auxiliary\']',      '', 'auxiliary');
00392                 $temp += self::_getFile($locale, '/ldml/characters/exemplarCharacters[@type=\'currencySymbol\']', '', 'currencySymbol');
00393                 break;
00394 
00395             case 'delimiters':
00396                 $temp  = self::_getFile($locale, '/ldml/delimiters/quotationStart',          '', 'quoteStart');
00397                 $temp += self::_getFile($locale, '/ldml/delimiters/quotationEnd',            '', 'quoteEnd');
00398                 $temp += self::_getFile($locale, '/ldml/delimiters/alternateQuotationStart', '', 'quoteStartAlt');
00399                 $temp += self::_getFile($locale, '/ldml/delimiters/alternateQuotationEnd',   '', 'quoteEndAlt');
00400                 break;
00401 
00402             case 'measurement':
00403                 $temp  = self::_getFile('supplementalData', '/supplementalData/measurementData/measurementSystem[@type=\'metric\']', 'territories', 'metric');
00404                 $temp += self::_getFile('supplementalData', '/supplementalData/measurementData/measurementSystem[@type=\'US\']',     'territories', 'US');
00405                 $temp += self::_getFile('supplementalData', '/supplementalData/measurementData/paperSize[@type=\'A4\']',             'territories', 'A4');
00406                 $temp += self::_getFile('supplementalData', '/supplementalData/measurementData/paperSize[@type=\'US-Letter\']',      'territories', 'US-Letter');
00407                 break;
00408 
00409             case 'months':
00410                 if (empty($value)) {
00411                     $value = "gregorian";
00412                 }
00413                 $temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/default', 'choice', 'context');
00414                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'format\']/default', 'choice', 'default');
00415                 $temp['format']['abbreviated'] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'format\']/monthWidth[@type=\'abbreviated\']/month', 'type');
00416                 $temp['format']['narrow']      = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'format\']/monthWidth[@type=\'narrow\']/month', 'type');
00417                 $temp['format']['wide']        = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'format\']/monthWidth[@type=\'wide\']/month', 'type');
00418                 $temp['stand-alone']['abbreviated']  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'stand-alone\']/monthWidth[@type=\'abbreviated\']/month', 'type');
00419                 $temp['stand-alone']['narrow']       = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'stand-alone\']/monthWidth[@type=\'narrow\']/month', 'type');
00420                 $temp['stand-alone']['wide']         = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'stand-alone\']/monthWidth[@type=\'wide\']/month', 'type');
00421                 break;
00422 
00423             case 'month':
00424                 if (empty($value)) {
00425                     $value = array("gregorian", "format", "wide");
00426                 }
00427                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/months/monthContext[@type=\'' . $value[1] . '\']/monthWidth[@type=\'' . $value[2] . '\']/month', 'type');
00428                 break;
00429 
00430             case 'days':
00431                 if (empty($value)) {
00432                     $value = "gregorian";
00433                 }
00434                 $temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/default', 'choice', 'context');
00435                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'format\']/default', 'choice', 'default');
00436                 $temp['format']['abbreviated'] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'format\']/dayWidth[@type=\'abbreviated\']/day', 'type');
00437                 $temp['format']['narrow']      = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'format\']/dayWidth[@type=\'narrow\']/day', 'type');
00438                 $temp['format']['wide']        = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'format\']/dayWidth[@type=\'wide\']/day', 'type');
00439                 $temp['stand-alone']['abbreviated']  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'stand-alone\']/dayWidth[@type=\'abbreviated\']/day', 'type');
00440                 $temp['stand-alone']['narrow']       = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'stand-alone\']/dayWidth[@type=\'narrow\']/day', 'type');
00441                 $temp['stand-alone']['wide']         = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'stand-alone\']/dayWidth[@type=\'wide\']/day', 'type');
00442                 break;
00443 
00444             case 'day':
00445                 if (empty($value)) {
00446                     $value = array("gregorian", "format", "wide");
00447                 }
00448                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/days/dayContext[@type=\'' . $value[1] . '\']/dayWidth[@type=\'' . $value[2] . '\']/day', 'type');
00449                 break;
00450 
00451             case 'week':
00452                 $minDays   = self::_calendarDetail($locale, self::_getFile('supplementalData', '/supplementalData/weekData/minDays', 'territories'));
00453                 $firstDay  = self::_calendarDetail($locale, self::_getFile('supplementalData', '/supplementalData/weekData/firstDay', 'territories'));
00454                 $weekStart = self::_calendarDetail($locale, self::_getFile('supplementalData', '/supplementalData/weekData/weekendStart', 'territories'));
00455                 $weekEnd   = self::_calendarDetail($locale, self::_getFile('supplementalData', '/supplementalData/weekData/weekendEnd', 'territories'));
00456 
00457                 $temp  = self::_getFile('supplementalData', "/supplementalData/weekData/minDays[@territories='" . $minDays . "']", 'count', 'minDays');
00458                 $temp += self::_getFile('supplementalData', "/supplementalData/weekData/firstDay[@territories='" . $firstDay . "']", 'day', 'firstDay');
00459                 $temp += self::_getFile('supplementalData', "/supplementalData/weekData/weekendStart[@territories='" . $weekStart . "']", 'day', 'weekendStart');
00460                 $temp += self::_getFile('supplementalData', "/supplementalData/weekData/weekendEnd[@territories='" . $weekEnd . "']", 'day', 'weekendEnd');
00461                 break;
00462 
00463             case 'quarters':
00464                 if (empty($value)) {
00465                     $value = "gregorian";
00466                 }
00467                 $temp['format']['abbreviated'] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'format\']/quarterWidth[@type=\'abbreviated\']/quarter', 'type');
00468                 $temp['format']['narrow']      = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'format\']/quarterWidth[@type=\'narrow\']/quarter', 'type');
00469                 $temp['format']['wide']        = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'format\']/quarterWidth[@type=\'wide\']/quarter', 'type');
00470                 $temp['stand-alone']['abbreviated']  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'stand-alone\']/quarterWidth[@type=\'abbreviated\']/quarter', 'type');
00471                 $temp['stand-alone']['narrow']       = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'stand-alone\']/quarterWidth[@type=\'narrow\']/quarter', 'type');
00472                 $temp['stand-alone']['wide']         = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/quarters/quarterContext[@type=\'stand-alone\']/quarterWidth[@type=\'wide\']/quarter', 'type');
00473                 break;
00474 
00475             case 'quarter':
00476                 if (empty($value)) {
00477                     $value = array("gregorian", "format", "wide");
00478                 }
00479                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/quarters/quarterContext[@type=\'' . $value[1] . '\']/quarterWidth[@type=\'' . $value[2] . '\']/quarter', 'type');
00480                 break;
00481 
00482             case 'eras':
00483                 if (empty($value)) {
00484                     $value = "gregorian";
00485                 }
00486                 $temp['names']       = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/eras/eraNames/era', 'type');
00487                 $temp['abbreviated'] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/eras/eraAbbr/era', 'type');
00488                 $temp['narrow']      = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/eras/eraNarrow/era', 'type');
00489                 break;
00490 
00491             case 'era':
00492                 if (empty($value)) {
00493                     $value = array("gregorian", "Abbr");
00494                 }
00495                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/eras/era' . $value[1] . '/era', 'type');
00496                 break;
00497 
00498             case 'date':
00499                 if (empty($value)) {
00500                     $value = "gregorian";
00501                 }
00502                 $temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'full\']/dateFormat/pattern', '', 'full');
00503                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'long\']/dateFormat/pattern', '', 'long');
00504                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'medium\']/dateFormat/pattern', '', 'medium');
00505                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'short\']/dateFormat/pattern', '', 'short');
00506                 break;
00507 
00508             case 'time':
00509                 if (empty($value)) {
00510                     $value = "gregorian";
00511                 }
00512                 $temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'full\']/timeFormat/pattern', '', 'full');
00513                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'long\']/timeFormat/pattern', '', 'long');
00514                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'medium\']/timeFormat/pattern', '', 'medium');
00515                 $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'short\']/timeFormat/pattern', '', 'short');
00516                 break;
00517 
00518             case 'datetime':
00519                 if (empty($value)) {
00520                     $value = "gregorian";
00521                 }
00522 
00523                 $timefull = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'full\']/timeFormat/pattern', '', 'full');
00524                 $timelong = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'long\']/timeFormat/pattern', '', 'long');
00525                 $timemedi = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'medium\']/timeFormat/pattern', '', 'medi');
00526                 $timeshor = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/timeFormatLength[@type=\'short\']/timeFormat/pattern', '', 'shor');
00527 
00528                 $datefull = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'full\']/dateFormat/pattern', '', 'full');
00529                 $datelong = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'long\']/dateFormat/pattern', '', 'long');
00530                 $datemedi = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'medium\']/dateFormat/pattern', '', 'medi');
00531                 $dateshor = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/dateFormatLength[@type=\'short\']/dateFormat/pattern', '', 'shor');
00532 
00533                 $full = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'full\']/dateTimeFormat/pattern', '', 'full');
00534                 $long = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'long\']/dateTimeFormat/pattern', '', 'long');
00535                 $medi = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'medium\']/dateTimeFormat/pattern', '', 'medi');
00536                 $shor = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'short\']/dateTimeFormat/pattern', '', 'shor');
00537 
00538                 $temp['full']   = str_replace(array('{0}', '{1}'), array($timefull['full'], $datefull['full']), $full['full']);
00539                 $temp['long']   = str_replace(array('{0}', '{1}'), array($timelong['long'], $datelong['long']), $long['long']);
00540                 $temp['medium'] = str_replace(array('{0}', '{1}'), array($timemedi['medi'], $datemedi['medi']), $medi['medi']);
00541                 $temp['short']  = str_replace(array('{0}', '{1}'), array($timeshor['shor'], $dateshor['shor']), $shor['shor']);
00542                 break;
00543 
00544             case 'dateitem':
00545                 if (empty($value)) {
00546                     $value = "gregorian";
00547                 }
00548                 $_temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem', 'id');
00549                 foreach($_temp as $key => $found) {
00550                     $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem[@id=\'' . $key . '\']', '', $key);
00551                 }
00552                 break;
00553 
00554             case 'dateinterval':
00555                 if (empty($value)) {
00556                     $value = "gregorian";
00557                 }
00558                 $_temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/intervalFormats/intervalFormatItem', 'id');
00559                 foreach($_temp as $key => $found) {
00560                     $temp[$key] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\'' . $key . '\']/greatestDifference', 'id');
00561                 }
00562                 break;
00563 
00564             case 'field':
00565                 if (empty($value)) {
00566                     $value = "gregorian";
00567                 }
00568                 $temp2 = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/fields/field', 'type');
00569                 foreach ($temp2 as $key => $keyvalue) {
00570                     $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/fields/field[@type=\'' . $key . '\']/displayName', '', $key);
00571                 }
00572                 break;
00573 
00574             case 'relative':
00575                 if (empty($value)) {
00576                     $value = "gregorian";
00577                 }
00578                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/fields/field/relative', 'type');
00579                 break;
00580 
00581             case 'symbols':
00582                 $temp  = self::_getFile($locale, '/ldml/numbers/symbols/decimal',         '', 'decimal');
00583                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/group',           '', 'group');
00584                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/list',            '', 'list');
00585                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/percentSign',     '', 'percent');
00586                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/nativeZeroDigit', '', 'zero');
00587                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/patternDigit',    '', 'pattern');
00588                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/plusSign',        '', 'plus');
00589                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/minusSign',       '', 'minus');
00590                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/exponential',     '', 'exponent');
00591                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/perMille',        '', 'mille');
00592                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/infinity',        '', 'infinity');
00593                 $temp += self::_getFile($locale, '/ldml/numbers/symbols/nan',             '', 'nan');
00594                 break;
00595 
00596             case 'nametocurrency':
00597                 $_temp = self::_getFile($locale, '/ldml/numbers/currencies/currency', 'type');
00598                 foreach ($_temp as $key => $found) {
00599                     $temp += self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $key . '\']/displayName', '', $key);
00600                 }
00601                 break;
00602 
00603             case 'currencytoname':
00604                 $_temp = self::_getFile($locale, '/ldml/numbers/currencies/currency', 'type');
00605                 foreach ($_temp as $key => $keyvalue) {
00606                     $val = self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $key . '\']/displayName', '', $key);
00607                     if (!isset($val[$key])) {
00608                         continue;
00609                     }
00610                     if (!isset($temp[$val[$key]])) {
00611                         $temp[$val[$key]] = $key;
00612                     } else {
00613                         $temp[$val[$key]] .= " " . $key;
00614                     }
00615                 }
00616                 break;
00617 
00618             case 'currencysymbol':
00619                 $_temp = self::_getFile($locale, '/ldml/numbers/currencies/currency', 'type');
00620                 foreach ($_temp as $key => $found) {
00621                     $temp += self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $key . '\']/symbol', '', $key);
00622                 }
00623                 break;
00624 
00625             case 'question':
00626                 $temp  = self::_getFile($locale, '/ldml/posix/messages/yesstr',  '', 'yes');
00627                 $temp += self::_getFile($locale, '/ldml/posix/messages/nostr',   '', 'no');
00628                 break;
00629 
00630             case 'currencyfraction':
00631                 $_temp = self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info', 'iso4217');
00632                 foreach ($_temp as $key => $found) {
00633                     $temp += self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info[@iso4217=\'' . $key . '\']', 'digits', $key);
00634                 }
00635                 break;
00636 
00637             case 'currencyrounding':
00638                 $_temp = self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info', 'iso4217');
00639                 foreach ($_temp as $key => $found) {
00640                     $temp += self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info[@iso4217=\'' . $key . '\']', 'rounding', $key);
00641                 }
00642                 break;
00643 
00644             case 'currencytoregion':
00645                 $_temp = self::_getFile('supplementalData', '/supplementalData/currencyData/region', 'iso3166');
00646                 foreach ($_temp as $key => $keyvalue) {
00647                     $temp += self::_getFile('supplementalData', '/supplementalData/currencyData/region[@iso3166=\'' . $key . '\']/currency', 'iso4217', $key);
00648                 }
00649                 break;
00650 
00651             case 'regiontocurrency':
00652                 $_temp = self::_getFile('supplementalData', '/supplementalData/currencyData/region', 'iso3166');
00653                 foreach ($_temp as $key => $keyvalue) {
00654                     $val = self::_getFile('supplementalData', '/supplementalData/currencyData/region[@iso3166=\'' . $key . '\']/currency', 'iso4217', $key);
00655                     if (!isset($val[$key])) {
00656                         continue;
00657                     }
00658                     if (!isset($temp[$val[$key]])) {
00659                         $temp[$val[$key]] = $key;
00660                     } else {
00661                         $temp[$val[$key]] .= " " . $key;
00662                     }
00663                 }
00664                 break;
00665 
00666             case 'regiontoterritory':
00667                 $_temp = self::_getFile('supplementalData', '/supplementalData/territoryContainment/group', 'type');
00668                 foreach ($_temp as $key => $found) {
00669                     $temp += self::_getFile('supplementalData', '/supplementalData/territoryContainment/group[@type=\'' . $key . '\']', 'contains', $key);
00670                 }
00671                 break;
00672 
00673             case 'territorytoregion':
00674                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/territoryContainment/group', 'type');
00675                 $_temp = array();
00676                 foreach ($_temp2 as $key => $found) {
00677                     $_temp += self::_getFile('supplementalData', '/supplementalData/territoryContainment/group[@type=\'' . $key . '\']', 'contains', $key);
00678                 }
00679                 foreach($_temp as $key => $found) {
00680                     $_temp3 = explode(" ", $found);
00681                     foreach($_temp3 as $found3) {
00682                         if (!isset($temp[$found3])) {
00683                             $temp[$found3] = (string) $key;
00684                         } else {
00685                             $temp[$found3] .= " " . $key;
00686                         }
00687                     }
00688                 }
00689                 break;
00690 
00691             case 'scripttolanguage':
00692                 $_temp = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
00693                 foreach ($_temp as $key => $found) {
00694                     $temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'scripts', $key);
00695                     if (empty($temp[$key])) {
00696                         unset($temp[$key]);
00697                     }
00698                 }
00699                 break;
00700 
00701             case 'languagetoscript':
00702                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
00703                 $_temp = array();
00704                 foreach ($_temp2 as $key => $found) {
00705                     $_temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'scripts', $key);
00706                 }
00707                 foreach($_temp as $key => $found) {
00708                     $_temp3 = explode(" ", $found);
00709                     foreach($_temp3 as $found3) {
00710                         if (empty($found3)) {
00711                             continue;
00712                         }
00713                         if (!isset($temp[$found3])) {
00714                             $temp[$found3] = (string) $key;
00715                         } else {
00716                             $temp[$found3] .= " " . $key;
00717                         }
00718                     }
00719                 }
00720                 break;
00721 
00722             case 'territorytolanguage':
00723                 $_temp = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
00724                 foreach ($_temp as $key => $found) {
00725                     $temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'territories', $key);
00726                     if (empty($temp[$key])) {
00727                         unset($temp[$key]);
00728                     }
00729                 }
00730                 break;
00731 
00732             case 'languagetoterritory':
00733                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
00734                 $_temp = array();
00735                 foreach ($_temp2 as $key => $found) {
00736                     $_temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'territories', $key);
00737                 }
00738                 foreach($_temp as $key => $found) {
00739                     $_temp3 = explode(" ", $found);
00740                     foreach($_temp3 as $found3) {
00741                         if (empty($found3)) {
00742                             continue;
00743                         }
00744                         if (!isset($temp[$found3])) {
00745                             $temp[$found3] = (string) $key;
00746                         } else {
00747                             $temp[$found3] .= " " . $key;
00748                         }
00749                     }
00750                 }
00751                 break;
00752 
00753             case 'timezonetowindows':
00754                 $_temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone', 'other');
00755                 foreach ($_temp as $key => $found) {
00756                     $temp += self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone[@other=\'' . $key . '\']', 'type', $key);
00757                 }
00758                 break;
00759 
00760             case 'windowstotimezone':
00761                 $_temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone', 'type');
00762                 foreach ($_temp as $key => $found) {
00763                     $temp += self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone[@type=\'' .$key . '\']', 'other', $key);
00764                 }
00765                 break;
00766 
00767             case 'territorytotimezone':
00768                 $_temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem', 'type');
00769                 foreach ($_temp as $key => $found) {
00770                     $temp += self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem[@type=\'' . $key . '\']', 'territory', $key);
00771                 }
00772                 break;
00773 
00774             case 'timezonetoterritory':
00775                 $_temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem', 'territory');
00776                 foreach ($_temp as $key => $found) {
00777                     $temp += self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem[@territory=\'' . $key . '\']', 'type', $key);
00778                 }
00779                 break;
00780 
00781             case 'citytotimezone':
00782                 $_temp = self::_getFile($locale, '/ldml/dates/timeZoneNames/zone', 'type');
00783                 foreach($_temp as $key => $found) {
00784                     $temp += self::_getFile($locale, '/ldml/dates/timeZoneNames/zone[@type=\'' . $key . '\']/exemplarCity', '', $key);
00785                 }
00786                 break;
00787 
00788             case 'timezonetocity':
00789                 $_temp  = self::_getFile($locale, '/ldml/dates/timeZoneNames/zone', 'type');
00790                 $temp = array();
00791                 foreach($_temp as $key => $found) {
00792                     $temp += self::_getFile($locale, '/ldml/dates/timeZoneNames/zone[@type=\'' . $key . '\']/exemplarCity', '', $key);
00793                     if (!empty($temp[$key])) {
00794                         $temp[$temp[$key]] = $key;
00795                     }
00796                     unset($temp[$key]);
00797                 }
00798                 break;
00799 
00800             case 'phonetoterritory':
00801                 $_temp = self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory', 'territory');
00802                 foreach ($_temp as $key => $keyvalue) {
00803                     $temp += self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory[@territory=\'' . $key . '\']/telephoneCountryCode', 'code', $key);
00804                 }
00805                 break;
00806 
00807             case 'territorytophone':
00808                 $_temp = self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory', 'territory');
00809                 foreach ($_temp as $key => $keyvalue) {
00810                     $val = self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory[@territory=\'' . $key . '\']/telephoneCountryCode', 'code', $key);
00811                     if (!isset($val[$key])) {
00812                         continue;
00813                     }
00814                     if (!isset($temp[$val[$key]])) {
00815                         $temp[$val[$key]] = $key;
00816                     } else {
00817                         $temp[$val[$key]] .= " " . $key;
00818                     }
00819                 }
00820                 break;
00821 
00822             case 'numerictoterritory':
00823                 $_temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes', 'type');
00824                 foreach ($_temp as $key => $keyvalue) {
00825                     $temp += self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@type=\'' . $key . '\']', 'numeric', $key);
00826                 }
00827                 break;
00828 
00829             case 'territorytonumeric':
00830                 $_temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes', 'numeric');
00831                 foreach ($_temp as $key => $keyvalue) {
00832                     $temp += self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@numeric=\'' . $key . '\']', 'type', $key);
00833                 }
00834                 break;
00835 
00836             case 'alpha3toterritory':
00837                 $_temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes', 'type');
00838                 foreach ($_temp as $key => $keyvalue) {
00839                     $temp += self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@type=\'' . $key . '\']', 'alpha3', $key);
00840                 }
00841                 break;
00842 
00843             case 'territorytoalpha3':
00844                 $_temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes', 'alpha3');
00845                 foreach ($_temp as $key => $keyvalue) {
00846                     $temp += self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@alpha3=\'' . $key . '\']', 'type', $key);
00847                 }
00848                 break;
00849 
00850             case 'postaltoterritory':
00851                 $_temp = self::_getFile('postalCodeData', '/supplementalData/postalCodeData/postCodeRegex', 'territoryId');
00852                 foreach ($_temp as $key => $keyvalue) {
00853                     $temp += self::_getFile('postalCodeData', '/supplementalData/postalCodeData/postCodeRegex[@territoryId=\'' . $key . '\']', 'territoryId');
00854                 }
00855                 break;
00856 
00857             case 'numberingsystem':
00858                 $_temp = self::_getFile('numberingSystems', '/supplementalData/numberingSystems/numberingSystem', 'id');
00859                 foreach ($_temp as $key => $keyvalue) {
00860                     $temp += self::_getFile('numberingSystems', '/supplementalData/numberingSystems/numberingSystem[@id=\'' . $key . '\']', 'digits', $key);
00861                     if (empty($temp[$key])) {
00862                         unset($temp[$key]);
00863                     }
00864                 }
00865                 break;
00866 
00867             case 'chartofallback':
00868                 $_temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character', 'value');
00869                 foreach ($_temp as $key => $keyvalue) {
00870                     $temp2 = self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $key . '\']/substitute', '', $key);
00871                     $temp[current($temp2)] = $key;
00872                 }
00873                 break;
00874 
00875             case 'fallbacktochar':
00876                 $_temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character', 'value');
00877                 foreach ($_temp as $key => $keyvalue) {
00878                     $temp += self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $key . '\']/substitute', '', $key);
00879                 }
00880                 break;
00881 
00882             case 'localeupgrade':
00883                 $_temp = self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag', 'from');
00884                 foreach ($_temp as $key => $keyvalue) {
00885                     $temp += self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag[@from=\'' . $key . '\']', 'to', $key);
00886                 }
00887                 break;
00888 
00889             case 'unit':
00890                 $_temp = self::_getFile($locale, '/ldml/units/unit', 'type');
00891                 foreach($_temp as $key => $keyvalue) {
00892                     $_temp2 = self::_getFile($locale, '/ldml/units/unit[@type=\'' . $key . '\']/unitPattern', 'count');
00893                     $temp[$key] = $_temp2;
00894                 }
00895                 break;
00896 
00897             default :
00898                 require_once 'Zend/Locale/Exception.php';
00899                 throw new Zend_Locale_Exception("Unknown list ($path) for parsing locale data.");
00900                 break;
00901         }
00902 
00903         if (isset(self::$_cache)) {
00904             self::$_cache->save( serialize($temp), $id);
00905         }
00906 
00907         return $temp;
00908     }
00909 
00919     public static function getContent($locale, $path, $value = false)
00920     {
00921         $locale = self::_checkLocale($locale);
00922 
00923         if (!isset(self::$_cache) && !self::$_cacheDisabled) {
00924             require_once 'Zend/Cache.php';
00925             self::$_cache = Zend_Cache::factory(
00926                 'Core',
00927                 'File',
00928                 array('automatic_serialization' => true),
00929                 array());
00930         }
00931 
00932         $val = $value;
00933         if (is_array($value)) {
00934             $val = implode('_' , $value);
00935         }
00936         $val = urlencode($val);
00937         $id = strtr('Zend_LocaleC_' . $locale . '_' . $path . '_' . $val, array('-' => '_', '%' => '_', '+' => '_'));
00938         if (!self::$_cacheDisabled && ($result = self::$_cache->load($id))) {
00939             return unserialize($result);
00940         }
00941 
00942         switch(strtolower($path)) {
00943             case 'language':
00944                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/languages/language[@type=\'' . $value . '\']', 'type');
00945                 break;
00946 
00947             case 'script':
00948                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/scripts/script[@type=\'' . $value . '\']', 'type');
00949                 break;
00950 
00951             case 'country':
00952             case 'territory':
00953                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/territories/territory[@type=\'' . $value . '\']', 'type');
00954                 break;
00955 
00956             case 'variant':
00957                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/variants/variant[@type=\'' . $value . '\']', 'type');
00958                 break;
00959 
00960             case 'key':
00961                 $temp = self::_getFile($locale, '/ldml/localeDisplayNames/keys/key[@type=\'' . $value . '\']', 'type');
00962                 break;
00963 
00964             case 'defaultcalendar':
00965                 $temp = self::_getFile($locale, '/ldml/dates/calendars/default', 'choice', 'default');
00966                 break;
00967 
00968             case 'monthcontext':
00969                 if (empty ($value)) {
00970                     $value = "gregorian";
00971                 }
00972                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/default', 'choice', 'context');
00973                 break;
00974 
00975             case 'defaultmonth':
00976                 if (empty ($value)) {
00977                     $value = "gregorian";
00978                 }
00979                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/months/monthContext[@type=\'format\']/default', 'choice', 'default');
00980                 break;
00981 
00982             case 'month':
00983                 if (!is_array($value)) {
00984                     $temp = $value;
00985                     $value = array("gregorian", "format", "wide", $temp);
00986                 }
00987                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/months/monthContext[@type=\'' . $value[1] . '\']/monthWidth[@type=\'' . $value[2] . '\']/month[@type=\'' . $value[3] . '\']', 'type');
00988                 break;
00989 
00990             case 'daycontext':
00991                 if (empty($value)) {
00992                     $value = "gregorian";
00993                 }
00994                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/default', 'choice', 'context');
00995                 break;
00996 
00997             case 'defaultday':
00998                 if (empty($value)) {
00999                     $value = "gregorian";
01000                 }
01001                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/days/dayContext[@type=\'format\']/default', 'choice', 'default');
01002                 break;
01003 
01004             case 'day':
01005                 if (!is_array($value)) {
01006                     $temp = $value;
01007                     $value = array("gregorian", "format", "wide", $temp);
01008                 }
01009                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/days/dayContext[@type=\'' . $value[1] . '\']/dayWidth[@type=\'' . $value[2] . '\']/day[@type=\'' . $value[3] . '\']', 'type');
01010                 break;
01011 
01012             case 'quarter':
01013                 if (!is_array($value)) {
01014                     $temp = $value;
01015                     $value = array("gregorian", "format", "wide", $temp);
01016                 }
01017                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/quarters/quarterContext[@type=\'' . $value[1] . '\']/quarterWidth[@type=\'' . $value[2] . '\']/quarter[@type=\'' . $value[3] . '\']', 'type');
01018                 break;
01019 
01020             case 'am':
01021                 if (empty($value)) {
01022                     $value = "gregorian";
01023                 }
01024                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/am', '', 'am');
01025                 break;
01026 
01027             case 'pm':
01028                 if (empty($value)) {
01029                     $value = "gregorian";
01030                 }
01031                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/pm', '', 'pm');
01032                 break;
01033 
01034             case 'era':
01035                 if (!is_array($value)) {
01036                     $temp = $value;
01037                     $value = array("gregorian", "Abbr", $temp);
01038                 }
01039                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/eras/era' . $value[1] . '/era[@type=\'' . $value[2] . '\']', 'type');
01040                 break;
01041 
01042             case 'defaultdate':
01043                 if (empty($value)) {
01044                     $value = "gregorian";
01045                 }
01046                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateFormats/default', 'choice', 'default');
01047                 break;
01048 
01049             case 'date':
01050                 if (empty($value)) {
01051                     $value = array("gregorian", "medium");
01052                 }
01053                 if (!is_array($value)) {
01054                     $temp = $value;
01055                     $value = array("gregorian", $temp);
01056                 }
01057                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateFormats/dateFormatLength[@type=\'' . $value[1] . '\']/dateFormat/pattern', '', 'pattern');
01058                 break;
01059 
01060             case 'defaulttime':
01061                 if (empty($value)) {
01062                     $value = "gregorian";
01063                 }
01064                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/timeFormats/default', 'choice', 'default');
01065                 break;
01066 
01067             case 'time':
01068                 if (empty($value)) {
01069                     $value = array("gregorian", "medium");
01070                 }
01071                 if (!is_array($value)) {
01072                     $temp = $value;
01073                     $value = array("gregorian", $temp);
01074                 }
01075                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/timeFormats/timeFormatLength[@type=\'' . $value[1] . '\']/timeFormat/pattern', '', 'pattern');
01076                 break;
01077 
01078             case 'datetime':
01079                 if (empty($value)) {
01080                     $value = array("gregorian", "medium");
01081                 }
01082                 if (!is_array($value)) {
01083                     $temp = $value;
01084                     $value = array("gregorian", $temp);
01085                 }
01086 
01087                 $date     = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateFormats/dateFormatLength[@type=\'' . $value[1] . '\']/dateFormat/pattern', '', 'pattern');
01088                 $time     = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/timeFormats/timeFormatLength[@type=\'' . $value[1] . '\']/timeFormat/pattern', '', 'pattern');
01089                 $datetime = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'' . $value[1] . '\']/dateTimeFormat/pattern', '', 'pattern');
01090                 $temp = str_replace(array('{0}', '{1}'), array(current($time), current($date)), current($datetime));
01091                 break;
01092 
01093             case 'dateitem':
01094                 if (empty($value)) {
01095                     $value = array("gregorian", "yyMMdd");
01096                 }
01097                 if (!is_array($value)) {
01098                     $temp = $value;
01099                     $value = array("gregorian", $temp);
01100                 }
01101                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/availableFormats/dateFormatItem[@id=\'' . $value[1] . '\']', '');
01102                 break;
01103 
01104             case 'dateinterval':
01105                 if (empty($value)) {
01106                     $value = array("gregorian", "yMd", "y");
01107                 }
01108                 if (!is_array($value)) {
01109                     $temp = $value;
01110                     $value = array("gregorian", $temp, $temp[0]);
01111                 }
01112                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\'' . $value[1] . '\']/greatestDifference[@id=\'' . $value[2] . '\']', '');
01113                 break;
01114 
01115             case 'field':
01116                 if (!is_array($value)) {
01117                     $temp = $value;
01118                     $value = array("gregorian", $temp);
01119                 }
01120                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/fields/field[@type=\'' . $value[1] . '\']/displayName', '', $value[1]);
01121                 break;
01122 
01123             case 'relative':
01124                 if (!is_array($value)) {
01125                     $temp = $value;
01126                     $value = array("gregorian", $temp);
01127                 }
01128                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/fields/field/relative[@type=\'' . $value[1] . '\']', '', $value[1]);
01129                 break;
01130 
01131             case 'decimalnumber':
01132                 $temp = self::_getFile($locale, '/ldml/numbers/decimalFormats/decimalFormatLength/decimalFormat/pattern', '', 'default');
01133                 break;
01134 
01135             case 'scientificnumber':
01136                 $temp = self::_getFile($locale, '/ldml/numbers/scientificFormats/scientificFormatLength/scientificFormat/pattern', '', 'default');
01137                 break;
01138 
01139             case 'percentnumber':
01140                 $temp = self::_getFile($locale, '/ldml/numbers/percentFormats/percentFormatLength/percentFormat/pattern', '', 'default');
01141                 break;
01142 
01143             case 'currencynumber':
01144                 $temp = self::_getFile($locale, '/ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat/pattern', '', 'default');
01145                 break;
01146 
01147             case 'nametocurrency':
01148                 $temp = self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $value . '\']/displayName', '', $value);
01149                 break;
01150 
01151             case 'currencytoname':
01152                 $temp = self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $value . '\']/displayName', '', $value);
01153                 $_temp = self::_getFile($locale, '/ldml/numbers/currencies/currency', 'type');
01154                 $temp = array();
01155                 foreach ($_temp as $key => $keyvalue) {
01156                     $val = self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $key . '\']/displayName', '', $key);
01157                     if (!isset($val[$key]) or ($val[$key] != $value)) {
01158                         continue;
01159                     }
01160                     if (!isset($temp[$val[$key]])) {
01161                         $temp[$val[$key]] = $key;
01162                     } else {
01163                         $temp[$val[$key]] .= " " . $key;
01164                     }
01165                 }
01166                 break;
01167 
01168             case 'currencysymbol':
01169                 $temp = self::_getFile($locale, '/ldml/numbers/currencies/currency[@type=\'' . $value . '\']/symbol', '', $value);
01170                 break;
01171 
01172             case 'question':
01173                 $temp = self::_getFile($locale, '/ldml/posix/messages/' . $value . 'str',  '', $value);
01174                 break;
01175 
01176             case 'currencyfraction':
01177                 if (empty($value)) {
01178                     $value = "DEFAULT";
01179                 }
01180                 $temp = self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info[@iso4217=\'' . $value . '\']', 'digits', 'digits');
01181                 break;
01182 
01183             case 'currencyrounding':
01184                 if (empty($value)) {
01185                     $value = "DEFAULT";
01186                 }
01187                 $temp = self::_getFile('supplementalData', '/supplementalData/currencyData/fractions/info[@iso4217=\'' . $value . '\']', 'rounding', 'rounding');
01188                 break;
01189 
01190             case 'currencytoregion':
01191                 $temp = self::_getFile('supplementalData', '/supplementalData/currencyData/region[@iso3166=\'' . $value . '\']/currency', 'iso4217', $value);
01192                 break;
01193 
01194             case 'regiontocurrency':
01195                 $_temp = self::_getFile('supplementalData', '/supplementalData/currencyData/region', 'iso3166');
01196                 $temp = array();
01197                 foreach ($_temp as $key => $keyvalue) {
01198                     $val = self::_getFile('supplementalData', '/supplementalData/currencyData/region[@iso3166=\'' . $key . '\']/currency', 'iso4217', $key);
01199                     if (!isset($val[$key]) or ($val[$key] != $value)) {
01200                         continue;
01201                     }
01202                     if (!isset($temp[$val[$key]])) {
01203                         $temp[$val[$key]] = $key;
01204                     } else {
01205                         $temp[$val[$key]] .= " " . $key;
01206                     }
01207                 }
01208                 break;
01209 
01210             case 'regiontoterritory':
01211                 $temp = self::_getFile('supplementalData', '/supplementalData/territoryContainment/group[@type=\'' . $value . '\']', 'contains', $value);
01212                 break;
01213 
01214             case 'territorytoregion':
01215                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/territoryContainment/group', 'type');
01216                 $_temp = array();
01217                 foreach ($_temp2 as $key => $found) {
01218                     $_temp += self::_getFile('supplementalData', '/supplementalData/territoryContainment/group[@type=\'' . $key . '\']', 'contains', $key);
01219                 }
01220                 $temp = array();
01221                 foreach($_temp as $key => $found) {
01222                     $_temp3 = explode(" ", $found);
01223                     foreach($_temp3 as $found3) {
01224                         if ($found3 !== $value) {
01225                             continue;
01226                         }
01227                         if (!isset($temp[$found3])) {
01228                             $temp[$found3] = (string) $key;
01229                         } else {
01230                             $temp[$found3] .= " " . $key;
01231                         }
01232                     }
01233                 }
01234                 break;
01235 
01236             case 'scripttolanguage':
01237                 $temp = self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $value . '\']', 'scripts', $value);
01238                 break;
01239 
01240             case 'languagetoscript':
01241                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
01242                 $_temp = array();
01243                 foreach ($_temp2 as $key => $found) {
01244                     $_temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'scripts', $key);
01245                 }
01246                 $temp = array();
01247                 foreach($_temp as $key => $found) {
01248                     $_temp3 = explode(" ", $found);
01249                     foreach($_temp3 as $found3) {
01250                         if ($found3 !== $value) {
01251                             continue;
01252                         }
01253                         if (!isset($temp[$found3])) {
01254                             $temp[$found3] = (string) $key;
01255                         } else {
01256                             $temp[$found3] .= " " . $key;
01257                         }
01258                     }
01259                 }
01260                 break;
01261 
01262             case 'territorytolanguage':
01263                 $temp = self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $value . '\']', 'territories', $value);
01264                 break;
01265 
01266             case 'languagetoterritory':
01267                 $_temp2 = self::_getFile('supplementalData', '/supplementalData/languageData/language', 'type');
01268                 $_temp = array();
01269                 foreach ($_temp2 as $key => $found) {
01270                     $_temp += self::_getFile('supplementalData', '/supplementalData/languageData/language[@type=\'' . $key . '\']', 'territories', $key);
01271                 }
01272                 $temp = array();
01273                 foreach($_temp as $key => $found) {
01274                     $_temp3 = explode(" ", $found);
01275                     foreach($_temp3 as $found3) {
01276                         if ($found3 !== $value) {
01277                             continue;
01278                         }
01279                         if (!isset($temp[$found3])) {
01280                             $temp[$found3] = (string) $key;
01281                         } else {
01282                             $temp[$found3] .= " " . $key;
01283                         }
01284                     }
01285                 }
01286                 break;
01287 
01288             case 'timezonetowindows':
01289                 $temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone[@other=\''.$value.'\']', 'type', $value);
01290                 break;
01291 
01292             case 'windowstotimezone':
01293                 $temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/mapTimezones[@type=\'windows\']/mapZone[@type=\''.$value.'\']', 'other', $value);
01294                 break;
01295 
01296             case 'territorytotimezone':
01297                 $temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem[@type=\'' . $value . '\']', 'territory', $value);
01298                 break;
01299 
01300             case 'timezonetoterritory':
01301                 $temp = self::_getFile('supplementalData', '/supplementalData/timezoneData/zoneFormatting/zoneItem[@territory=\'' . $value . '\']', 'type', $value);
01302                 break;
01303 
01304             case 'citytotimezone':
01305                 $temp = self::_getFile($locale, '/ldml/dates/timeZoneNames/zone[@type=\'' . $value . '\']/exemplarCity', '', $value);
01306                 break;
01307 
01308             case 'timezonetocity':
01309                 $_temp  = self::_getFile($locale, '/ldml/dates/timeZoneNames/zone', 'type');
01310                 $temp = array();
01311                 foreach($_temp as $key => $found) {
01312                     $temp += self::_getFile($locale, '/ldml/dates/timeZoneNames/zone[@type=\'' . $key . '\']/exemplarCity', '', $key);
01313                     if (!empty($temp[$key])) {
01314                         if ($temp[$key] == $value) {
01315                             $temp[$temp[$key]] = $key;
01316                         }
01317                     }
01318                     unset($temp[$key]);
01319                 }
01320                 break;
01321 
01322             case 'phonetoterritory':
01323                 $temp = self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory[@territory=\'' . $value . '\']/telephoneCountryCode', 'code', $value);
01324                 break;
01325 
01326             case 'territorytophone':
01327                 $_temp2 = self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory', 'territory');
01328                 $_temp = array();
01329                 foreach ($_temp2 as $key => $found) {
01330                     $_temp += self::_getFile('telephoneCodeData', '/supplementalData/telephoneCodeData/codesByTerritory[@territory=\'' . $key . '\']/telephoneCountryCode', 'code', $key);
01331                 }
01332                 $temp = array();
01333                 foreach($_temp as $key => $found) {
01334                     $_temp3 = explode(" ", $found);
01335                     foreach($_temp3 as $found3) {
01336                         if ($found3 !== $value) {
01337                             continue;
01338                         }
01339                         if (!isset($temp[$found3])) {
01340                             $temp[$found3] = (string) $key;
01341                         } else {
01342                             $temp[$found3] .= " " . $key;
01343                         }
01344                     }
01345                 }
01346                 break;
01347 
01348             case 'numerictoterritory':
01349                 $temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@type=\''.$value.'\']', 'numeric', $value);
01350                 break;
01351 
01352             case 'territorytonumeric':
01353                 $temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@numeric=\''.$value.'\']', 'type', $value);
01354                 break;
01355 
01356             case 'alpha3toterritory':
01357                 $temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@type=\''.$value.'\']', 'alpha3', $value);
01358                 break;
01359 
01360             case 'territorytoalpha3':
01361                 $temp = self::_getFile('supplementalData', '/supplementalData/codeMappings/territoryCodes[@alpha3=\''.$value.'\']', 'type', $value);
01362                 break;
01363 
01364             case 'postaltoterritory':
01365                 $temp = self::_getFile('postalCodeData', '/supplementalData/postalCodeData/postCodeRegex[@territoryId=\'' . $value . '\']', 'territoryId');
01366                 break;
01367 
01368             case 'numberingsystem':
01369                 $temp = self::_getFile('numberingSystems', '/supplementalData/numberingSystems/numberingSystem[@id=\'' . strtolower($value) . '\']', 'digits', $value);
01370                 break;
01371 
01372             case 'chartofallback':
01373                 $_temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character', 'value');
01374                 foreach ($_temp as $key => $keyvalue) {
01375                     $temp2 = self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $key . '\']/substitute', '', $key);
01376                     if (current($temp2) == $value) {
01377                         $temp = $key;
01378                     }
01379                 }
01380                 break;
01381 
01382                 $temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $value . '\']/substitute', '', $value);
01383                 break;
01384 
01385             case 'fallbacktochar':
01386                 $temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $value . '\']/substitute', '');
01387                 break;
01388 
01389             case 'localeupgrade':
01390                 $temp = self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag[@from=\'' . $value . '\']', 'to', $value);
01391                 break;
01392 
01393             case 'unit':
01394                 $temp = self::_getFile($locale, '/ldml/units/unit[@type=\'' . $value[0] . '\']/unitPattern[@count=\'' . $value[1] . '\']', '');
01395                 break;
01396 
01397             default :
01398                 require_once 'Zend/Locale/Exception.php';
01399                 throw new Zend_Locale_Exception("Unknown detail ($path) for parsing locale data.");
01400                 break;
01401         }
01402 
01403         if (is_array($temp)) {
01404             $temp = current($temp);
01405         }
01406         if (isset(self::$_cache)) {
01407             self::$_cache->save( serialize($temp), $id);
01408         }
01409 
01410         return $temp;
01411     }
01412 
01418     public static function getCache()
01419     {
01420         return self::$_cache;
01421     }
01422 
01428     public static function setCache(Zend_Cache_Core $cache)
01429     {
01430         self::$_cache = $cache;
01431     }
01432 
01438     public static function hasCache()
01439     {
01440         if (self::$_cache !== null) {
01441             return true;
01442         }
01443 
01444         return false;
01445     }
01446 
01452     public static function removeCache()
01453     {
01454         self::$_cache = null;
01455     }
01456 
01462     public static function clearCache()
01463     {
01464         self::$_cache->clean();
01465     }
01466 
01472     public static function disableCache($flag)
01473     {
01474         self::$_cacheDisabled = (boolean) $flag;
01475     }
01476 }

Generated on Thu Apr 19 2012 17:01:17 for openbiz by  doxygen 1.7.2