From 5a3fcbd65be336d7d12686ffe400037ab7d05a60 Mon Sep 17 00:00:00 2001 From: Martin Hawlisch Date: Thu, 1 Sep 2005 10:48:39 +0000 Subject: [PATCH] * src/po/check_po: Support for multiple files as command line arguments; untranslated strings dont need mismatch tests svn: r5162 --- gramps2/ChangeLog | 4 + gramps2/src/po/check_po | 214 +++++++++++++++++++++++----------------- 2 files changed, 127 insertions(+), 91 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index fa011a19f..216f1f798 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,7 @@ +2005-09-01 Martin Hawlisch + * src/po/check_po: Support for multiple files as command line + arguments; untranslated strings dont need mismatch tests + 2005-08-31 Don Allingham * src/plugins/RelCalc.py: use PeopleModel instead of ListModel, check to the person being compared to him/herself diff --git a/gramps2/src/po/check_po b/gramps2/src/po/check_po index 4941052ed..4116e992e 100755 --- a/gramps2/src/po/check_po +++ b/gramps2/src/po/check_po @@ -6,98 +6,130 @@ MSGSTR = 2 import sys import re -f = open(sys.argv[1],"r") +all_total = {} +all_untranslated = {} +all_percent_s = {} +all_named_s = {} +all_bnamed_s = {} +all_coverage = {} -mode = NONE +args = sys.argv +while len(args) > 1: + args = args[1:] -string_map = {} -current_msgid = "" -current_msgstr = "" - -for line in f.readlines(): - data = line.split(None,1) - if mode == NONE: - if len(data) > 0 and data[0] == "msgid": - mode = MSGID - - current_msgid = data[1].split('"')[1] - elif mode == MSGID: - if data[0][0] == '"': - current_msgid += line.split('"')[1] - elif data[0] == "msgstr": - mode = MSGSTR - current_msgstr = data[1].split('"')[1] - elif mode == MSGSTR: - if line == "" or line[0] == "#": - mode = NONE - string_map[current_msgid] = current_msgstr - elif len(data) > 0 and data[0][0] == '"': - current_msgstr += line.split('"')[1] - -f.close() - -named = re.compile('%\((\w+)\)\d*s') -bnamed = re.compile('%\((\w+)\)\d*[^sd]') - -total = len(string_map) -untranslated = 0 -percent_s = 0 -percent_s_list = [] -named_s = 0 -named_s_list = [] -bnamed_s = 0 -bnamed_s_list = [] - - -for i in string_map.keys(): - if string_map[i] == "": - untranslated += 1 - - cnt1 = i.count('%s') - cnt2 = string_map[i].count('%s') - if cnt1 != cnt2: - percent_s += 1 - percent_s_list.append(i) - - list1 = named.findall(i) - list2 = named.findall(string_map[i]) - if len(list1) != len(list2): - percent_s += 1 - percent_s_list.append(i) - - list1.sort() - list2.sort() - if list1 != list2: - named_s += 1 - named_s_list.append(i) - - match = bnamed.match(string_map[i]) - if match: - bnamed_s +=1 - bnamed_s_list.append(i) - -coverage = (1.0 - (float(untranslated)/float(total))) * 100 - -print "Total: %d" % total -print "Untranslated: %d" % untranslated -print "%%s mismatches: %d" % percent_s -print "%%()s mismatches: %d" % named_s -print "%%() missing s/d: %d" % bnamed_s -print "Coverage: %5.2f%%" % coverage - -if percent_s: - print "\n-------- %s mismatches --------------" - for i in percent_s_list: - print "'%s' : '%s'" % (i, string_map[i]) - -if named_s: - print "\n-------- %()s mismatches ------------" - for i in named_s_list: - print "'%s' : '%s'" % (i, string_map[i]) - -if bnamed_s: - print "\n-------- %() missing s or d ---------" - for i in bnamed_s_list: - print "'%s' : '%s'" % (i, string_map[i]) + f = open(args[0],"r") + + mode = NONE + + string_map = {} + current_msgid = "" + current_msgstr = "" + + for line in f.readlines(): + data = line.split(None,1) + if mode == NONE: + if len(data) > 0 and data[0] == "msgid": + mode = MSGID + + current_msgid = data[1].split('"')[1] + elif mode == MSGID: + if data[0][0] == '"': + current_msgid += line.split('"')[1] + elif data[0] == "msgstr": + mode = MSGSTR + current_msgstr = data[1].split('"')[1] + elif mode == MSGSTR: + if line == "" or line[0] == "#": + mode = NONE + string_map[current_msgid] = current_msgstr + elif len(data) > 0 and data[0][0] == '"': + current_msgstr += line.split('"')[1] + + f.close() + + named = re.compile('%\((\w+)\)\d*s') + bnamed = re.compile('%\((\w+)\)\d*[^sd]') + + total = len(string_map) + untranslated = 0 + percent_s = 0 + percent_s_list = [] + named_s = 0 + named_s_list = [] + bnamed_s = 0 + bnamed_s_list = [] + + + for i in string_map.keys(): + if string_map[i] == "": + untranslated += 1 + continue + + cnt1 = i.count('%s') + cnt2 = string_map[i].count('%s') + if cnt1 != cnt2: + percent_s += 1 + percent_s_list.append(i) + + list1 = named.findall(i) + list2 = named.findall(string_map[i]) + if len(list1) != len(list2): + percent_s += 1 + percent_s_list.append(i) + + list1.sort() + list2.sort() + if list1 != list2: + named_s += 1 + named_s_list.append(i) + + match = bnamed.match(string_map[i]) + if match: + bnamed_s +=1 + bnamed_s_list.append(i) + + coverage = (1.0 - (float(untranslated)/float(total))) * 100 + + print "File: %s" % args[0] + print "Total: %d" % total + all_total[args[0]] = total + print "Untranslated: %d" % untranslated + all_untranslated[args[0]] = untranslated + print "%%s mismatches: %d" % percent_s + all_percent_s[args[0]] = percent_s + print "%%()s mismatches: %d" % named_s + all_named_s[args[0]] = named_s + print "%%() missing s/d: %d" % bnamed_s + all_bnamed_s[args[0]] = bnamed_s + print "Coverage: %5.2f%%" % coverage + all_coverage[args[0]] = coverage + + if percent_s: + print "\n-------- %s mismatches --------------" + for i in percent_s_list: + print "'%s' : '%s'" % (i, string_map[i]) + + if named_s: + print "\n-------- %()s mismatches ------------" + for i in named_s_list: + print "'%s' : '%s'" % (i, string_map[i]) + + if bnamed_s: + print "\n-------- %() missing s or d ---------" + for i in bnamed_s_list: + print "'%s' : '%s'" % (i, string_map[i]) + print "" + +if len(sys.argv) > 2: + print "\n\nFile \tTotal \tUntranslated. \t%s mismatch \t%()s mismatch \tmissing s/d \tCoverage" + for pofile in sys.argv[1:]: + print "%s \t%5d \t%7d \t%7d \t%7d \t%7d \t%3.2f%%" %\ + (pofile, + all_total[pofile], + all_untranslated[pofile], + all_percent_s[pofile], + all_named_s[pofile], + all_bnamed_s[pofile], + all_coverage[pofile])