Software internationalization is designing software so it can be adapted to different languages, regions and conventions without redesigning its core logic. Software localization performs a particular adaptation. Preparing the machinery and supplying a translated or region-specific result are related but distinct tasks.[ref]
For example, a program displaying a file count can keep the numerical count separate from the message that presents it. The selected software locale and message resources can then determine the full phrase, word order and grammatical form. Building every message by appending a fixed word to a decimal number assumes more about language than the underlying count requires. Similarly, a date represented as separate year, month and day values can be formatted for a chosen audience, whereas the bare string 03/04/2026 leaves the month/day convention ambiguous.[ref]
The engineering work includes selecting suitable character encodings, supporting Unicode, accounting for text direction, and separating localizable resources from source code. International Components for Unicode supplies reusable implementations of many text and formatting services. Internationalization still needs application-level decisions: a display format cannot supply a missing unit, infer an unspecified date convention or replace a meaningful data model.[ref]
Software localization 2026-11-05
Software localization adapts a software product for a particular audience's linguistic, regional and cultural requirements. It includes translation of visible text, but can also involve dates, numbers, currencies, keyboard use, sorting and visual presentation. Software internationalization prepares the product so that these adaptations can be supplied and selected.[ref]
An original engineering example is an application that displays a transaction amount, a date and a status message. Retain the numerical amount and date as structured values; select display patterns and message resources for the intended software locale. A translated status message can then change independently of the computation that produced the amount.
Suppose the same date value is presented with a month/day/year pattern in one localized interface and a day/month/year pattern in another. Testing only whether the two displayed strings are equal would be the wrong criterion. The relevant check is whether each presentation follows its declared conventions while preserving the represented value. Parsing user input requires the corresponding conventions too.
Resource separation is one enabling design choice: localizable messages and patterns can be changed without replacing the core computation. Localization must still be checked in the running interface, where text length, direction and layout constraints interact. A translated resource file alone does not establish that every control remains readable or that every input is interpreted correctly.[ref]
This separation makes the work testable. Computational tests can examine stable values and operations, while locale-specific interface tests examine the chosen messages and formats. Both are needed to establish that a localized application still performs the intended task for its audience.