warzone2100/po/generate-statistics-html.py

81 lines
3.0 KiB
Python
Executable File

#!/usr/bin/env python
# Warzone 2100 Translation Status Generator
# Copyright (C) 2012 Michal Dutkiewicz aka Emdek <emdeck@gmail.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import glob
import re
import subprocess
width = 300
images = 'http://static.wz2100.net/img/flags/'
messages = {}
percents = {}
catalogs = {}
for i in glob.glob('*.po'):
process = subprocess.Popen(['msgfmt', '--statistics', i], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
errors, output = process.communicate()
messages['translated'] = 0
messages['untranslated'] = 0
messages['fuzzy'] = 0
messages['amount'] = 0
matches = re.search('(\d+) translated', output)
if matches != None:
messages['translated'] = int(matches.group(1))
matches = re.search('(\d+) untranslated', output)
if matches != None:
messages['untranslated'] = int(matches.group(1))
matches = re.search('(\d+) fuzzy', output)
if matches != None:
messages['fuzzy'] = int(matches.group(1))
messages['amount'] = (messages['translated'] + messages['untranslated'] + messages['fuzzy'])
percents['fuzzy'] = (0 if messages['fuzzy'] == 0 else (float(messages['fuzzy']) / messages['amount']));
percents['untranslated'] = (0 if messages['untranslated'] == 0 else (float(messages['untranslated']) / messages['amount']));
percents['translated'] = (1 - percents['fuzzy'] - percents['untranslated']);
catalog = '%6d%s' % (((1 - percents['translated']) * 10000), i)
catalogs[catalog] = '<li class="' + ('translation_complete' if percents['translated'] >= 0.9 else ('translation_unfinished' if percents['translated'] >= 0.8 else 'translation_incomplete')) + '">\n<span class="messages_translated" style="width: ' + str(width) + 'px" title="' + output.rstrip()[0:-1] + '">\n'
if percents['untranslated'] > 0:
catalogs[catalog] += '<span class="messages_untranslated" style="width: %dpx"></span>\n' % max(2, (percents['untranslated'] * width))
if percents['fuzzy'] > 0:
catalogs[catalog] += '<span class="messages_fuzzy" style="width: %dpx"></span>\n' % max(2, (percents['fuzzy'] * width))
catalogs[catalog] += '</span>\n<img src="%s%s.png" alt="" title="%s" /> <strong>%s</strong> %.2f%%\n</li>' % (images, i[0:-3], i[0:-3], i[0:-3], (percents['translated'] * 100))
keys = catalogs.keys()
keys.sort()
print '<ul id="translation_status">'
for i in keys:
print catalogs[i]
print '</ul>'