Много ответов, много правильной информации, но мой ответ - немного другая точка зрения.
Интернационализация - это когда разработчик не имеет в коде прямых сообщений / сообщений об ошибках / названий кнопок / заголовков ярлыков / и т.д. на определенном языке, но имеет ключ , который передается функция перевода,
и функция перевода в соответствии с локалью текущего пользователя будет возвращать окончательный текст на английском языке / франция / и т. д.
Функция перевода работает с хранилищем (дБ / файлы / ассоциативный массив / и т. Д.).
Хранилище содержит ключей , которые используются в 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 |
и здесь разработчику не нужно обновлять код, функция перевода будет корректно переносить соответствующие тексты.