Для того чтобы локализовать сценарий, необходима «локаль» (locale). Это совокупность значений, определяющих язык, регион, набор символов, кодировку, формат даты и денежной единицы. Например, дата может быть представлена в таком виде: DD/MM-YYYYmra в таком: MM/DD/YYYY. Идея состоит в том, что при переключении на другую локаль все части программы, занимающиеся выводом, должны переключиться на другой язык. Локаль можно себе представить как особого рода базу данных, содержащую информацию, необходимую для отображения и форматирования сообщений. Каждому языку, поддерживаемому приложением, поставлена в соответствие одна такая «база данных», и, выбирая из них, программа может «представляться» на разных языках.
Поддержка родных языков
Поддержка родных языков (Native Language Support, NLS) достигается путем написания процедур интернационализации и включения поддержки локализации. NLS является конечной целью, достигаемой через интернационализацию и локализацию и обозначает способность сценария поддерживать родные языки пользователей.
Приложение, выполняемое в интернациональной среде, не должно содержать встроенных предположений относительно:
♦ Специфических для локали и культуры соглашений
♦ Сообщений пользователей на родных языках
• Поддержки преобразования кода
• Поддержки метода ввода
Эта информация должна быть определена во время выполнения приложения. NLS обеспечивает эти возможности и основу для поддержки новых языков и наборов кодов. В результате обеспечивается перенос программ через границы национальных языков и локалей.
Основания для интернационализации
Хотя важна не в каждом сценарии, есть ряд приложений, для которых она необходима. Например, покупатели в сетевом магазине скорее купят продукт, представленный на их родном языке, чем на том, который им незнаком.
Аналогично, если мы пишем сценарии РНР и программы, доступные как open source или бесплатные, потенциальные пользователи пожелают приспособить их к своему сайту и своей культуре. Они потребуют, чтобы внешний вид и язык сценария соответствовали их сайту; следовательно, наш сценарий должен быть легко настраиваемым как по внешнему виду, так и по языку. В РНР есть необходимая инфраструктура для поддержки il8n - он поддерживает условное включение файлов (каждый файл может содержать свой язык, как мы увидим далее) и поддерживает библиотеку Gettext.
Почему же так трудно перевести содержимое веб-сайта на другой язык? Нельзя ли просто скопировать сценарий в другой файл, а затем перевести текст? Ответ: потому что такое решение не будет хорошим. Трудно поддерживать синхронность двух или более версий. Процедура усложняется, поскольку переводчики забывают исправить ошибки, обнаруженные создателями исходного документа. Затраты на связь резко возрастают, когда приходится поддерживать более трех или четырех языков. В конечном счете, появятся несколько версий одной и той же программы, которые будут выполняться не вполне идентично.