|
Оглавление
|
После того как вы подготовили перевод, или вы просто желаете использовать переводы, которые уже включены в Django, следует активировать механизм переводов для вашего приложения. С точки зрения разработчика Django имеет очень гибкую модель принятия решения о том, какой язык следует использовать: для всего проекта, для отдельного пользователя или для обоих случаев. Для определения языковой настройки на уровне всего проекта установите LANGUAGE_CODE в вашем файле настроек. Django использует эту настройку в случае, если никаких других переводов не найдено. Если требуется запустить Django так, чтобы он использовал ваш родной язык и для этого языка есть файл переводов, просто установите LANGUAGE_CODE. Если вы хотите позволить каждому отдельному пользователю указывать его собственные языковые настройки, используйте LocaleMiddleware. Пакет LocaleMiddleware позволяет осуществлять выбор языка, основываясь на данных из запроса. Он настраивает содержимое страницы для каждого пользователя. Для использования LocaleMiddleware добавьте django.middleware.locale.LocaleMiddleware в параметр MIDDLEWARE_CLASSES. Так как порядок объявления пакетов в этом параметре имеет значение, вы должны руководствоваться следующими правилами:
Например, ваш параметр MIDDLEWARE_CLASSES может выглядеть так: MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware' )
Пакет LocaleMiddleware пытается определить языковую настройку пользователя по следующему алгоритму:
В каждом из шагов ожидается, что языковая настройка будет указана в стандартном формате в виде строки. Например, бразильский вариант португальского языка имеет обозначение pt-br. Если базовый язык доступен, а вариант нет, Django использует базовый язык. Например, если пользователь указал de-at (австрийский вариант немецкого языка), но для Django доступен только немецкий, значит будет использован немецкий язык. Могут быть выбраны только те языки, которые указаны в параметре LANGUAGES. Таким образом, с помощью этого параметра можно ограничивать набор языков, поддерживаемых приложением: LANGUAGES = (
('de', _('German')),
('en', _('English')),
)
Данный пример ограничивает набор языков доступный для автоматического выбора немецким и английским языками (а также любыми их вариантами, такими как de-ch или en-us).
Если вы определяете свой LANGUAGES, можно
помечать названия языков в качестве строк подлежащих
переводу. Но в этом случае следует использовать функцию-заглушку
Решением этой проблемы будет использование функции-заглушки, например так: _ = lambda s: s
LANGUAGES = (
('de', _('German')),
('en', _('English')),
)
Такой подход позволяет утилите
bin/make-messages.py находить такие строки
для перевода, но перевод не будет осуществляться налету. Таким
образом вам потребуется не забыть сменить язык в
настоящей функции
Пакет LocaleMiddleware может только выбирать языки для которых Django предоставляет перевод. Если вы желаете предоставить перевод для вашего приложения, который ещё не входит в набор исходных текстов Django, вы пожелаете предоставить как минимум базовый перевод для данного языка. Например, Django использует технические идентификаторы сообщений для перевода форматов даты и времени — вам потребуются хотя бы этот перевод для того, чтобы система работала корректно. Хорошей отправной точкой будет копирование .po файла для английского языка и перевод хотя бы технических сообщений, а может ещё и сообщений модуля проверки. Технические идентификаторы сообщений хорошо распознаются, они написаны заглавными буквами. Не следует переводить идентификаторы сообщений, просто предоставьте корректный вариант для английского значения. Например, для DATETIME_FORMAT (или DATE_FORMAT или TIME_FORMAT, это будет форматированная строка, которую вы желаете использовать для вашего языка. Формат идентичен формату строки, используемому шаблонным тегом {{ now }}. После того, как модуль LocaleMiddleware определит языковую настройку, он делает её доступной через request.LANGUAGE_CODE для каждого объекта запроса. Можно обращаться к его значению в коде ваших представлений. Простой пример: def hello_world(request, count):
if request.LANGUAGE_CODE == 'de-at':
return HttpResponse("You prefer to read Austrian German.")
else:
return HttpResponse("You prefer to read another language.")
Следует отметить, что в случае статических переводов (т.е., без использования пакета) язык определён в settings.LANGUAGE_CODE, а при использовании динамического перевода (т.е., через пакет) — в request.LANGUAGE_CODE. |
Увидели ошибку?
Выделите её мышкой и нажмите
-
Обработано:
1049
49
130
71
Версия книги
1.0
2.0
Версия 2.0 в процессе перевода!
Мой луч
Многообразие света
Полезное
Актуальные вакансии,
Python работа
для python-разработчиков.
Скачать в формате
CHM от 2 сентябряЗаказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта. Чем чаще заказываете — тем больше перевожу. Русская группа
Ускорить процесс перевода!
R130494980980
Z425285133788 E112528079659 U327380922061 Книга помогла реализовать:
|
| © 2008-2009 Ruslan Popov @ gmail.com | Powered by Django 1.1 beta 1 SVN-11114 |