International Components for Unicode 2026-11-05
International Components for Unicode, commonly abbreviated ICU, is a set of libraries providing Unicode text processing and software internationalization services. Its C/C++ and Java implementations support tasks such as character encoding conversion, Unicode normalization, text-boundary analysis, language-sensitive sorting and formatting. A software locale selects conventions for a language or region; it does not change the abstract numerical value being formatted.[ref]
ICU User Guide by the Unicode Consortium. Introduction to ICU; ICU Services
For a text example, a visually accented letter can be represented by the single code point
U+00E9 or by U+0065 U+0301, a base letter followed by a combining accent. Those sequences differ as raw code-point arrays. A Unicode normalization service can bring these canonically equivalent sequences into the same normalization form before a comparison. This is distinct from translating a word or deciding a language-specific sort order.[ref]Unicode Normalization Forms by the Unicode Consortium. §§1.1–1.3: canonical equivalence and normalization
Such services make a useful division of labor: the application supplies meaning and policy, while a library implements detailed text and formatting rules. Storing text as UTF-8 alone does not implement software internationalization; the program must still handle boundaries, comparisons, numbers, dates and displayed messages appropriately.[ref]
ICU User Guide by the Unicode Consortium. ICU Services; Locales and Resources; Formatting
Locale (computing) 2026-11-05
A locale, also called a software locale, identifies a set of language-related and regional conventions used by software. Locale-sensitive services use it to select behavior such as date formatting, number formatting or culturally appropriate text ordering. A locale identifier can specify a language, script, region and further options.[ref]
ICU User Guide by the Unicode Consortium. Locales and Resources, The Locale Concept and component fields; unicode-org.github.io/icu/userguide/locale/
An original date example separates meaning from presentation. Let a stored value have year2026, month3 and day4. A day/month/year pattern displays
04/03/2026, while a month/day/year pattern displays 03/04/2026. Both represent the same date under their declared patterns. The bare strings do not carry all the information needed to choose the interpretation without context.A program can pass the selected locale as a parameter to a formatting service instead of hard-coding every convention. Changing that parameter changes the presentation requested for the operation. It does not change the stored date's year, month and day, infer a user's nationality, or convert the character encoding of every string.[ref]
The distinction from encoding is especially useful. Two applications can both store text as UTF-8 while choosing different locale-sensitive display forms. Conversely, two different byte encodings can represent the same textual date. A test record should therefore identify the semantic value, locale selection, format options and relevant library/data version separately.
The Common Locale Data & Rules project supplies shared data for such services, and International Components for Unicode provides implementations using locale information. A default locale is a convenience for choosing behavior when the application does not supply an explicit choice; making the choice explicit improves reproducibility of an example.[ref]
ICU User Guide by the Unicode Consortium. Locales and Resources, Default Locales and Locales and Services
Locale identifier 2026-11-05
A locale identifier is a structured name used to select a locale for a software service. It can encode language, writing system, region and additional preferences. The identifier names a requested configuration; it is not the full set of formatting or sorting rules.[ref]
ICU User Guide by the Unicode Consortium. Locales and Resources, The Locale Concept and Canonicalization
In the traditional International Components for Unicode syntax,
en_US identifies English with the United States region, while en_GB selects the United Kingdom region. For an original test, pass the same semantic date to a formatter twice, changing only the locale identifier. Compare the resulting text while keeping the data version and explicit format options fixed. Changing the output text does not change the stored date or its UTF-8 encoding.Parsing a locale identifier successfully does not establish that a service has data for it. A library may use fallback resources. Reproducible software tests should therefore record the requested identifier and relevant service/data versions, and inspect the effective resource choice when that matters.[ref]
ICU User Guide by the Unicode Consortium. Locales and Resources, Locales and Services; Usage: Creating Locales, constructor validity versus available resources