ICU is the premier library for software internationalization, used by a wide array of companies and organizations. The following describes the changes in version 55.
The features for this release include support of CLDR 27 (with a major cleanup of region locales, among many other improvements), formatting for scientific notation ("1.2 × 10³"), an update to Unicode 7.0 data for spoof-checking, narrow AM/PM markers ("7:45p"), and various performance enhancements. For C/C++, there are new methods for flexible dates ("Nov 10", or "Sept 2015"), named capture groups for regular expressions, formatting of compound units ("3.5 meters per second"), new C wrappers, and independent timezone resource loading. ICU4J has been improved and tested for using ICU4C data and for running on Android.
- CLDR 27.0.1: For details of the many changes in CLDR, see CLDR 27.
- Most of the Cyrillic contractions have been removed from the default (root) order. This makes the default Cyrillic collation faster, and it avoids having to suppress unnecessary contractions in most of the Cyrillic tailorings. The Cyrillic tailorings have been updated. (#11375, CLDR #7246)
- Scripts can be reordered individually, instead of only in certain groups. (CLDR #7382, ICU #11449)
- An emoji collation is now available for emoji palettes. See UTR51: Unicode Emoji.
- ScientificNumberFormatter: (#10952) Easier-to-use API for formatting numbers in "normal" scientific notation (rather than programmer "E" notation). Replaces the ScientificFormatHelper (@draft ICU 54).
- "UK" measurement system added, and returned for GB. (#11357)
- Was @draft ICU 55 in milestone 1, @stable in the release. (#11444)
- Unicode algorithms fall back to root, not to unrelated default locale (#10823)
- Root behavior is intended, appropriate, and well-defined for collation, segmentation, case mappings — unless language-specific data overrides it.
- Behavior fixed where code used to fall back to the default locale: Collator.getInstance() (Java & C/C++) & BreakIterator.getInstance() (Java only)
- Locale display name to use localized currency keyword value such as "English (US dollar)" instead of "English (Currency:USD)". (#11415)
- Spoof Check data update to Unicode 7.0. Note that identifier skeletons have changed, with possible compatibility considerations. (#11262, #11446)
- DateFormat support (format and parse) for narrow AM/PM markers ("7:45p"), using date pattern field “aaaaa”. (#11510)
- Addition of line break strict/normal/loose variants for support of CSS3. BreakIterator variants can be specified in the [U]Locale using -u- extension key “lb” with possible values “strict”, “normal”, and “loose”. (#9379)
- MeasureFormat.formatMeasurePerUnit() API added (e.g., "3.5 meters per second"; API modified from ICU 54 tech preview) (#11303, #11445)
- The IDNA2003 API has been deprecated, to encourage migration away from the obsolete standard. Use the API for IDNA2008 / UTS #46 instead via uidna_openUTS46() or class IDNA. (#8477)
ICU4C Specific Changes
- DateFormat::createInstanceForSkeleton: methods that allow the creation of DateFormat objects from skeleton strings as in JAVA. (#11139)
- Create DateFormat objects up to 5x faster than before.
- Easier time zone data updates: Time zone resources may be loaded separately from other ICU data, simplifying the procedures for updating an ICU installation to the latest time zone data. (#10942)
- New C API wrappers:
- A new date format API udat_formatCalendar() allowing C API users to specify a calendar as a parameter, instead of UDate. This function does not need to create a defensive copy of a calendar, therefore, performs better in a tight loop. (#11293)
- New C header ulistformatter.h, C wrapper for ListFormatter: type UListFormatter, functions ulistfmt_open, ulistfmt_close, ulistfmt_format. (#11549)
- New C header ufieldpositer.h, C wrapper for FieldPositionIterator: type UFieldPositionIterator, functions ufieldpositer_open, ufieldpositer_close, ufieldpositer_next. (#11553)
- New udat.h format calls that set UFieldPositionIterator: udat_formatForFields, udat_formatCalendarForFields.(#11553)
- New UCONFIG_ONLY_HTML_CONVERSION build option to remove code for encodings that are discouraged or forbidden by the web encoding standard. (#11296)
- Regular Expressions: Named Capture Groups now supported (#5312). Added \R, \h, \H, \v, \V pattern meta-characters. (#11393)
- TimeZone::detectHostTimeZone() detects the current host time zone. (#11358)
ICU4J Specific Changes
- ICU4J has been improved and tested for using ICU4C data and for running on Android.
- Convenient new LocaleDisplayNames.getUiList() API for user-friendly presentation of a list of languages/locales. (#10488)
- File and other resources are closed reliably as soon as possible. (#11463)
- ICU4C 55.1 is known to fail under Solaris/GCC and SmartOS/GCC. A fix is in progress. (#11435)
- ICU4C 55.1 Transliterator thread safety problem. Fixed in svn trunk, r37342 and r37414. (#11603)
- ICU4C before version 56 does not compile under Microsoft Visual Studio 2015 (#11689)
- There are details on migration issues that may result from CLDR changes on CLDR 27 Migration.
- The measurement system for GB is now "UK", which may result in implementations incorrectly returning non-metric values.
- Application-specific Cyrillic collation tailorings (other than those in CLDR/ICU) may need to be adjusted for the removal of most Cyrillic contractions from the default/root order. Contractions need to be added, or need not be suppressed any more. (See CLDR #7246)
- Spoof Check identifier skeletons have changed, with possible compatibility considerations. (#11262, #11446)
- Layout Engine: breaking API change: The insecure pure virtual method LEFontInstance::getFontTable(LETag) (1-argument) was removed, and the method LEFontInstance::getFontTable(LETag, size_t&) (2-arguments) has been changed to be pure virtual (must be implemented). See the LEFontInstance API docs. (#11450)
(If the list of files does not appear above, see ICU4C Source.)
To extract the source code
, use the following command:
svn export http://source.icu-project.org/repos/icu/icu/tags/release-55-1
Version: 55.1/Java 8 Locale Service Provider support update
Release Date: 2015-06-10
icu4j-localespi-55_1.jar included in 55.1 release (2015-04-01) does not work well on Java 8 (it works fine on Java 6 and 7).
(If the list of files does not appear above, see ICU4J files.)
To extract the source code
, use the following command:
svn export http://source.icu-project.org/repos/icu/icu4j/tags/release-55-1