Как эффективно работать с PO-файлами gettext при небольшом редактировании больших текстовых значений - PullRequest
8 голосов
/ 03 июня 2010

Поиск советов и / или инструментов о том, как эффективно работать с PO-файлами gettext при небольшом редактировании больших значений msgid.

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

Вместо того, чтобы повторно переводить длинные сообщения (которые уже прошли процесс утверждения редакции) с нуля, наши переводчики возвращаются к резервным копиям своих PO-файлов и вручную ищут текст последней пары переводов msgid / msgstr, которую они затем сравните с текущими значениями msgid, чтобы увидеть, что изменилось, затем скопируйте и вставьте последний перевод, который они затем редактируют, чтобы отразить обновленное значение msgid.

Это много работы! Конечно, должен быть лучший способ обработки этого типа рабочего процесса?

Есть ли лучший способ архивации и поиска предыдущих переводов, которых больше нет в PO-файле? Одна идея, которая приходит на ум, - это сохранить уникальный идентификатор сообщения в тексте наших сообщений или в комментариях, предшествующих нашему сообщению, и использовать этот идентификатор для получения предыдущих пар перевода сообщения msgid / msgstr для просмотра. Или есть редакторы ПО или онлайн-сервисы, которые делают этот процесс более эффективным?

Спасибо, Malcolm

Ответы [ 2 ]

9 голосов
/ 26 сентября 2010

Я искал способ внести небольшие изменения в msgid, не нарушая существующие переводы - например, исправления опечаток в исходном тексте. Вот рецепт, который я только что разработал, который не касается веб-сайтов:

  1. Используйте msgen из GNU gettext для генерации po-файла с английского на английский:

    msgen project.pot >corrections.po

  2. Вручную отредактируйте msgstr s в "corrections.po", чтобы отразить исправления опечаток, сделанные в исходном тексте, поэтому у нас есть отображение от не исправленных к исправленным строкам. (Я не думал о том, как автоматизировать этот бит.)

  3. Для каждого «реального» перевода (например, ca.po): злоупотребление poswap из набора инструментов перевода (translate-toolkit в Ubuntu) для изменения msgids:

    poswap -i corrections.po -t ca.po -o ca.new.po

Это, похоже, приводит к потере комментариев к заголовку и устаревших строк из файлов GNU gettext po, но их ручное исправление - гораздо меньше работы, чем ручная настройка msgids в каждом переводе (и, вероятно, это легко можно было бы написать в сценарии).

(Очевидно, это следует использовать только в исключительных случаях, когда вы абсолютно уверены, что ни один из переводчиков не нуждается в возможности пересмотреть свои переводы.)

5 голосов
/ 03 июня 2010

Virtaal * Поддержка памяти переводов , вероятно, может помочь в этом. Если ваши оригинальные единицы находятся в памяти переводов, они будут отображаться (с различиями) в пределах определенного диапазона изменений (в зависимости от расстояния Левенштейна) Он по-прежнему будет содержать оригинальный (неизмененный) перевод, но по крайней мере исходный текст будет более легкодоступным, а различия выделены.

Я не уверен на 100%, но Pootle также может предложить веб-решение. Если вам нужна помощь, обратитесь в #pootle на FreeNode.

Более общее улучшение, конечно, состоит в том, чтобы разделить / сегментировать единицы как можно дальше.

...