Много ответов, много правильной информации, но мой ответ - немного другая точка зрения.
Интернационализация - это когда разработчик не имеет в коде прямых сообщений / сообщений об ошибках / названий кнопок / заголовков ярлыков / и т.д. на определенном языке, но имеет ключ, который передается в функцию перевода, а функция перевода в соответствии с локалью текущего пользователя будет возвращать окончательный текст на английском / франция / и т.д ...
Функция перевода работает с хранилищем (db / files / ассоциативный массив / etc).
Хранилище содержит ключи, которые используются в coode, и значения, которые представляют собой тексты на определенном языке, которые поддерживает приложение.
Локализация - это процесс добавления новых значений на новом языке (например, в Испании), соответствующих ключам, в хранилище без вовлечения разработчика в этот процесс.
Например, у нас есть хранилище:
key | english | italian |
------+------------+-------------------+
title | Welcome | Benvenuto |
agree | I agree | Sono d'accordo |
thank | Thank you | Grazie |
Интернационализация он использует в коде что - то вроде confirm(t(agree));
вместо confirm("I agree");
или confirm("Sono d'accordo");
локализация - это добавить новый язык в нашей памяти, как:
key | english | italian | spanish |
------+------------+-------------------+------------------+
title | Welcome | Benvenuto | Bienvenido |
agree | I agree | Sono d'accordo | Estoy de acuerdo |
thank | Thank you | Grazie | Gracias |
и здесь разработчику не нужно обновлять код, функция перевода будет корректно переносить соответствующие тексты.