Upgrade to Pro — share decks privately, control downloads, hide ads and more …

One l10n story

One l10n story

A short talk about working experience in Django website localization.

4f2f927946ef77b02c35acce6a512381?s=128

AlexDobrushskiy

November 12, 2014
Tweet

Transcript

  1. Internationalization – i18n vs Localization – l10n

  2. С чего все начиналось • Много текстового контента • Все

    реализовано на шаблонах • Сайт переведен на 23 языка • Для одной страницы – 23 шаблона(!) • Новости тоже были в виде hardcoded-шаблонов
  3. None
  4. Не говоря о техническом несовершенстве, имелись следующие минусы • Контент-менеджеру

    (КМ) нужно ориентироваться во множестве шаблонов • КМ должен знать синтаксис Django-шаблонов, а также HTML, CSS и JS, чтобы ничего не сломать • КМ должен уметь пользоваться VCS • Обновление контента невозможно без админа
  5. Традиционный способ локализации GNU gettext toolchain: • Функция gettext() •

    Словари
  6. Gettext/ugettext – оборачиваются все строковые константы

  7. Шаблонные теги trans и blocktrans

  8. Management-команды • Makemessages – генерирует *.po – словари • Переводчик

    переводит словари • Compilemessages компилирует переводы в *.mo – файлы
  9. Po-файл • Portable object – человеко- читаемый файл • Набор

    пар строк MSGID: MSGSTR • Пригоден для перевода переводчиком • Кроме переводов, содержит комментарии и служебные отметки • Существуют удобные утилиты (PoEdit) • Пригоден для редактирования в текстовом редакторе
  10. Mo-файлы • Machine object - бинарный файл • Скомпилированный Po-файл

  11. Нужно было облегчить жизнь контент- менеджеров • Тексты хранить в

    БД • Перевод всех текстов на 23 языка • Минимизация расходов на перевод • Минимум действий контент-менеджера
  12. Как поступить? • Для каждого текста можно хранить source html,

    и Django-шаблон для перевода
  13. None
  14. Как разбить HTML на фразы для перевода? • Большие куски

    – плохо (расходы на переводчика) • Маленькие куски (слово) – плохо. «Пословный перевод». • Предложения. Уже лучше. • Абзац/блочный тег - оптимально
  15. Translate Toolkit • https://github.com/translate/translate • Умеет конвертировать HTML в PO,

    достаточно разумно • Имеет еще пару десятков(!) конвертеров из различных форматов в PO и обратно • То, что нужно. • Но есть баги
  16. Итоговый алгоритм • Добавление/изменение текста в БД • Генерация шаблона

    • Перед вызовом makemessages пишем все шаблоны во временный файл • В итоге – весь контент оказывается в словарях и пригоден для перевода
  17. Дальнейшие удобства контент-менеджера • Makemessages запускается по кнопке из админки

    • Выгрузка словарей в CSV, загрузка готовых переводов • Можно загрузить словарь для конкретной страницы
  18. Вопросы? 