mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-15 07:04:53 +01:00
01c34d806d
The previous method matched line by line, which broke for msgmerge alternative (poedit\!\!\!) that changes line breaks.
77 lines
2.2 KiB
Python
Executable File
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()
|