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
It's very simple if you go by the below definitions,
i18n (internationalization) is the
process of designing an application so that it has the functionality to change to a different language without resorting to programmatic change of the application.
l10n (localization) is the
process of creating the actual language-specific texts and formatting.
Internationalisation - i18n - The abstraction of an application from any particular language/culture.
Localisation - l10n- Plugging in the concrete support for a particular language/culture/locale to the above i18n framework.
Basically by doing i18n first you make l10n much less of a PITA.
In contrast if you create an application in a concrete locale first and then later try to internationalise it, it will be a massive PITA. Its not a simple matter of just swapping out a concrete english string say "Hello World" to Resource.Global.HelloWorld.
Different languages will have different space requirements, layout, emphasis, colours etc.
You need the i18n framework in place from the ground up to easily support this switching between locales for the above differences if you even think you may need to support more than one locale.
Retrofitting it into the application later on is just really hard. You will have to revisit a whole host of architectural considerations and constraints you (or someone else) made the first time round.
Lets understand locale first
locale - a set of parameters that defines the user's language, region and any special variant preferences that the user wants to see in their user interface. Usually a locale identifier consists of at least a language identifier and a region identifier.
i18n - Designing and developing software to support multiple locales.
l10n - This is possible only when your software supports i18n. But l10n makes sure, that language, date-format, currency formats etc are shown in context for a specific locale.
For example,
#1. June 3, 1977 will be translated to Spanish as 3 de junio de 1977.
#2. Currency in some countries are separated by '.' vs ','
#3. Show respective currency symbol based on locale's country
#1, #2 and #3 are use-cases for localization.
If the software is designed to support #1 OR #2 OR #3 based on user-locale, then product is l10n enabled.
If it supports multiple locales then its i18n enabled.
Lot of answers, lot of correct information, but my answer is little bit another point of view.
Internationalization - it is when developer does not have in code direct messages/error messages/buttons names/labels captions/etc in certain language but have a key which is passed to translation function,
and translation function according to current user's locale will return final text in english/france/etc...
Translation function works with storage (db/files/associative array/etc).
Storage contains keys which is ussed in coode, and values, which is texts in certain language which application supports.
Localization - it is process of adding new values in new language (for example spain) appropriate to keys into storage without involving developer in this process.
For example, we have storage:
key | english | italian |
------+------------+-------------------+
title | Welcome | Benvenuto |
agree | I agree | Sono d'accordo |
thank | Thank you | Grazie |
Internationalization it is using in code something like confirm(t(agree));
instead of confirm("I agree");
or confirm("Sono d'accordo");
Localization - it is add new locale to our storage, like:
key | english | italian | spanish |
------+------------+-------------------+------------------+
title | Welcome | Benvenuto | Bienvenido |
agree | I agree | Sono d'accordo | Estoy de acuerdo |
thank | Thank you | Grazie | Gracias |
and here developer don't need update code, translation function will correctly carry appropriate texts.
According to Apple:
Internationalization is the process of designing and building an application to facilitate localization. Localization, in turn, is the cultural and linguistic adaptation of an internationalized application to two or more culturally-distinct markets.
L10n can sometimes show where your i18n has failed - for instance, where your dictionaries have a single entry for a word which is used as a noun and a verb in English which doesn't translate to the same word in another language, or UI elements/design are unsuitable for a culture (L/R orientation).
So l10n "generally" happens after i18n, but can feed back into your i18n and require further redesign, so you cannot consider your app fully internationalized until you've done a few localizations.