Django i18n: рекомендуемый размер и форматирование для блоков {% blocktrans%}?

Я только начинаю с интернационализации Django и пытаюсь понять лучшие практики использования {% blocktrans %}. Предпочтительно ли использовать один {% blocktrans %} для каждого абзаца, или мне нужно иметь один большой {% blocktrans %}, который содержит много абзацев?

У вас есть один большой {% blocktrans %}, и мой шаблон выглядит более чистым, но я обеспокоен тем, что:

  • он вызывает HTML-теги (например, <p>...</p>), чтобы стать частью строки перевода
  • Если я изменю одну вещь в одной части моего огромного блока, изменится msgid, что, похоже, может повлиять на другие абзацы. Если у меня меньше блоков, изменения будут более изолированными (я полагаю).
  • Если я сделаю изменение форматирования, например добавление/удаление новой строки между абзацами, это изменит значение msgid.

Мне также интересно, как форматировать. Существуют ли какие-либо осложнения, связанные с разрывами строк внутри {% blocktrans %}? Или иметь ведущие пространства? например:.

{% blocktrans %}
    You have {{ num_messages }} messages.
    Another sentence.
{% blocktrans %}

Любые рекомендации приветствуются.

Ответ 1

Несколько небольших блоков {% blocktrans %} полезны по разным причинам:

  • Каждая переводимая строка заканчивается в файлах перевода, и эти файлы должны быть переведены людьми, говорящими на этом языке. Им не нужно иметь дело с правильностью HTML-тегов, но они должны чисто перевести несколько предложений на этот язык. Незначительная разметка в порядке, но не HTML всей страницы.

    Вы также можете думать об этом так: чем меньше разметка в переводимых строках, тем меньше шансов на ошибки переводчиков (у которых может быть или не может быть технический фон).

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

Итак, чтобы ответить на ваш вопрос: лучше всего выбрать тег blocktrans для каждого абзаца. Если вы в конечном итоге меняете абзац, тогда только этот параграф должен быть снова проверен переводчиком.

Относительно пробелов и новых строк: по умолчанию они будут переведены в файлы перевода PO. В Django 1.7 блоктранс будет иметь параметр trimmed, который удаляет пробелы и новые строки (источник):

Эта опция удаляет символы новой строки с начала и конца содержимого тега {% blocktrans%}, заменяет любые пробелы в начале и конце строки и объединяет все строки в один, используя пробельный символ для разделения их. Это весьма полезно для отступов содержимого тега {% blocktrans%}, без ввода символов отступа в соответствующей записи в файле PO, что упрощает процесс перевода.