commit 9aa43290dbe64f05c96a2a63c3c7fcd113cb6efa
Author: Georg Baum <[email protected]>
Date: Sun Dec 6 11:27:48 2015 +0100
Add option to skip null translations
he.po in branch contains a number of translations where the translation is
identical with the original text (e.g. for encoding names) which look
suspicios
to me. Therefore I did not want to merge these and leave the decision to the
translator. No information is lost, since these "translations" can easily be
recreated from the original texts by copy-paste.
diff --git a/development/tools/mergepo.py b/development/tools/mergepo.py
index 38d94bb..cacf0e4 100644
--- a/development/tools/mergepo.py
+++ b/development/tools/mergepo.py
@@ -59,9 +59,9 @@ def parse_msg(lines):
return polib.unescape(msg)
-def translate(msgid, msgstr_lines, po2, overwrite):
+def translate(msgid, msgstr_lines, po2, options):
msgstr = parse_msg(msgstr_lines)
- if overwrite:
+ if options.overwrite:
other = po2.find(msgid)
if not other:
return 0
@@ -77,6 +77,8 @@ def translate(msgid, msgstr_lines, po2, overwrite):
return 0
if not other.translated():
return 0
+ if options.nonnull and other.msgstr == other.msgid:
+ return 0
msgstr = other.msgstr
obsolete = (msgstr_lines[0].find('#~') == 0)
j = msgstr_lines[0].find('"')
@@ -93,15 +95,17 @@ def translate(msgid, msgstr_lines, po2, overwrite):
return 1
-def mergepo_polib(target, source, overwrite):
+def mergepo_polib(target, source, options):
changed = 0
po1 = polib.pofile(target)
po2 = polib.pofile(source)
- if overwrite:
+ if options.overwrite:
for entry in po1.entries():
other = po2.find(entry.msgid, include_obsolete_entries=True)
if not other:
continue
+ if options.nonnull and other.msgstr == other.msgid:
+ continue
if other.translated() and other.msgstr != entry.msgstr:
entry.msgstr = other.msgstr
changed = changed + 1
@@ -110,6 +114,8 @@ def mergepo_polib(target, source, overwrite):
other = po2.find(entry.msgid, include_obsolete_entries=True)
if not other:
continue
+ if options.nonnull and other.msgstr == other.msgid:
+ continue
if other.translated():
entry.msgstr = other.msgstr
changed = changed + 1
@@ -118,7 +124,7 @@ def mergepo_polib(target, source, overwrite):
return changed
-def mergepo_minimaldiff(target, source, overwrite):
+def mergepo_minimaldiff(target, source, options):
changed = 0
po2 = polib.pofile(source)
target_enc = polib.detect_encoding(target)
@@ -149,7 +155,7 @@ def mergepo_minimaldiff(target, source, overwrite):
msgstr_lines.append(line)
else:
in_msgstr = False
- changed = changed + translate(msgid, msgstr_lines, po2,
overwrite)
+ changed = changed + translate(msgid, msgstr_lines, po2,
options)
newlines.extend(msgstr_lines)
msgstr_lines = []
msgid = ''
@@ -167,7 +173,7 @@ def mergepo_minimaldiff(target, source, overwrite):
newlines.append(line)
if msgid != '':
# the file ended with a msgstr
- changed = changed + translate(msgid, msgstr_lines, po2, overwrite)
+ changed = changed + translate(msgid, msgstr_lines, po2, options)
newlines.extend(msgstr_lines)
msgstr_lines = []
msgid = ''
@@ -180,7 +186,7 @@ def mergepo_minimaldiff(target, source, overwrite):
return changed
-def mergepo(target, source, overwrite):
+def mergepo(target, source, options):
if not os.path.exists(source):
sys.stderr.write('Skipping %s since %s does not exist.\n' % (target,
source))
return
@@ -189,10 +195,11 @@ def mergepo(target, source, overwrite):
return
sys.stderr.write('Merging %s into %s: ' % (source, target))
try:
- changed = mergepo_minimaldiff(target, source, overwrite)
+ changed = mergepo_minimaldiff(target, source, options)
+ sys.stderr.write('Updated %d translations with minimal diff.\n' %
changed)
except:
- changed = mergepo_polib(target, source, overwrite)
- sys.stderr.write('Updated %d translations.\n' % changed)
+ changed = mergepo_polib(target, source, options)
+ sys.stderr.write('Updated %d translations using polib.\n' % changed)
def main(argv):
@@ -208,6 +215,8 @@ yet in the target .po files are not updated.""", usage =
"Usage: %prog [options]
help="language for which translations are merged (if
missing, all languages are merged)")
parser.add_option("-o", "--overwrite", action="store_true",
dest="overwrite", default=False,
help="overwrite existing target translations with source
translations (if missing, only new translations are added)")
+ parser.add_option("-n", "--nonnull", action="store_true", dest="nonnull",
default=False,
+ help="do not update target translations with source
translations that are identical to the untranslated text)")
(options, args) = parser.parse_args(argv)
if len(args) <= 1:
parser.print_help()
@@ -222,13 +231,13 @@ yet in the target .po files are not updated.""", usage =
"Usage: %prog [options]
if options.language:
name = options.language + '.po'
- mergepo(os.path.join(podir1, name), os.path.join(podir2, name),
options.overwrite)
+ mergepo(os.path.join(podir1, name), os.path.join(podir2, name),
options)
else:
for i in os.listdir(podir1):
(base, ext) = os.path.splitext(i)
if ext != ".po":
continue
- mergepo(os.path.join(podir1, i), os.path.join(podir2, i),
options.overwrite)
+ mergepo(os.path.join(podir1, i), os.path.join(podir2, i), options)
return 0