Перевод более длинных текстов (просмотр и шаблоны электронной почты) с помощью gettext

9

Я разрабатываю многоязычное веб-приложение на PHP, и у меня есть длинные (-ish) тексты, которые мне нужно перевести с помощью gettext. Это шаблоны электронной почты (обычно короткие, но все же в несколько строк) и части шаблонов представления (более длинные описательные блоки текста). Эти тексты будут включать в себя несколько простых HTML (например, выделение жирным шрифтом / курсивом, вероятно, ссылка здесь или там). Шаблоны - это PHP-скрипты, вывод которых фиксируется.

Проблема в том, что gettext кажется очень неуклюжим для обработки длинных текстов. Более длинные тексты, как правило, будут иметь больше изменений со временем, чем короткие тексты - я могу либо изменить msgid и обязательно обновить его во всех переводах (может быть много работы и очень подвержен ошибкам, когда msgid длинный), или я могу сохранить msgid неизменен и изменяет только переводы (что могло бы ввести в заблуждение устаревшие тексты в шаблонах). Кроме того, я видел совет против включения HTML в строки gettext, но избегая его, можно было бы разбить один естественный фрагмент текста на множество кусков, что станет еще большим кошмаром для перевода и повторной сборки, и я также видел совет против ненужное разбиение строк gettext на отдельные msgids.

Другой подход, который я вижу, состоит в том, чтобы вообще игнорировать gettext для этих более длинных текстов и отделять эти блоки во внешних подшаблонах для каждой локали и просто включать один для текущей локали. Недостатком является то, что я разделяю усилия по переводу между файлами getpoxt .po и отдельными шаблонами, расположенными в совершенно другом месте.

Поскольку это приложение будет использоваться в качестве отправной точки для других приложений в будущем, я пытаюсь найти наилучший подход на долгосрочную перспективу. Мне нужен совет для наилучшей практики в таких сценариях. Как вы реализовали подобные случаи? Что получилось, а что оказалось плохой идеей?

lanzz
источник
Связанный: stackoverflow.com/questions/2966026/…
sleske

Ответы:

3

Я наткнулся на подобную проблему не так давно (см. Https://stackoverflow.com/questions/8288050/can-i-automatics-update-msgids-in-gettexts-po-files-for-trivial-text-change ).

В основном, есть два варианта:

  1. Делайте это так, как предполагается использовать gettext: используйте оригинальные тексты, такие как msgid, HTML и все. Тогда каждое изменение исходного текста приведет к аннулированию всех переводов. msgmergeОднако нечеткое сопоставление, как правило, по-прежнему сопоставляет правильный исходный текст со старым переводом, поэтому обычно старый перевод будет доступен переводчику.
  2. Вместо того, чтобы использовать исходный текст как msgid, используйте некоторый синтетический идентификатор (например, EMAIL_TEMPLATE_NEWSLETTER_START). Таким образом, идентификаторы никогда не меняются. Оригинальные (возможно, английские) тексты будут просто еще одним переводом для gettext. Основные недостатки: 1) Вы должны отдельно отслеживать, какие переводы актуальны; 2) Некоторые инструменты gettext могут не справиться с этим (переводчикам могут понадобиться специальные инструменты).
sleske
источник
1

измените msgid и убедитесь, что обновляете его во всех переводах (может быть много работы и очень подвержен ошибкам, когда msgid длинный)

Это то, что вы могли бы легко автоматизировать, что делает его менее подверженным ошибкам и менее трудоемким.

Дарио Хамиди
источник