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

  1. The initial release has library version number 68.1.

      • Release date: 2020-10-28

  1. The latest maintenance release is 68.2, with some bug fixes.

    1. 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.)

    2. Note: There may be additional commits on the maint-68 branch that are not included in the prepackaged download files.

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

      • 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:

        1. Create a message format from "{number_of_views, plural, =0 {Aucune vue} one {# vue} many {# de vues} other {# vues}}"

        2. Set the message format's number formatter to be NumberFormatter::forSkeleton("compact-short", errorCode).locale(locale).formatDouble(X, errorCode);

        3. This results in:

ICU4C Specific Changes

ICU4J Specific Changes

Migration Issues

New in ICU 68

    1. ICU4C public header files no longer define and use the macros FALSE and TRUE. (ICU-21267)

      1. This avoids collisions between these macro definitions and application code that defines enum constants with these names.

      2. The ICU macros are no longer necessary: C++11 and C99 define false & true values.

      3. 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.

      4. 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>.

      5. 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

    1. 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)

    2. This is similar to issues with the char16_t adoption in ICU 59.

    3. 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)

      • Note that ICU 67 already fixed uses of u8"literals" broken by the C++20 introduction of the incompatible char8_t type (ICU-20972),

      • and added a few API overloads to reduce the need for reinterpret_cast (ICU-20984).

  • 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:

      • Source File Encoding. The ICC compiler does not recognize the /utf-8 option. A work-around is known and reported to succeed. (#13251)

    • 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>