summaryrefslogtreecommitdiff
path: root/www/lang/checklang.py
blob: cf3291fe78db0e50b61ea227907c322c4326fe1a (plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python
import json
import os
import getopt
import sys

globGood=0
globBad=0
globBeautify=0
globOverwrite=0
globFile=""

# prints usage
def usage():
  print (
        'Usage: '+sys.argv[0]+'\n'
          ' -h|--help: this help\n'
          ' -f|file <fname>: only processes that file\n'
          ' -b|--beautify: beautifies the json file\n'
          ' -o|--overwrite: when used with -b/--beautify overwrites the file without adding a pretty- prefix. Use with caution\n'
  )


#beautifies a given file
def beautify(fi,ki):
  global globOverwrite
  if globOverwrite:
    prefix=''
  else:
    prefix='pretty-'
  print "Beautifying %s, writing to %s" % (fi,prefix+fi)
  w = len (max(ki, key=len))
  pretty=[]
  for k in sorted(ki):
    line = "    \"%s\"%s:\"%s\"" %(k,' '*(w-len(k)+1),ki[k])
    pretty.append(line)
  pFh=open  (prefix+fi,"w")
  pFh.write("{\n")
  pFh.write(',\n'.join(pretty).encode('utf-8'))
  pFh.write("\n}\n")
  pFh.close()

#Compares keys in language file
def compare (fname):
  beaut="no"
  global globGood, globBad,globOverwrite, globFile, globBeautify
  with open (i) as json_data:
      try:
        newKeys = json.load(json_data)
      except ValueError as e:
        print 'could not parse %s, skipping!' %fname
        print 'Error was %s' % str(e)
        globBad+=1
        return
      json_data.close()
  diffOrig = set(origKeys.keys()) - set(newKeys.keys())
  diffNew = set(newKeys.keys()) - set(origKeys.keys())
  if len(diffOrig)==0 and len (diffNew)==0:
    status = "GOOD"
    globGood+=1
    if globBeautify and globFile == fname or globFile == "":
      beaut="YES"
  else:
    status = "ERROR"
    globBad+=1
  print "\n-------Checking:%s:%s, beautify:%s---------" % (fname,status,beaut)
  print "master keys:%d, %s keys:%d" % (len(origKeys), i, len(newKeys))
  if beaut=="YES":
      beautify(fname,newKeys)
  if len(diffOrig) > 0:
    print "Keys not present in :%s" %fname
    for x in diffOrig:
      print '-->',x
  if len(diffNew) > 0:
    print "Extra keys present in :%s" %fname
    for x in diffNew:
      print '-->',x
  


#MAIN
try:
  myopts,args=getopt.getopt(sys.argv[1:],"f:hob",["file=","help","overwrite","beautify"])
except getopt.GetoptError as err:
  print (err)
  usage()
  sys.exit(2)

for o,a in myopts:
  if o in ("-h","--help"):
    usage()
    sys.exit()
  elif o in ("-b","--beautify"):
    globBeautify=1 
  elif o in ("-o","--overwrite"):
    globOverwrite=1
  elif o in ("-f","--file"):
    globFile=a

with open ('locale-en.json') as json_data:
  origKeys=json.load(json_data)
  json_data.close()

print "total keys in master language: ", len(origKeys)

#iterate through all languages, using -en as the master
for i in os.listdir(os.getcwd()):
  if  not i.endswith(".json") or not i.startswith("locale-"):
    #print "skipping ",i," as we will only process locale-*.json"
    continue
  else:
    if globFile == "" or globFile == i:
      compare(i)
    else:
      print "skipping ",i, " as its not ",globFile

print "================================================="
print "Good files:%d, Bad files:%d, Total files:%d" % (globGood, globBad, globGood+globBad)
print "=================================================\n"