-
Notifications
You must be signed in to change notification settings - Fork 136
/
missing_translations.py
74 lines (57 loc) · 2.2 KB
/
missing_translations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""Report missing translations for given locales
"""
import os
import sys
from subprocess import Popen, PIPE
if __name__ == '__main__':
if len(sys.argv) < 3:
msg = ('One or more locales must be specified: '
'E.g. python missing_translations.py <rootdir> id')
raise Exception(msg)
root = sys.argv[1]
if not os.path.isdir(root):
msg = ('Root dir must be specified as first argument. I got '
'%s' % root)
raise Exception(msg)
locales = sys.argv[2:]
files = {'QT': '%s/safe_qgis/i18n/inasafe_%s.ts',
'GT': '%s/safe/i18n/%s/LC_MESSAGES/inasafe.po'}
commands = {'QT': 'lrelease %s',
'GT': 'msgfmt --statistics %s'}
for locale in locales:
for key in files:
filename = files[key] % (root, locale)
cmd = commands[key] % filename
# messages.mo is generated when called Popen
p = Popen(cmd, shell=True,
stdin=PIPE, stdout=PIPE, stderr=PIPE)
msg = '%s[%s]: ' % (key, locale)
status = 'Unknown'
lines = []
if key == 'GT' and p.stderr is not None:
lines = p.stderr.readlines()
if key == 'QT' and p.stdout is not None:
lines = p.stdout.readlines()
missing = 0
for line in lines:
if 'untranslated' in line:
fields = line.split()
i = fields.index('untranslated')
missing += int(fields[i - 1])
if 'unfinished' in line:
fields = line.strip().split()
i = fields.index('unfinished)')
missing += int(fields[i - 1])
#print 'untranslated', untranslated
if missing == 0:
status = 'OK'
else:
status = '%i missing' % missing
status += ' - please edit %s' % filename
if status != 'OK':
msg += status
print msg
# Deleted messages.mo generated file, not so good approach actually
fname = root + '/messages.mo'
if os.path.isfile(fname):
os.remove(fname)