1 /* 2 ******************************************************************************** 3 * Copyright (C) 1997-2007, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 ******************************************************************************** 6 * 7 * File DTFMTSYM.H 8 * 9 * Modification History: 10 * 11 * Date Name Description 12 * 02/19/97 aliu Converted from java. 13 * 07/21/98 stephen Added getZoneIndex() 14 * Changed to match C++ conventions 15 ******************************************************************************** 16 */ 17 18 #ifndef DTFMTSYM_H 19 #define DTFMTSYM_H 20 21 #include "unicode/utypes.h" 22 23 #if !UCONFIG_NO_FORMATTING 24 25 #include "unicode/calendar.h" 26 #include "unicode/uobject.h" 27 #include "unicode/locid.h" 28 #include "unicode/ures.h" 29 30 /** 31 * \file 32 * \brief C++ API: Symbols for formatting dates. 33 */ 34 35 U_NAMESPACE_BEGIN 36 37 /* forward declaration */ 38 class SimpleDateFormat; 39 class Hashtable; 40 class ZoneStringFormat; 41 class SafeZoneStringFormatPtr; 42 43 /** 44 * DateFormatSymbols is a public class for encapsulating localizable date-time 45 * formatting data -- including timezone data. DateFormatSymbols is used by 46 * DateFormat and SimpleDateFormat. 47 * <P> 48 * Rather than first creating a DateFormatSymbols to get a date-time formatter 49 * by using a SimpleDateFormat constructor, clients are encouraged to create a 50 * date-time formatter using the getTimeInstance(), getDateInstance(), or 51 * getDateTimeInstance() method in DateFormat. Each of these methods can return a 52 * date/time formatter initialized with a default format pattern along with the 53 * date-time formatting data for a given or default locale. After a formatter is 54 * created, clients may modify the format pattern using the setPattern function 55 * as so desired. For more information on using these formatter factory 56 * functions, see DateFormat. 57 * <P> 58 * If clients decide to create a date-time formatter with a particular format 59 * pattern and locale, they can do so with new SimpleDateFormat(aPattern, 60 * new DateFormatSymbols(aLocale)). This will load the appropriate date-time 61 * formatting data from the locale. 62 * <P> 63 * DateFormatSymbols objects are clonable. When clients obtain a 64 * DateFormatSymbols object, they can feel free to modify the date-time 65 * formatting data as necessary. For instance, clients can 66 * replace the localized date-time format pattern characters with the ones that 67 * they feel easy to remember. Or they can change the representative cities 68 * originally picked by default to using their favorite ones. 69 * <P> 70 * DateFormatSymbols are not expected to be subclassed. Data for a calendar is 71 * loaded out of resource bundles. The 'type' parameter indicates the type of 72 * calendar, for example, "gregorian" or "japanese". If the type is not gregorian 73 * (or NULL, or an empty string) then the type is appended to the resource name, 74 * for example, 'Eras_japanese' instead of 'Eras'. If the resource 'Eras_japanese' did 75 * not exist (even in root), then this class will fall back to just 'Eras', that is, 76 * Gregorian data. Therefore, the calendar implementor MUST ensure that the root 77 * locale at least contains any resources that are to be particularized for the 78 * calendar type. 79 */ 80 class U_I18N_API DateFormatSymbols : public UObject { 81 public: 82 /** 83 * Construct a DateFormatSymbols object by loading format data from 84 * resources for the default locale, in the default calendar (Gregorian). 85 * <P> 86 * NOTE: This constructor will never fail; if it cannot get resource 87 * data for the default locale, it will return a last-resort object 88 * based on hard-coded strings. 89 * 90 * @param status Status code. Failure 91 * results if the resources for the default cannot be 92 * found or cannot be loaded 93 * @stable ICU 2.0 94 */ 95 DateFormatSymbols(UErrorCode& status); 96 97 /** 98 * Construct a DateFormatSymbols object by loading format data from 99 * resources for the given locale, in the default calendar (Gregorian). 100 * 101 * @param locale Locale to load format data from. 102 * @param status Status code. Failure 103 * results if the resources for the locale cannot be 104 * found or cannot be loaded 105 * @stable ICU 2.0 106 */ 107 DateFormatSymbols(const Locale& locale, 108 UErrorCode& status); 109 110 /** 111 * Construct a DateFormatSymbols object by loading format data from 112 * resources for the default locale, in the default calendar (Gregorian). 113 * <P> 114 * NOTE: This constructor will never fail; if it cannot get resource 115 * data for the default locale, it will return a last-resort object 116 * based on hard-coded strings. 117 * 118 * @param type Type of calendar (as returned by Calendar::getType). 119 * Will be used to access the correct set of strings. 120 * (NULL or empty string defaults to "gregorian".) 121 * @param status Status code. Failure 122 * results if the resources for the default cannot be 123 * found or cannot be loaded 124 * @internal 125 */ 126 DateFormatSymbols(const char *type, UErrorCode& status); 127 128 /** 129 * Construct a DateFormatSymbols object by loading format data from 130 * resources for the given locale, in the default calendar (Gregorian). 131 * 132 * @param locale Locale to load format data from. 133 * @param type Type of calendar (as returned by Calendar::getType). 134 * Will be used to access the correct set of strings. 135 * (NULL or empty string defaults to "gregorian".) 136 * @param status Status code. Failure 137 * results if the resources for the locale cannot be 138 * found or cannot be loaded 139 * @internal 140 */ 141 DateFormatSymbols(const Locale& locale, 142 const char *type, 143 UErrorCode& status); 144 145 /** 146 * Copy constructor. 147 * @stable ICU 2.0 148 */ 149 DateFormatSymbols(const DateFormatSymbols&); 150 151 /** 152 * Assignment operator. 153 * @stable ICU 2.0 154 */ 155 DateFormatSymbols& operator=(const DateFormatSymbols&); 156 157 /** 158 * Destructor. This is nonvirtual because this class is not designed to be 159 * subclassed. 160 * @stable ICU 2.0 161 */ 162 virtual ~DateFormatSymbols(); 163 164 /** 165 * Return true if another object is semantically equal to this one. 166 * 167 * @param other the DateFormatSymbols object to be compared with. 168 * @return true if other is semantically equal to this. 169 * @stable ICU 2.0 170 */ 171 UBool operator==(const DateFormatSymbols& other) const; 172 173 /** 174 * Return true if another object is semantically unequal to this one. 175 * 176 * @param other the DateFormatSymbols object to be compared with. 177 * @return true if other is semantically unequal to this. 178 * @stable ICU 2.0 179 */ 180 UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); } 181 182 /** 183 * Gets era strings. For example: "AD" and "BC". 184 * 185 * @param count Filled in with length of the array. 186 * @return the era strings. 187 * @stable ICU 2.0 188 */ 189 const UnicodeString* getEras(int32_t& count) const; 190 191 /** 192 * Sets era strings. For example: "AD" and "BC". 193 * @param eras Array of era strings (DateFormatSymbols retains ownership.) 194 * @param count Filled in with length of the array. 195 * @stable ICU 2.0 196 */ 197 void setEras(const UnicodeString* eras, int32_t count); 198 199 /** 200 * Gets era name strings. For example: "Anno Domini" and "Before Christ". 201 * 202 * @param count Filled in with length of the array. 203 * @return the era name strings. 204 * @stable ICU 3.4 205 */ 206 const UnicodeString* getEraNames(int32_t& count) const; 207 208 /** 209 * Sets era name strings. For example: "Anno Domini" and "Before Christ". 210 * @param eraNames Array of era name strings (DateFormatSymbols retains ownership.) 211 * @param count Filled in with length of the array. 212 * @stable ICU 3.6 213 */ 214 void setEraNames(const UnicodeString* eraNames, int32_t count); 215 216 /** 217 * Gets month strings. For example: "January", "February", etc. 218 * @param count Filled in with length of the array. 219 * @return the month strings. (DateFormatSymbols retains ownership.) 220 * @stable ICU 2.0 221 */ 222 const UnicodeString* getMonths(int32_t& count) const; 223 224 /** 225 * Sets month strings. For example: "January", "February", etc. 226 * 227 * @param months the new month strings. (not adopted; caller retains ownership) 228 * @param count Filled in with length of the array. 229 * @stable ICU 2.0 230 */ 231 void setMonths(const UnicodeString* months, int32_t count); 232 233 /** 234 * Gets short month strings. For example: "Jan", "Feb", etc. 235 * 236 * @param count Filled in with length of the array. 237 * @return the short month strings. (DateFormatSymbols retains ownership.) 238 * @stable ICU 2.0 239 */ 240 const UnicodeString* getShortMonths(int32_t& count) const; 241 242 /** 243 * Sets short month strings. For example: "Jan", "Feb", etc. 244 * @param count Filled in with length of the array. 245 * @param shortMonths the new short month strings. (not adopted; caller retains ownership) 246 * @stable ICU 2.0 247 */ 248 void setShortMonths(const UnicodeString* shortMonths, int32_t count); 249 250 /** 251 * Selector for date formatting context 252 * @stable ICU 3.6 253 */ 254 enum DtContextType { 255 FORMAT, 256 STANDALONE, 257 DT_CONTEXT_COUNT 258 }; 259 260 /** 261 * Selector for date formatting width 262 * @stable ICU 3.6 263 */ 264 enum DtWidthType { 265 ABBREVIATED, 266 WIDE, 267 NARROW, 268 DT_WIDTH_COUNT 269 }; 270 271 /** 272 * Gets month strings by width and context. For example: "January", "February", etc. 273 * @param count Filled in with length of the array. 274 * @param context The formatting context, either FORMAT or STANDALONE 275 * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. 276 * @return the month strings. (DateFormatSymbols retains ownership.) 277 * @stable ICU 3.4 278 */ 279 const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const; 280 281 /** 282 * Sets month strings by width and context. For example: "January", "February", etc. 283 * 284 * @param months The new month strings. (not adopted; caller retains ownership) 285 * @param count Filled in with length of the array. 286 * @param context The formatting context, either FORMAT or STANDALONE 287 * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. 288 * @stable ICU 3.6 289 */ 290 void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width); 291 292 /** 293 * Gets weekday strings. For example: "Sunday", "Monday", etc. 294 * @param count Filled in with length of the array. 295 * @return the weekday strings. (DateFormatSymbols retains ownership.) 296 * @stable ICU 2.0 297 */ 298 const UnicodeString* getWeekdays(int32_t& count) const; 299 300 301 /** 302 * Sets weekday strings. For example: "Sunday", "Monday", etc. 303 * @param weekdays the new weekday strings. (not adopted; caller retains ownership) 304 * @param count Filled in with length of the array. 305 * @stable ICU 2.0 306 */ 307 void setWeekdays(const UnicodeString* weekdays, int32_t count); 308 309 /** 310 * Gets short weekday strings. For example: "Sun", "Mon", etc. 311 * @param count Filled in with length of the array. 312 * @return the short weekday strings. (DateFormatSymbols retains ownership.) 313 * @stable ICU 2.0 314 */ 315 const UnicodeString* getShortWeekdays(int32_t& count) const; 316 317 /** 318 * Sets short weekday strings. For example: "Sun", "Mon", etc. 319 * @param shortWeekdays the new short weekday strings. (not adopted; caller retains ownership) 320 * @param count Filled in with length of the array. 321 * @stable ICU 2.0 322 */ 323 void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count); 324 325 /** 326 * Gets weekday strings by width and context. For example: "Sunday", "Monday", etc. 327 * @param count Filled in with length of the array. 328 * @param context The formatting context, either FORMAT or STANDALONE 329 * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW 330 * @return the month strings. (DateFormatSymbols retains ownership.) 331 * @stable ICU 3.4 332 */ 333 const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const; 334 335 /** 336 * Sets weekday strings by width and context. For example: "Sunday", "Monday", etc. 337 * @param weekdays The new weekday strings. (not adopted; caller retains ownership) 338 * @param count Filled in with length of the array. 339 * @param context The formatting context, either FORMAT or STANDALONE 340 * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW 341 * @stable ICU 3.6 342 */ 343 void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width); 344 345 /** 346 * Gets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. 347 * @param count Filled in with length of the array. 348 * @param context The formatting context, either FORMAT or STANDALONE 349 * @param width The width of returned strings, either WIDE or ABBREVIATED. There 350 * are no NARROW quarters. 351 * @return the quarter strings. (DateFormatSymbols retains ownership.) 352 * @stable ICU 3.6 353 */ 354 const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const; 355 356 /** 357 * Sets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. 358 * 359 * @param quarters The new quarter strings. (not adopted; caller retains ownership) 360 * @param count Filled in with length of the array. 361 * @param context The formatting context, either FORMAT or STANDALONE 362 * @param width The width of returned strings, either WIDE or ABBREVIATED. There 363 * are no NARROW quarters. 364 * @stable ICU 3.6 365 */ 366 void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width); 367 368 /** 369 * Gets AM/PM strings. For example: "AM" and "PM". 370 * @param count Filled in with length of the array. 371 * @return the weekday strings. (DateFormatSymbols retains ownership.) 372 * @stable ICU 2.0 373 */ 374 const UnicodeString* getAmPmStrings(int32_t& count) const; 375 376 /** 377 * Sets ampm strings. For example: "AM" and "PM". 378 * @param ampms the new ampm strings. (not adopted; caller retains ownership) 379 * @param count Filled in with length of the array. 380 * @stable ICU 2.0 381 */ 382 void setAmPmStrings(const UnicodeString* ampms, int32_t count); 383 384 /** 385 * Gets timezone strings. These strings are stored in a 2-dimensional array. 386 * @param rowCount Output param to receive number of rows. 387 * @param columnCount Output param to receive number of columns. 388 * @return The timezone strings as a 2-d array. (DateFormatSymbols retains ownership.) 389 * @deprecated ICU 3.6 390 */ 391 const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const; 392 393 /** 394 * Sets timezone strings. These strings are stored in a 2-dimensional array. 395 * @param strings The timezone strings as a 2-d array to be copied. (not adopted; caller retains ownership) 396 * @param rowCount The number of rows (count of first index). 397 * @param columnCount The number of columns (count of second index). 398 * @stable ICU 2.0 399 */ 400 void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount); 401 402 /** 403 * Get the non-localized date-time pattern characters. 404 * @return the non-localized date-time pattern characters 405 * @stable ICU 2.0 406 */ 407 static const UChar * U_EXPORT2 getPatternUChars(void); 408 409 /** 410 * Gets localized date-time pattern characters. For example: 'u', 't', etc. 411 * <p> 412 * Note: ICU no longer provides localized date-time pattern characters for a locale 413 * starting ICU 3.8. This method returns the non-localized date-time pattern 414 * characters unless user defined localized data is set by setLocalPatternChars. 415 * @param result Output param which will receive the localized date-time pattern characters. 416 * @return A reference to 'result'. 417 * @stable ICU 2.0 418 */ 419 UnicodeString& getLocalPatternChars(UnicodeString& result) const; 420 421 /** 422 * Sets localized date-time pattern characters. For example: 'u', 't', etc. 423 * @param newLocalPatternChars the new localized date-time 424 * pattern characters. 425 * @stable ICU 2.0 426 */ 427 void setLocalPatternChars(const UnicodeString& newLocalPatternChars); 428 429 /** 430 * Returns the locale for this object. Two flavors are available: 431 * valid and actual locale. 432 * @stable ICU 2.8 433 */ 434 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; 435 436 /** 437 * ICU "poor man's RTTI", returns a UClassID for the actual class. 438 * 439 * @stable ICU 2.2 440 */ 441 virtual UClassID getDynamicClassID() const; 442 443 /** 444 * ICU "poor man's RTTI", returns a UClassID for this class. 445 * 446 * @stable ICU 2.2 447 */ 448 static UClassID U_EXPORT2 getStaticClassID(); 449 450 private: 451 452 friend class SimpleDateFormat; 453 friend class DateFormatSymbolsSingleSetter; // see udat.cpp 454 455 /** 456 * Era strings. For example: "AD" and "BC". 457 */ 458 UnicodeString* fEras; 459 int32_t fErasCount; 460 461 /** 462 * Era name strings. For example: "Anno Domini" and "Before Christ". 463 */ 464 UnicodeString* fEraNames; 465 int32_t fEraNamesCount; 466 467 /** 468 * Month strings. For example: "January", "February", etc. 469 */ 470 UnicodeString* fMonths; 471 int32_t fMonthsCount; 472 473 /** 474 * Short month strings. For example: "Jan", "Feb", etc. 475 */ 476 UnicodeString* fShortMonths; 477 int32_t fShortMonthsCount; 478 479 /** 480 * Narrow month strings. For example: "J", "F", etc. 481 */ 482 UnicodeString* fNarrowMonths; 483 int32_t fNarrowMonthsCount; 484 485 /** 486 * Standalone Month strings. For example: "January", "February", etc. 487 */ 488 UnicodeString* fStandaloneMonths; 489 int32_t fStandaloneMonthsCount; 490 491 /** 492 * Standalone Short month strings. For example: "Jan", "Feb", etc. 493 */ 494 UnicodeString* fStandaloneShortMonths; 495 int32_t fStandaloneShortMonthsCount; 496 497 /** 498 * Standalone Narrow month strings. For example: "J", "F", etc. 499 */ 500 UnicodeString* fStandaloneNarrowMonths; 501 int32_t fStandaloneNarrowMonthsCount; 502 503 /** 504 * Weekday strings. For example: "Sunday", "Monday", etc. 505 */ 506 UnicodeString* fWeekdays; 507 int32_t fWeekdaysCount; 508 509 /** 510 * Short weekday strings. For example: "Sun", "Mon", etc. 511 */ 512 UnicodeString* fShortWeekdays; 513 int32_t fShortWeekdaysCount; 514 515 /** 516 * Narrow weekday strings. For example: "Sun", "Mon", etc. 517 */ 518 UnicodeString* fNarrowWeekdays; 519 int32_t fNarrowWeekdaysCount; 520 521 /** 522 * Standalone Weekday strings. For example: "Sunday", "Monday", etc. 523 */ 524 UnicodeString* fStandaloneWeekdays; 525 int32_t fStandaloneWeekdaysCount; 526 527 /** 528 * Standalone Short weekday strings. For example: "Sun", "Mon", etc. 529 */ 530 UnicodeString* fStandaloneShortWeekdays; 531 int32_t fStandaloneShortWeekdaysCount; 532 533 /** 534 * Standalone Narrow weekday strings. For example: "Sun", "Mon", etc. 535 */ 536 UnicodeString* fStandaloneNarrowWeekdays; 537 int32_t fStandaloneNarrowWeekdaysCount; 538 539 /** 540 * Ampm strings. For example: "AM" and "PM". 541 */ 542 UnicodeString* fAmPms; 543 int32_t fAmPmsCount; 544 545 /** 546 * Quarter strings. For example: "1st quarter", "2nd quarter", etc. 547 */ 548 UnicodeString *fQuarters; 549 int32_t fQuartersCount; 550 551 /** 552 * Short quarters. For example: "Q1", "Q2", etc. 553 */ 554 UnicodeString *fShortQuarters; 555 int32_t fShortQuartersCount; 556 557 /** 558 * Standalone quarter strings. For example: "1st quarter", "2nd quarter", etc. 559 */ 560 UnicodeString *fStandaloneQuarters; 561 int32_t fStandaloneQuartersCount; 562 563 /** 564 * Standalone short quarter strings. For example: "Q1", "Q2", etc. 565 */ 566 UnicodeString *fStandaloneShortQuarters; 567 int32_t fStandaloneShortQuartersCount; 568 569 /** 570 * The format data of all the timezones in this locale. 571 */ 572 UnicodeString **fZoneStrings; // Zone string array set by setZoneStrings 573 UnicodeString **fLocaleZoneStrings; // Zone string array created by the locale 574 int32_t fZoneStringsRowCount; 575 int32_t fZoneStringsColCount; 576 577 const ZoneStringFormat *fZoneStringFormat; 578 ZoneStringFormat *fZSFLocal; // Local ZoneStringFormat instance 579 SafeZoneStringFormatPtr *fZSFCachePtr; // Cached ZoneStringFormat 580 Locale fZSFLocale; // Locale used for getting ZoneStringFormat 581 582 /** 583 * Pattern string used for localized time zone GMT format. For example, "GMT{0}" 584 */ 585 UnicodeString fGmtFormat; 586 587 /** 588 * Pattern strings used for formatting zone offset in a localized time zone GMT string. 589 */ 590 UnicodeString *fGmtHourFormats; 591 int32_t fGmtHourFormatsCount; 592 593 enum GMTHourType { 594 GMT_NEGATIVE_HMS = 0, 595 GMT_NEGATIVE_HM, 596 GMT_POSITIVE_HMS, 597 GMT_POSITIVE_HM, 598 GMT_HOUR_COUNT 599 }; 600 601 /** 602 * Localized date-time pattern characters. For example: use 'u' as 'y'. 603 */ 604 UnicodeString fLocalPatternChars; 605 606 private: 607 /** valid/actual locale information 608 * these are always ICU locales, so the length should not be a problem 609 */ 610 char validLocale[ULOC_FULLNAME_CAPACITY]; 611 char actualLocale[ULOC_FULLNAME_CAPACITY]; 612 613 DateFormatSymbols(); // default constructor not implemented 614 615 /** 616 * Called by the constructors to actually load data from the resources 617 * 618 * @param locale The locale to get symbols for. 619 * @param type Calendar Type (as from Calendar::getType()) 620 * @param status Input/output parameter, set to success or 621 * failure code upon return. 622 * @param useLastResortData determine if use last resort data 623 */ 624 void initializeData(const Locale&, const char *type, UErrorCode& status, UBool useLastResortData = FALSE); 625 626 /** 627 * Copy or alias an array in another object, as appropriate. 628 * 629 * @param dstArray the copy destination array. 630 * @param dstCount fill in with the lenth of 'dstArray'. 631 * @param srcArray the source array to be copied. 632 * @param srcCount the length of items to be copied from the 'srcArray'. 633 */ 634 static void assignArray(UnicodeString*& dstArray, 635 int32_t& dstCount, 636 const UnicodeString* srcArray, 637 int32_t srcCount); 638 639 /** 640 * Return true if the given arrays' contents are equal, or if the arrays are 641 * identical (pointers are equal). 642 * 643 * @param array1 one array to be compared with. 644 * @param array2 another array to be compared with. 645 * @param count the length of items to be copied. 646 * @return true if the given arrays' contents are equal, or if the arrays are 647 * identical (pointers are equal). 648 */ 649 static UBool arrayCompare(const UnicodeString* array1, 650 const UnicodeString* array2, 651 int32_t count); 652 653 /** 654 * Create a copy, in fZoneStrings, of the given zone strings array. The 655 * member variables fZoneStringsRowCount and fZoneStringsColCount should be 656 * set already by the caller. 657 */ 658 void createZoneStrings(const UnicodeString *const * otherStrings); 659 660 /** 661 * Delete all the storage owned by this object. 662 */ 663 void dispose(void); 664 665 /** 666 * Copy all of the other's data to this. 667 * @param other the object to be copied. 668 */ 669 void copyData(const DateFormatSymbols& other); 670 671 672 /** 673 * Returns a ZoneStringFormat, used only by SimpleDateFormat for now. 674 */ 675 const ZoneStringFormat* getZoneStringFormat(void) const; 676 677 /** 678 * Create a ZoneStringFormat by locale if not yet availble 679 */ 680 void initZoneStringFormat(void); 681 682 /** 683 * Create zone strings array by locale if not yet available 684 */ 685 void initZoneStringsArray(void); 686 687 /** 688 * Delete just the zone strings. 689 */ 690 void disposeZoneStrings(void); 691 }; 692 693 U_NAMESPACE_END 694 695 #endif /* #if !UCONFIG_NO_FORMATTING */ 696 697 #endif // _DTFMTSYM 698 //eof 699