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

Введение

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

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 и определяет форматы данных для данной локали.