14

有谁知道从 PO 文件中批量删除所有模糊翻译的方法。就像是:

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

4

3 回答 3

17

如果安装了 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

于 2015-02-20T18:10:47.160 回答
10

您可以使用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()

此脚本删除模糊翻译字符串 + 模糊标志,但保持未翻译的原始 msgid 完整。一些语言(ru、cz、...)有两个以上的复数形式,因此,我们检查 msgstr_plural['2']。列表索引必须是字符串。不要为此使用整数。

于 2012-03-01T21:25:08.447 回答
8

如果您安装了 GNU gettext,则可以使用此命令删除模糊消息:

msgattrib --no-fuzzy -o path/to/your/output/po/file path/to/your/input/po/file

于 2011-09-13T22:12:58.023 回答