[GRASS-SVN] r51876 - grass/trunk/locale
svn_grass at osgeo.org
svn_grass at osgeo.org
Wed May 30 00:58:36 PDT 2012
Author: lucadelu
Date: 2012-05-30 00:58:36 -0700 (Wed, 30 May 2012)
New Revision: 51876
Modified:
grass/trunk/locale/grass_po_stats.py
Log:
new version of translation stats file thankt to Pietro Zambelli
Modified: grass/trunk/locale/grass_po_stats.py
===================================================================
--- grass/trunk/locale/grass_po_stats.py 2012-05-30 07:31:23 UTC (rev 51875)
+++ grass/trunk/locale/grass_po_stats.py 2012-05-30 07:58:36 UTC (rev 51876)
@@ -3,7 +3,8 @@
#
# MODULE: Languages informations and statistics (Python)
# AUTHOR(S): Luca Delucchi <lucadeluge at gmail.com>
-# PURPOSE: Create a json file containing languages translations
+# Pietro Zambelli <peter.zamb at gmail.com>
+# PURPOSE: Create a json file containing languages translations
# informations and statistics.
# COPYRIGHT: (C) 2012 by the GRASS Development Team
#
@@ -16,89 +17,116 @@
import os, sys
import subprocess
import json
+import glob
+import codecs
-def main():
- directory = 'po/'
- outfile = os.path.join(os.environ['GISBASE'],'translation_status.json')
- try:
- os.remove(outfile)
- except:
- pass
- # dictionary contaning languages and file name
+def read_po_files(inputdirpath):
+ """Return a dictionary with for each language the list of *.po files"""
+ originalpath = os.getcwd()
+ os.chdir(inputdirpath)
languages = {}
- # for each po file
- #TODO MAYBE USE OTHER FUNCTIONS to extract only po file and remove if
- for f in os.listdir(directory):
- if '.po' in f:
- # split filename
- lang = f.split('_')[1:]
- # check if are two definitions like pt_br
- if len(lang) == 2:
- lang = ['_'.join(lang)]
- lang = lang[0].split('.')[0]
- # if keys is not in languages add it and the file's name
- if lang not in languages.keys():
- languages[lang] = [f]
- # add only files name
- else:
- languages[lang].append(f)
+ for pofile in glob.glob("*.po"):
+ lang = pofile.split('_')[1:]
+ # check if are two definitions like pt_br
+ if len(lang) == 2:
+ lang = ['_'.join(lang)]
+ lang = lang[0].split('.')[0]
+
+ # if keys is not in languages add it and the file's name
+ if not languages.has_key(lang):
+ languages[lang] = [pofile,]
+ # add only files name
+ else:
+ languages[lang].append(pofile)
+ os.chdir(originalpath)
+ return languages
+
+
+def read_msgfmt_statistics(msg, lgood, lfuzzy, lbad):
+ """Return a dictionary, and the good, fuzzy and bad values from a string"""
+ langdict = {}
+ # split the output
+ out = msg.split(',')
+ # TODO maybe check using regex
+ # check for each answer
+ for o in out:
+ o = o.lower().strip()
+ # each answer is written into dictionary and
+ # the value add to variable for the sum
+ if 'untranslated' in o:
+ val = int(o.split(' ')[0])
+ langdict['bad'] = val
+ lbad += val
+ elif 'fuzzy' in o:
+ val = int(o.split(' ')[0])
+ langdict['fuzzy'] = val
+ lfuzzy += val
+ else:
+ val = int(o.split(' ')[0])
+ langdict['good'] = val
+ lgood += val
+ return langdict, lgood, lfuzzy, lbad
+
+def langDefinition(fil):
+ f = codecs.open(fil,encoding = 'utf-8', errors='replace', mode = 'r')
+ for l in f.readlines():
+ if '"Language-Team:' in l:
+ lang = l.split(' ')[1:-1]
+ break
+ f.close()
+ if len(lang) == 2:
+ return " ".join(lang)
+ elif len(lang) == 1:
+ return lang[0]
+ else:
+ return ""
+
+def get_stats(languages, directory):
+ """Return a dictionay with the statistic for each language"""
# output dictionary to transform in json file
output = {}
# TO DO TOTALS OF ENGLISH WORD FOR EACH FILE
- # all the total string in english
+ # all the total string in english
output['totals'] = {}
# all the informations about each lang
output['langs'] = {}
# for each language
- for k,v in languages.iteritems():
- output['langs'][k] = {}
- output['langs'][k]['total'] = {}
+ for lang, pofilelist in languages.iteritems():
+ output['langs'][lang] = {}
+ output['langs'][lang]['total'] = {}
+ output['langs'][lang]['name'] = langDefinition(os.path.join(directory,pofilelist[0]))
# variables to create sum for each language
lgood = 0
lfuzzy = 0
lbad = 0
- # for each file
- for flang in v:
+ # for each file
+ for flang in pofilelist:
+
fpref = flang.split('_')[0]
- output['langs'][k][fpref] = {}
# run msgfmt for statistics
# TODO check if it's working on windows
- p = subprocess.Popen(['msgfmt', '--statistics',
- os.path.join(directory,flang)],
+ process = subprocess.Popen(['msgfmt', '--statistics',
+ os.path.join(directory,flang)],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out = p.communicate()[1].strip()
- # check if some errors occurs
- if out.find('error') != -1:
+ msg = process.communicate()[1].strip()
+ # check if some errors occurs
+ if msg.find('error') != -1:
# TODO CHECK IF grass.warning()
- print "WARNING: file <%s> has some problems: <%s>" % (flang, out)
+ print "WARNING: file <%s> has some problems: <%s>" % (flang, msg)
continue
- # split the output
- out = out.split(',')
- # TODO maybe check using regex
- # check for each answer
- for o in out:
- o = o.strip()
- # each answer is written into dictionary and
- # the value add to variable for the sum
- if 'untranslated' in o:
- val = int(o.split(' ')[0])
- output['langs'][k][fpref]['bad'] = val
- lbad += val
- elif 'fuzzy' in o:
- val = int(o.split(' ')[0])
- output['langs'][k][fpref]['fuzzy'] = val
- lfuzzy += val
- else:
- val = int(o.split(' ')[0])
- output['langs'][k][fpref]['good'] = val
- lgood += val
+ output['langs'][lang][fpref], lgood, lfuzzy, lbad = \
+ read_msgfmt_statistics(msg, lgood, lfuzzy, lbad)
# write the sum and total of each file
- output['langs'][k]['total']['good'] = lgood
- output['langs'][k]['total']['fuzzy'] = lfuzzy
- output['langs'][k]['total']['bad'] = lbad
- output['langs'][k]['total']['total'] = lgood + lfuzzy + lbad
- # load dictionary into json format
- fjson = json.dumps(output, sort_keys=True, indent=4)
+ output['langs'][lang]['total']['good'] = lgood
+ output['langs'][lang]['total']['fuzzy'] = lfuzzy
+ output['langs'][lang]['total']['bad'] = lbad
+ output['langs'][lang]['total']['total'] = lgood + lfuzzy + lbad
+ return output
+
+
+def writejson(stats, outfile):
+ # load dictionary into json format
+ fjson = json.dumps(stats, sort_keys=True, indent=4)
# write a string with pretty style
outjson = os.linesep.join([l.rstrip() for l in fjson.splitlines()])
# write out file
@@ -110,7 +138,17 @@
os.remove("messages.mo")
except:
pass
-
+
+def main(in_dirpath, out_josonpath):
+ languages = read_po_files(in_dirpath)
+ stats = get_stats(languages, in_dirpath)
+
+ if os.path.exists(out_josonpath):
+ os.remove(out_josonpath)
+ writejson(stats, out_josonpath)
+
+
if __name__ == "__main__":
- sys.exit(main())
-
+ directory = 'po/'
+ outfile = os.path.join(os.environ['GISBASE'],'translation_status.json')
+ sys.exit(main(directory, outfile))
More information about the grass-commit
mailing list