清除PO文件中所有模糊条目

14

有没有人知道一种批量删除 PO 文件中所有模糊翻译的方法。类似于:

如果 #,fuzzy == TRUE,则将 msgstr="" 并 REMOVE #,fuzzy


我认为你需要更详细地说明。 - Tom Zych
你漏掉了哪些细节,Tom? - Martijn Burger
也许这些额外的信息会有所帮助:http://www.gnu.org/s/hello/manual/gettext/PO-Files.html - Martijn Burger
这个问题似乎有点含糊不清,但我不确定是否应该标记它,所以我问了一下。我不懂gettext,但是懂的人应该能够帮助你。看起来它们应该使用gettext进行操作,所以我不愿意编写Python脚本来完成它。 - Tom Zych
1
将近5年过去了,但您是否考虑在PO生成期间禁用模糊匹配呢?--no-fuzzy-matching选项可以实现msgmerge的该功能。 - dfherr
显示剩余2条评论
3个回答

20

--empty似乎是这个的一个新选项。今天,这应该是被接受的答案。谢谢! - Simon Steinberger
好的,这给了我一个“无效的多字节序列”错误,即使PO文件已经设置为UTF8编码... - Simon Steinberger
小心。看起来msgid=""中包含的头部/元数据可以被标记为模糊。然后猜猜如果你运行上述命令会发生什么。是的-这整个东西中不包括大脑.... - undefined

11
你可以使用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]。在旧版本的polib中,对于msgstr_plural的索引是一个字符串,所以这将变成msgstr_plural ['2']


1
完全重写的答案,应该正好解决您正在寻找的问题。您可能已经解决了这个问题,但也许其他人会遇到相同的问题。 - Simon Steinberger

8
如果您已经安装了GNU gettext,则可以使用以下命令来删除模糊的消息:

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

请注意,此命令将从输入po文件中删除所有模糊的消息,并将输出结果写入指定的输出po文件。

1
这是关于编程的内容,翻译成中文如下:这将删除模糊元素,但问题是为了设置空的msgstr,我也在寻找解决方案,这不是正确的方法。 - Svisstack
那么,您觉得用 msgattrib --no-fuzzy 然后跟上模板文件的 msgmerge 呢?这样应该可以从模板中获取空消息。 - Mikko Rantalainen
这将删除模糊条目。OP想要清除模糊翻译并移除模糊标志,但保留条目。 - Sam Kauffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接