Does anyone know a method to mass delete all fuzzy translations from a PO file. Something like:
if #, fuzzy == TRUE Then SET msgstr="" AND REMOVE #, fuzzy
If gettext is installed you can use the msgattrib command to accomplish this:
msgattrib --clear-fuzzy --empty -o /path/to/output.po /path/to/input.po
The full documentation for msgattrib is here:
https://www.gnu.org/software/gettext/manual/html_node/msgattrib-Invocation.html
You can remove fuzzy strings with polib, which is THE library in Python for working with gettext po files:
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()
This script removes the fuzzy translation strings + fuzzy flags, but keeps the untranslated original msgids intact. Some languages (ru, cz, ...) have more than two plural forms, therefore, we check on msgstr_plural['2']. The list index has to be a string. Don't use integers for that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With