Basic Terminology
The process of creating software that can easily adapt to a variety of languages and related cultural conventions is called internationalization. Internationalization is the result of efforts by programmers and software designers during software development. For example, developers should never embed in their code any messages, prompts, or other kind of displayed text, but rather store the messages externally, so they can be translated without requiring the program to be recompiled. Similarly, a developer of internationalized software should never assume specific conventions for formatting numeric or monetary values, or for displaying date and time.
A locale is a user community that shares a common set of linguistic and cultural expectations and conventions. These conventions include, but are not limited to, a particular written language, sorting orders, and formats for dates, numbers and currency. Just because an application has been internationalized does not mean that the application runs appropriately in any locale; the application must be supplied with appropriately localized resources before it supports that locale.
The process of customizing an application for a specific locale is called localization. Localization includes everything from the translation of messages by software translators to the creation and availability of appropriate resource bundles containing relevant local data for use in a given system. Users of internationalized software are involved in the process as well, when they select the local conventions they prefer from the set of conventions available in their environment.
Note that internationalization does not imply localization. You may wish to internationalize your applications, regardless of whether you have immediate plans to localize.
Furthermore, note that localization does not require internationalization. However, localizing an application that has not been internationalized involves creating a separate version of the application for a particular market. The goal of internationalization is to create a single code base that can easily be localized to many markets without software modification.