Могу ли я автоматически обновлять msgid в .po файлах gettext для тривиальных изменений текста? - PullRequest
6 голосов
/ 27 ноября 2011

При использовании gettext исходный (обычно английский) текст сообщений служит ключом сообщения ("msgid") для переводов.Это означает, что каждый раз, когда изменяется исходный текст, сообщение должно обновляться во всех файлах .po.

Для реальных изменений текста это, очевидно, неизбежно, поскольку переводчик должен обновить перевод.

Однако, если изменение оригинала не меняет его значения, повторный перевод является излишним (например, изменение пунктуации, изменения пробела или исправление орфографической ошибки).

Есть ли способавтоматически обновлять .po файлы в этом случае?

Я пытался использовать xgettext & msgmerge (с включенным нечетким соответствием), но иногда нечеткое сопоставление завершается ошибкой, плюс это приводит к появлению множества уродливых флагов "#, fuzzy".

Примечание : есть похожий вопрос: Как эффективно работать с PO-файлами gettext при небольшом редактировании больших текстовых значений Однако речь идет о больших строках,таким образом, о более конкретной проблеме.

Ответы [ 2 ]

2 голосов
/ 10 мая 2012

У меня была именно эта проблема при внесении небольших изменений в проект django.Я делаю следующее:

  1. Изменить сообщение в коде.
  2. Запустите поиск и замену во всех файлах перевода ("django.po"), заменив старое сообщение (msgid)с новым.
  3. Запустите django-admin makemessages.

Если я все сделал правильно, последний шаг излишний (т. е. вы сделали изменение для gettext).django использует утилиты gettext, поэтому не имеет значения, как вы создаете файлы сообщений.

Я нахожу и заменяю так: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g' Предоставлено http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

2 голосов
/ 28 ноября 2011

Один из способов избежать этой проблемы - оставить msgids в покое, иметь .po-файл для исходного языка и исправить его внутри.

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

...