Интернационализация и локализация

Введение

Целью интернационализации и локализации является обеспечение возможности отдельному веб приложению предоставлять свой контент на языке и в формате, понятном целевой аудитории.

Django обладает полным набором средств для решения этой задачи: перевод текста, форматирование даты, времени и чисел и поддержка часовых поясов.

По существу, Django обеспечивает две вещи:

  • Он позволяет разработчикам и авторам шаблонов указывать какие именно части их приложений должны быть переведены или отформатированы под используемые языки и традиции.
  • Он использует эти метки для локализации веб приложений под конкретного пользователя, учитывая его настройки.

Перевод зависит от целевого языка, а форматирование зависит от целевой страны. Эта информация предоставляется браузерами в заголовке Accept-Language. Тем не менее, информацию о часовом поясе не так просто получить.

Терминология

Слова «интернационализация» и «локализация» часто вызывают путаницу. Сейчас всё будет понятно:

интернационализация
Подготовка программного обеспечения для локализации. Обычно выполняется разработчиками.
локализация
Создание переводов и локальных форматов. Обычно выполняется переводчиками.

Подробности можно найти в ЧаВо W3C по интернационализации веба, в Википедии или в документации GNU gettext.

Предупреждение

Перевод и форматирование контролируются параметрами USE_I18N and USE_L10N соответственно. Тем не менее, оба функционала участвуют в интернационализации и локализации. Имена параметров являются не слишком удачным результатом развития Django.

Рассмотрим ещё несколько терминов, которые помогут нам общаться на понятном языке:

locale name
Имя локали, либо спецификация языка в виде ll или комбинация языка и спецификации страны в виде ll_CC. Примеры: it, de_AT, es, pt_BR. Языковая часть всегда указывается в нижнем регистре, а часть, определяющая страну, – в верхнем регистре. Разделителем является символ подчёркивания.
language code
Представляет имя языка. Используя этот формат, браузеры отправляют имена языков, контент на которых они предпочитают принять, в HTTP заголовке Accept-Language. Примеры: it, de-at, es, pt-br. Коды языков обычно указываются в нижнем регистре, но HTTP заголовок Accept-Language является регистронезависимым. Разделителем является символ тире.
message file
Файл сообщения является обычным текстовым файлом, представляющим единственный язык, который содержит все доступные строки перевода и правила их отображения для данного языка. Файлы сообщений имеют расширение .po.
translation string
Строка, которая может быть переведена.
format file
Файл формата является модулем языка Python и определяет форматы данных для данной локали.