ICU 68
ICU is the premier library for software internationalization, used by a wide array of companies and organizations.
Release Overview
ICU 68 updates to CLDR 38 locale data with many additions and corrections. ICU 68 brings support for locale-dependent smart unit preferences (road distance, temperature, etc.), implements locale ID canonicalization conformant with CLDR, and includes many other bug fixes and enhancements.
For more details, including migration issues, see below.
Please use the icu-support mailing list and/or find/submit error reports.
Version Number
The initial release has library version number 68.1.
Release date: 2020-10-28
The latest maintenance release is 68.2, with some bug fixes.
Release date: 2020-12-17
List of tickets fixed in maintenance release 68.2
If there are further maintenance releases, they will be 68.3, 68.4, etc. (During ICU 68 development, the library version number was 68.0.x.)
Note: There may be additional commits on the maint-68 branch that are not included in the prepackaged download files.
Common Changes
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
ICU 68.2 updates to CLDR 38.1
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)
French needs a special plural form for compact numbers, since messages have to use different wording following the equivalent of "3 thousand" vs "3 million". That can now be done with the message format in the following way:
Create a message format from "{number_of_views, plural, =0 {Aucune vue} one {# vue} many {# de vues} other {# vues}}"
Set the message format's number formatter to be NumberFormatter::forSkeleton("compact-short", errorCode).locale(locale).formatDouble(X, errorCode);
This results in:
ICU4C Specific Changes
New C API for number range formatting (unicode/unumberrangeformatter.h), for example “750 m - 1.2 km” (ICU-21182)
ICU4J Specific Changes
Migration Issues
New in ICU 68
ICU4C public header files no longer define and use the macros FALSE and TRUE. (ICU-21267)
This avoids collisions between these macro definitions and application code that defines enum constants with these names.
The ICU macros are no longer necessary: C++11 and C99 define false & true values.
ICU API continues to use the ICU-specific type UBool for now; the standard values can be assigned to UBool variables and arguments without warnings.
Please change call sites to use the standard false & true values where necessary. For C (as opposed to C++), these are also macros, defined in <stdbool.h>.
You may transitionally define U_DEFINE_FALSE_AND_TRUE=1 if you need time to migrate code, for example in application code before including any ICU header file, or by patching unicode/umachine.h and changing # define U_DEFINE_FALSE_AND_TRUE 0 to assign value 1 instead.
Other recent migration issues
Constructing a StringPiece from NULL may be ambiguous, depending on the platform. Where this is a problem, please adjust call sites from using NULL to using nullptr. (ICU-20984 PR #1044)
This is similar to issues with the char16_t adoption in ICU 59.
If you rebuild the ICU locale data from (possibly patched) CLDR data, note that there is a new CLDR-to-ICU converter tool in the ICU repo now, replacing the old one in the CLDR repo. (ICU-20693) See icu4c/source/data/cldr-icu-readme.txt
ICU4C Platform Support
All: Compiler support for C++11 is required for building the ICU libraries.
Some platforms (such as IBM AIX, IBM z and Solaris) may no longer be able to build ICU until an improved compiler is available.
ICU 68 cannot be built with a C++20 compiler. This version of the standard makes incompatible changes that will require ICU API changes in ICU 69. (ICU-20973)
macOS: XCode 8.3 (LLVM clang 8.1.0) has been tested.
Solaris
Windows:
The minimum supported version is Windows 7. Windows XP and Windows Vista are no longer supported.
Building the Visual Studio UWP projects requires Visual Studio 2017 (or VS2019) with a version of the Windows 10 SDK installed.
When using "@compat=host", on versions below Windows 10 version 1703, 6 locales have date and number formatting issues (#13119).
The LCID conversion APIs don't round-trip Kurdish (ku) and Central Kurdish (ckb) due to Windows not having a ckb locale (#20181).
The pre-built binaries now use Visual Studio 2019 [MSVC2019], instead of Visual Studio 2017 [MSVC2017] (ICU-21108).
Windows using the ICC compiler:
IBM AIX:
TBD
IBM z
TBD
ICU4J Platform Support
ICU4J works on Java 7 and on Android API level 21.
Download
Source and binary downloads are available on the git/GitHub tag page: https://github.com/unicode-org/icu/releases/tag/release-68-2
See the Source Code Access page for how to download the ICU file tree directly from GitHub.
ICU locale data was generated from CLDR tag https://github.com/unicode-org/cldr/releases/tag/release-38-1
Maven dependency for ICU4J:
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>68.2</version>
</dependency>