Changelog:
Common Changes
CLDR 38
Support for units of measurement in inflected languages (phase 1)
14 new measurement units: candela, imperial quart, etc.
Improved locale ID canonicalization spec & data
New language at Modern coverage: Norwegian Nynorsk
New languages at Moderate coverage: Fulah (Adlam), Chakma, Asturian
New languages at Basic coverage: Dogri, Sanskrit
Measurement unit preferences (ICU-20568)
New usage() option on NumberFormatter to select the most appropriate unit for a locale and context
New outputUnit() getter on FormattedNumber to get the output unit after resolution
In skeletons, specify the context using the "usage" stem
Example: locale "en-GB", skeleton "usage/person unit-width-full-name unit/kilogram", input 80 (expressed in kilograms), output "12 stone, 8.4 pounds"
Usages are pulled in from CLDR (e.g. CLDR v38 Unit Preferences).
PluralRules selection for ranges of numbers (ICU-21190)
Locale ID canonicalization now conforms to the CLDR spec including edge cases; co-developed with CLDR spec & data improvements (ICU-21236, ICU-21115 & others)
New LocaleMatcher options: custom threshold (ICU-21144), no default locale (ICU-21029)
DateIntervalFormat supports output options such as capitalization (ICU-20651)
Uppercasing for the Armenian language (hy) now maps ligature to (ICU-13416)
Data size reduction: Rule-based segmentation data files (RBBI) use a more compact data format and are now half as large (ICU-13565)
Measurement units are normalized in skeleton string output: i.e., calling toSkeleton() on a NumberFormatter returns "unit/meter" instead of "measure-unit/length-meter"
The ICU User Guide has been migrated to Markdown format, hosted via GitHub Pages: https://unicode-org.github.io/icu/userguide/
Removed usage of terms like "blacklist" (ICU-21176), "master" (ICU-21242), and "grandfathered" (ICU-21184) as much as possible.
Time zone data (tzdata) version 2020d (2020-oct-21)
PluralRules category for compact notation numbers in French (ICU-13836)
ICU4C Specific Changes
New C API for number range formatting (unicode/unumberrangeformatter.h), for example "750 m - 1.2 km" (ICU-21182)
ICU 67 updates to CLDR 37 locale data with many additions and corrections. This release also includes the updates to Unicode 13, subsuming the special CLDR 36.1 and ICU 66 releases. ICU 67 includes many bug fixes for date and number formatting, including enhanced support for user preferences in the locale identifier. The LocaleMatcher code and data are improved, and number skeletons have a new “concise” form that can be used in MessageFormat strings.
ICU 66
It updates to Unicode 13 & CLDR 36.1. New, extra Q1 releases for low-risk integration of Unicode 13.
ICU 65
It updates to CLDR 36 locale data with many additions and corrections, and some new measurement units. The Java LocaleMatcher API is improved, and ported to C++. For building ICU data, there are new filtering options, and new tracing support for data loading in ICU4C.
Changelog:
2019-04-17: ICU 64.2 released. This maintenance update for ICU 64
includes draft Unicode 12.1 update, CLDR 35.1 locale data and
support for new Japanese era Reiwa.
Changelog:
Common Changes
Unicode 12: 554 new characters, including 4 new scripts and 61 new emoji characters.
CLDR 35
Somali and Javanese data now up to modern level
Cebuano, Hausa, Igbo, and Yoruba data now up to basic level
23 additional measurement units
Many data additions and corrections in many other languages
The following language has been added to ICU: Cebuano
This version of ICU does not yet implement the Indic Grapheme Cluster improvements from CLDR 35.
New Japanese calendar era from 2019: CLDR and ICU include data for testing that can be enabled. (ICU #12973, CLDR #10750)
To enable CLDR new Japanese era placeholder name, set environment variable (and Java system property for ICU4J) ICU_ENABLE_TENTATIVE_ERA=true (This was added in ICU 63).
Support added for Gannen year numbering (using 元 for the first year of an era) in the Japanese locale Japanese-calendar full, long, and medium formats. Gannen year support is also automatically added for other non-numeric formats (those containing other kanji characters such as 年) derived from pattern skeletons unless specifically overridden. (ICU #20441, CLDR #11843, CLDR #11819)
We are planning for an ICU 64.2 update in 2019-April which will add the new Japanese era with its real name.
ICU 64 now uses "rearguard" TZ data. (Recent versions have used "vanguard" data with certain overrides.) (ICU-20398)
ICU data filtering: The ICU4C build accepts an optional filter script that specifies a subset of the data to be built, with whitelists and blacklists for locales and for resource bundle paths. (ICU-10923, design doc)
See this new documentation page: userguide/icu_data/buildtool.md
MessageFormat has new pattern syntax for specifying the style of a date/time argument via a locale-independent skeleton rather than a locale-specific pattern. (ICU-9622)
Date/time skeletons use the same "::" prefix as number skeletons.
Example MessageFormat pattern string: "We close on {closing,date,::MMMMd} at {closing,time,::jm}."
Many formatting APIs can now output a new type of result object which is-a FormattedValue (Java & C++), or convertible to a UFormattedValue (C).
These combine the result strings with easy iteration over FieldPosition metadata.
ICU4C Specific Changes
New C++ class LocaleBuilder for building a Locale from subtags, keywords, and extensions. (ICU-20328)
Parallel to the existing ICU4J ULocale.Builder class.
For C++ MeasureUnit instances, there are now additional factory methods that return units by value, not by pointer-with-ownership. (ICU-20337)
Various Out-Of-Memory (OOM) issues have been fixed. (ticket query)
ICU 63.1:
Common Changes
- CLDR 34
- Segmentation rules and emoji sort order adjusted for Unicode 11
- Somali and Javanese data now up to moderate level (document content)
- Tongan, Konkani, Maori, Dzongkha, Tatar, Kurdish (ku), and Xhosa data now up to basic level
- Many data additions and corrections in many other languages
- The following languages have been added to ICU: Sindhi, Maori, Turkmen, Javanese, Interlingua, Kurdish (ku), Xhosa
- New currency: Venezuela's Bolívar Soberano (VES)
- New Japanese calendar era from 2019: CLDR and ICU include data for testing that can be enabled.
To enable CLDR new Japanese era placeholder name, set environment variable (and Java system property for ICU4J) ICU_ENABLE_TENTATIVE_ERA=true.
- New API for number and currency range formatting
Support for additional Unicode properties: Indic_Positional_Category & Indic_Syllabic_Category and Vertical_Orientation
- New API for code point maps and tries, mapping Unicode code points (U+0000..U+10FFFF) to integer values.
- Java classes CodePointMap, CodePointTrie, MutableCodePointTrie
- C types UCPMap, UCPTrie, UMutableCPTrie
- New API for getting a UnicodeSet per binary property and a code point map per enumerated/int-value property.
- Full conformance with UAX 14 Line Breaking (required BreakIterator feature work).
ICU4C Specific Changes
- C++ Locale class
- Additional functions forLanguageTag()/toLanguageTag(), and functions that are easier and safer to use by using StringPiece and ByteSink rather than raw buffers.
- Move semantics.
- ICU4C: Various Out-Of-Memory (OOM) issues have been fixed. (ticket query)
- The icu-config tool has been deprecated. You can use the --disable-icu-config option to disable icu-config from being installed. Alternately, you can use --enable-icu-config to enable icu-config. In the future, icu-config will be disabled by default
define _ISOC99_SOURCE to mitigate the damage of defining _XOPEN_SOURCE,
just don't define _XOPEN_SOURCE - nothing in the source defines it and
it breaks at least gcc 6.4 on NetBSD-8.0
No PKGREVISION bump as should not affect any building systems
Changelog:
Common Changes
Unicode 11: 684 new characters, including 7 new scripts, Mtavruli Georgian capital letters, 5 new Han characters, and 66 new emoji characters.
CLDR 33.1:
Unicode 11 script metadata, collation, Chinese transliteration.
Chinese collation stroke order updated from Unicode 7 to Unicode 11 after tooling bug fixes.
NumberFormatter
A NumberFormatter can now be constructed from a locale-neutral skeleton string (like a DateFormat) (#8610). This is particularly useful in translated messages where placeholder details should not be translated. MessageFormat recognizes the style field as a number skeleton if it is prefixed with "::", as in "Number of files: {num, number, :: round-integer group-min2}." (#13742)
New "conversion" functions for getting a NumberFormatter from a DecimalFormat, and a Format from a NumberFormatter.
New C API (unicode/unumberformatter.h [permanent API docs link TBD]). (#13597) Currently it supports formatting settings only via a skeleton string.
Several still-draft NumberFormatter methods and helper classes have been modified or renamed; the previous versions remain temporarily (as deprecated) for one release, to help with the transition.
Break Iterator Rules: "Safe" rules are no longer required for correct break iterator operation. For back compatibility, existing rule sets containing safe rules will continue to work, with the safe rules they contain being ignored. The Break Iterator binary data format has been updated to reflect this change.
Line Break: The boundary rules have been updated to reflect the Unicode 11 version of UAX #14. Specifically, the handling of Emoji ZWJ sequences has been improved.
ICU4C Specific Changes
Under-the-hood overhaul of number parsing. See the design doc for a summary of changes; behavior is mostly compatible with previous versions, but there are some known differences.
DecimalFormat now wraps the new NumberFormatter code.
61.1:
Common Changes
* CLDR 33:
- Two additional locales (Odia, Assamese) were brought up to Modern coverage level.
- 4 new transforms: fa-fa_FONIPA, ha-ha_NE, nv-nv_FONIPA, vec-vec_FONIPA.
- New currency code MRU for Mauritania.
- Arabic native vs. ASCII digits.
- Data additions & bug fixes.
* Many small API additions, improvements, and bug fixes.
ICU4C Specific Changes
* Added Google double-conversion library for formatting doubles. This is the library used in V8 and a number of other projects for converting doubles to decimals. To avoid name collisions, the library is linked internally under the ICU namespace as icu::double_conversion. Our copy of double_conversion is not intended for public usage.
* Re-wrote U8_NEXT macros to eliminate all library function calls.
60.2:
New API for direct-UTF-8 normalization.
- It also optionally records changes, for source-to-result index mapping and tracking of text metadata.
More convenient case mapping API (StringPiece→ByteSink).
ICU now handles ill-formed UTF-8 byte sequences as specified in the W3C Encoding Standard.
Bug fixes:
CLDR 32.0.1
- Change of some German AM/PM to English strings reverted; will be revisited.
- BGN transliterations restored.
The Script_Extensions property value for 5 CJK characters is wrong.
ICU4J DecimalFormat
- getGroupingSize() returns -1 instead of 0 in ICU60 if grouping is disabled
- setPositivePrefix also changes negative prefix
- unsets maxFrac when minFrac is set on a currency instance
DateFormat
- Urdu Islamic calendar eras
- Narrow format of noon time is used for abbreviated day period pattern letter 'b' and 'bb'
Conversion buffer overflow
Calendar buffer overrun
Windows C++: The header file "stringoptions.h" is not included in the the pre-built binary .zip file download.
Fix various typos and spelling mistakes.
Changes 60.1:
* Unicode 10.0: 8,518 new characters, including four new scripts, 7,494 new Han characters, and 56 new emoji characters.
- Properties newly supported in ICU: Emoji_Component, Regional_Indicator, Prepended_Concatenation_Mark
* CLDR 32:
- Data for several (mostly Asian) new languages, date formatting patterns using colloquial day period formats ("h:mm B" → “1:30 in the afternoon”), and many other data improvements.
- See the CLDR download page for other CLDR features and migration issues in CLDR 32.
* NumberFormatter, a new number formatting API: A long-overdue refresh of number formatting in ICU with a focus on usability, robustness, and performance. The 30+ settings in DecimalFormat are reduced to 8 in NumberFormatter; all NumberFormatter objects are thread-safe and immutable; and the code is efficient in both the client-side (constant locale) and server-side (variable locale) use cases.
- New users are encouraged to use the new API for number formatting. However, preexisting code can continue using the old API, which has been partially made into a wrapper over the new API.
- Documentation: in Java, see com.ibm.icu.number.NumberFormatter, and in C++, see i18n/unicode/numberformatter.h.
* New options for titlecasing:
- Sentence titlecasing and whole-string titlecasing without custom BreakIterator instances.
- The default index adjustment has been changed from "find first cased character" to "find first letter, number, or symbol"; a new option is available for selecting the previous adjustment behavior.
* Smaller data files for BreakIterator.
- Reverse rules no longer used: Easier updates, easier to conform to Unicode Standard.
- Old source rule files continue to work, reverse rules are ignored.
- Rule-based data files: 1.2MB→0.8MB.
ICU4C Specific Changes
* New API for direct-UTF-8 normalization.
- It also optionally records changes, for source-to-result index mapping and tracking of text metadata.
* More convenient case mapping API (StringPiece→ByteSink).
* ICU now handles ill-formed UTF-8 byte sequences as specified in the W3C Encoding Standard.
netbsd&linux do not have it (glibc had it, but removed in 2.26, and
was satisfied by locale.h always, if their release notes is to be believed)
this should cover BSDs other than netbsd, etc.
This was a glibc header, whereas locale.h is a POSIX one.
glibc went ahead and removed it in the new version.
change suggested by Thomas Orgis on tech-pkg but probably not applied
exactly.
* Emoji 5.0 data
* Includes bidi data files from Unicode 10 beta.
* Includes segmentation data files and rules from Unicode 10 beta and CLDR 31.0.1.
* Does not yet include the Emoji_Component property.
* Otherwise ICU 59 continues to use Unicode 9 data.
CLDR 31.0.1
* Including updates for emoji 5.0, for example local names for England, Scotland, and Wales.
* GMT and UTC are no longer unified, and CLDR provides distinct UTC display names, avoiding confusion with standard (winter) time in Britain.
* See the CLDR download page for other CLDR features and migration issues in CLDR v31.
New case mapping API (C++ & Java classes CaseMap) supports styled text.