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
00098
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
00109 $temp[] = (string) $found;
00110 } else if (empty($temp[(string) $found[$attribute]])){
00111
00112 $temp[(string) $found[$attribute]] = (string) $found;
00113 }
00114
00115 } else if (empty ($temp[$value])) {
00116
00117 if (empty($attribute)) {
00118
00119 $temp[$value] = (string) $found;
00120 } else {
00121
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
00146
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
00158 $search = '';
00159 $tok = strtok($path, '/');
00160
00161
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
00177 if (!empty($result)) {
00178
00179 $source = $result[0]['source'];
00180 $newpath = $result[0]['path'];
00181
00182
00183 if ($newpath != '//ldml') {
00184
00185
00186 while (substr($newpath,0,3) == '../') {
00187 $newpath = substr($newpath, 3);
00188 $search = substr($search, 0, strrpos($search, '/'));
00189 }
00190
00191
00192 $path = $search . '/' . $newpath;
00193 while (($tok = strtok('/'))!== false) {
00194 $path = $path . '/' . $tok;
00195 }
00196 }
00197
00198
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
00230
00231
00232
00233
00234
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 }