I was going to ask a question about preparing a desktop application to support multiple languages on the UI.
In my search for existing questions on the topic I was
Globalization (G11n): is the process of developing and marketing multilingual software products to a global market.
The development of multilingual software currently goes through two phases: the first phase is internationalization, and the second phase is localization.
Internationalization (I18n): is the process of generalizing a product so that it can handle multiple languages and cultural conventions without the need for re-design (i.e. language & culture neutral).
Localization (L10n): is the process of taking a product and making it linguistically and culturally appropriate to the target locale (country/region and language) where it will be used and sold (i.e. language & culture specific).
There are a few very good answers here, so I won't recycle them. However at some point, typically between internationalization testing and localization linguistic testing, internationalization and localization tend to overlap. One person mentions l10n feeding back to internationalization, but if you are doing quality i18n testing, and creating pseudo-localized content, then iterating on development issues during localization should be the exception, not the rule. Interface resizing, and particularly adapting pages to support bi-directional languages like Arabic and Hebrew also tend to blend both localization issues and internationalization engineering.
Suffice it to say, Internationalization involves making changes to the source to support any locale based on requirements. If internationalization is done well...
...Localization involves the adaptation of the content and some levels of presentation (e.g. a bold tag) so that it best addresses needs of specific targeted markets (locales).
Lots of articles & white papers for reference here: http://www.lingoport.com/software-internationalization-articles
Simply,
Internationalization(I18N) is the process of making your software able to adapt to different languages, regions, and cultures.
Localization(L10N) is the process of translating your software into multiple languages. But before you can localize your software, you internationalize it.
Internationalization prepares your application for localization. For example, you might encode characters stored in your database in Unicode (utf8mb4
instead of latin1
), moving strings to resource files, enabling the use of date, time and currency formats, etc.
When you wish to sell, for example, a Chinese version of your app, you'd then localize it by hiring a translator to build the zh-CN resource files, and use a new date/time/currency format.
The value of distinguishing between them is that (theoretically) once your program goes through the i18n process, you can then iterate many l10n processes as you need them; also, it's nice to be precise with language.
analogical pov: Imagine a shelf on your library that can only take one size book 4x4 inches. Internationalization would be building the shelf with all kinds of different compartments that can allow it to handle any book size or shape. And localization would be setting all the books on the right sections. Think of your Database, business logic and UI as the shelf and the different languages, currencies and text orientation as the books.