Удаление всех нечетких записей файла PO - PullRequest
10 голосов
/ 10 сентября 2011

Кто-нибудь знает метод массового удаления всех нечетких переводов из PO-файла. Что-то вроде:

if #, fuzzy == TRUE Then SET msgstr = "" AND REMOVE #, fuzzy

Ответы [ 3 ]

12 голосов
/ 20 февраля 2015

Если установлен gettext, вы можете использовать команду msgattrib для этого:

msgattrib --clear-fuzzy --empty -o /path/to/output.po /path/to/input.po

Полная документация для msgattrib находится здесь:

https://www.gnu.org/software/gettext/manual/html_node/msgattrib-Invocation.html

6 голосов
/ 02 марта 2012

Вы можете удалить нечеткие строки с помощью polib , которая является библиотекой в ​​Python для работы с файлами gettext po:

import os, polib
for dirname, dirnames, filenames in os.walk('/path/to/your/project/'):
    for filename in filenames:
        try: ext = filename.rsplit('.', 1)[1]
        except: ext = ''
        if ext == 'po':
            po = polib.pofile(os.path.join(dirname, filename))
            for entry in po.fuzzy_entries():
                entry.msgstr = ''
                if entry.msgid_plural: entry.msgstr_plural['0'] = ''
                if entry.msgid_plural and '1' in entry.msgstr_plural: entry.msgstr_plural['1'] = ''
                if entry.msgid_plural and '2' in entry.msgstr_plural: entry.msgstr_plural['2'] = ''
                entry.flags.remove('fuzzy')
            po.save()

Этот скрипт удаляет нечеткие строки перевода + нечеткие флаги, но сохраняет непереведенные исходные сообщения нетронутыми. Некоторые языки (ru, cz, ...) имеют более двух множественных форм, поэтому мы проверяем msgstr_plural ['2']. Индекс списка должен быть строкой. Не используйте для этого целые числа.

6 голосов
/ 14 сентября 2011

Если у вас установлен GNU gettext, вы можете использовать эту команду для удаления нечетких сообщений:

msgattrib --no-fuzzy -o path / to / your / output / po / путь к файлу / to / your / input / po / file

...