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

На примере русского языка.

  1. В файл settings.py вписываем:
  2. Подготавливаем все фразы к переводу.
    Для этого в .py-файлах:

    а в шаблонах есть теги для перевода фраз и многострочного перевода:

    Лучше обходиться без начальных и оконечных пробелов, т.к. в противном случае перевод может не подцепиться.

    К сожалению, в каждом шаблоне нужно добавлять загрузку i18n, сразу после тега {% extends «layout.html» %}, почему-то разработчики джанго считают это фичей, видимо, потому что не пользуются).

    Перевод полей модели:

    Перевод полей форм:

  3. В корне проекта создаём папку locale
  4. Из корня проекта запускаем команду

    Команда генерирует файл django.po.
    Сначала идёт заголовок, в котором нет ничего интересного, за исключением следующих строк:

    По этому правилу образовываются формы слов русского языка во множественном числе.
    Дальше следуют пачки вида

    где первая строка — место, где встретилась фраза, помеченная для перевода, вторая строка — фраза, а третья — перевод, который надо вписать.
    Особый случай — переводы, зависящие от числа, к примеру, подходов:

    здесь для русского языка нужно задать три фразы — для значения переменной 1, 2 и 5.

  5. Скомплировать переводы

    По необходимости пункты 4-5 можно повторять, при этом уже введённые переводы не будут потеряны, если фразы, помеченные к переводу, не были удалены.

    Джанго определяет язык пользователя так (если не нашёл, то идёт дальше):

    1. Ищет ключ django_language в сессии пользователя
    2. Ищет в cookies
    3. Ищет в cookies
    4. Ищет Accept-Language в HTTP-заголовках, и пытается отыскать разрешённые в приложении (в переменной LANGUAGES) языки
    5. Использует значение переменной LANGUAGE_CODE

Для смены локали нужно следующее:

  1. В urls.py прописать url

    смена локали будет доступна по адресу /i18n/setlang/
  2. Где-нибудь в шаблоне определить форму:

Ссылка на официальную документацию по интернационализации django.

Локализация javascript в django

18 Responses so far.

  1. Ильшат:
    Спасибо за статью! Все по полочкам.
    Этот подход может помочь со склонением месяца при выводе даты?
    • bullgare:
      К сожалению, со склонениями я не разобрался пока (мне пока не надо было).
      Если кто посоветует — буду благодарен.
      Из банального — фразы для перевода писать с суффиксами, и переводить их и на английский тоже (чтобы убрать суффикс).
  2. Влад:
    Здравствуйте! У меня получается пустая форма для выбора языка. В settings.py список языков указан, но почему-то в форму не попадает. Что может быть не так?
    • bullgare:
      Не могу так сказать, лучше отдебажить.
      Ну или выложите здесь часть кода, которая не работает.
      У меня такого вроде не было
    • bullgare:
      Может быть вы не добавили ‘django.middleware.locale.LocaleMiddleware’ ?
  3. ManulCat:
    В некоторых случаях (nginx + uwsgi + django 1.4.5) может понадобится добавить в файл settings.py:

    LOCALE_PATHS = (
    ‘полный путь к каталогу locale проекта’,
    )

  4. msblast:
    Влад, нужно ещё в TEMPLATE_CONTEXT_PROCESSORS добавить
    ‘django.core.context_processors.i18n’.
  5. Selena:
    Добрый день! Если Вы заинтересованы в локализации web-ПО, ПО для персональных компьютеров, ПО для мобильных устройств либо иного вида программного обеспечения, я рекомендую Вам использовать этот инструмент на базе web: https://poeditor.com/ POEditor является интуитивным, хорошо проработанным инструментом, обладающим рядом полезных свойств, которые помогают организовать процесс управления переводом. Он поддерживает множество популярных форматов файлов и обладает собственным API, что обеспечивает лучшую автоматизацию. Желаю Вам больших успехов в Ваших проектах!
  6. Alex Laban:
    Здравствуйте,
    надеюсь, этот блог еще не заброшен :)

    у меня странная ситуация, не понимаю даже что и как гуглить.
    я изучаю джанго и интернационализация — первое дело.
    все сделал, как написано в мануалах. сделал файл (.po) с сообщениями. скомпилил его в .mo. делаю set_language, все отрабатывается, только вот мой .mo файл не грузится, то есть, мои переведенные сообщения не показываются. вместо моего .mo подгружается какой-то другой!!! этот другой файл мне не известен! я понятия не имею откуда он берется. и в этом файле часть сообщений переведена, а часть — нет.
    может быть у вас есть идея, как узнать, какой именно файл перевода подгружается джангой (с условием, что локаль одинаковая, то есть, ru)

    Заранее благодарен,
    Саша

  7. Alex Laban:
    ааа… все! сообразил!!
    у меня тут есть еще одна апликация (3rd party), у которой тоже есть своя локализация ru…
    тогда вопрос меняется ;)
    как «склеивать» мою и 3rd party локализации?
  8. Артём:
    Добрый день.
    Можете сделать видео как это все настроить правильно самого начала
  9. Kirill:
    и с чем работаете?
  10. Kirill:
    да просто интересно) а на гошечку перешли?
    • bullgare:
      Почему перешёл?
      Хороший язык, была возможность.
      Почему бы и нет.
      Он ещё и быстрый и простой.

LEAVE A COMMENT