Я разрабатываю многоязычное веб-приложение на PHP, и у меня есть длинные (-ish) тексты, которые мне нужно перевести с помощью gettext. Это шаблоны электронной почты (обычно короткие, но все же в несколько строк) и части шаблонов представления (более длинные описательные блоки текста). Эти тексты будут включать в себя несколько простых HTML (например, выделение жирным шрифтом / курсивом, вероятно, ссылка здесь или там). Шаблоны - это PHP-скрипты, вывод которых фиксируется.
Проблема в том, что gettext кажется очень неуклюжим для обработки длинных текстов. Более длинные тексты, как правило, будут иметь больше изменений со временем, чем короткие тексты - я могу либо изменить msgid и обязательно обновить его во всех переводах (может быть много работы и очень подвержен ошибкам, когда msgid длинный), или я могу сохранить msgid неизменен и изменяет только переводы (что могло бы ввести в заблуждение устаревшие тексты в шаблонах). Кроме того, я видел совет против включения HTML в строки gettext, но избегая его, можно было бы разбить один естественный фрагмент текста на множество кусков, что станет еще большим кошмаром для перевода и повторной сборки, и я также видел совет против ненужное разбиение строк gettext на отдельные msgids.
Другой подход, который я вижу, состоит в том, чтобы вообще игнорировать gettext для этих более длинных текстов и отделять эти блоки во внешних подшаблонах для каждой локали и просто включать один для текущей локали. Недостатком является то, что я разделяю усилия по переводу между файлами getpoxt .po и отдельными шаблонами, расположенными в совершенно другом месте.
Поскольку это приложение будет использоваться в качестве отправной точки для других приложений в будущем, я пытаюсь найти наилучший подход на долгосрочную перспективу. Мне нужен совет для наилучшей практики в таких сценариях. Как вы реализовали подобные случаи? Что получилось, а что оказалось плохой идеей?
Ответы:
Я наткнулся на подобную проблему не так давно (см. Https://stackoverflow.com/questions/8288050/can-i-automatics-update-msgids-in-gettexts-po-files-for-trivial-text-change ).
В основном, есть два варианта:
msgmerge
Однако нечеткое сопоставление, как правило, по-прежнему сопоставляет правильный исходный текст со старым переводом, поэтому обычно старый перевод будет доступен переводчику.источник
Это то, что вы могли бы легко автоматизировать, что делает его менее подверженным ошибкам и менее трудоемким.
источник