有没有人知道一种批量删除 PO 文件中所有模糊翻译的方法。类似于:
如果 #,fuzzy == TRUE,则将 msgstr="" 并 REMOVE #,fuzzy
有没有人知道一种批量删除 PO 文件中所有模糊翻译的方法。类似于:
如果 #,fuzzy == TRUE,则将 msgstr="" 并 REMOVE #,fuzzy
msgattrib的完整文档在此处: https://www.gnu.org/software/gettext/manual/html_node/msgattrib-Invocation.htmlmsgattrib --clear-fuzzy --empty -o /path/to/output.po /path/to/input.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']
。
请注意,此命令将从输入po文件中删除所有模糊的消息,并将输出结果写入指定的输出po文件。msgattrib --no-fuzzy -o path/to/your/output/po/file path/to/your/input/po/file
msgattrib --no-fuzzy
然后跟上模板文件的 msgmerge
呢?这样应该可以从模板中获取空消息。 - Mikko Rantalainen
--no-fuzzy-matching
选项可以实现msgmerge的该功能。 - dfherr