Limnoria/sandbox/check_trans.py
Valentin Lorentz 01c34d806d Improve the check_trans script by using Supybot's .po(t) parser.
The previous method matched line by line, which broke for msgmerge alternative (poedit\!\!\!) that changes line breaks.
2014-01-26 20:45:27 +01:00

77 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
import os
import sys
import glob
import operator
import subprocess
from supybot.i18n import parse
def main():
directory = sys.argv[1]
if directory == '--core':
checkCore()
else:
for plugin in os.listdir(directory):
if plugin[0] not in 'AZERTYUIOPQSDFGHJKLMWXCVBN':
continue
checkPlugin(os.path.join(directory, plugin))
def changedir(f):
def newf(new_path):
old_path = os.getcwd()
os.chdir(new_path)
try:
return f('.')
finally:
os.chdir(old_path)
return newf
def checkCore():
_checkCore(os.path.join(os.path.dirname(__file__), '..'))
@changedir
def _checkCore(corePath):
subprocess.Popen(['pygettext', '-p', 'locales', 'plugins/__init__.py'] + glob.glob('src/*.py') + glob.glob('src/*/*.py')).wait()
localePath = os.path.join(corePath, 'locales')
pot = open(os.path.join(localePath, 'messages.pot'))
for translation in os.listdir(localePath):
if not translation.endswith('.po'):
continue
pot.seek(0)
potPath = os.path.join(os.getcwd(), 'locales', translation)
po = open(potPath)
if checkTranslation(pot, po):
print 'OK: ' + potPath
else:
print 'ERROR: ' + potPath
@changedir
def checkPlugin(pluginPath):
subprocess.Popen('pygettext -D config.py plugin.py', shell=True).wait()
pot = open(os.path.join(pluginPath, 'messages.pot'))
localePath = os.path.join(pluginPath, 'locales')
for translation in os.listdir(localePath):
if not translation.endswith('.po'):
continue
pot.seek(0)
potPath = os.path.join(os.getcwd(), 'locales', translation)
po = open(potPath)
if checkTranslation(pot, po):
print 'OK: ' + potPath
else:
print 'ERROR: ' + potPath
def checkTranslation(pot, po):
checking = False
pot = set(map(operator.itemgetter(0), parse(pot)))
po = set(map(operator.itemgetter(0), parse(po)))
diff = filter(lambda x:x not in po, pot)
print(diff)
return not bool(diff)
if __name__ == '__main__':
main()