1 changed files with 61 additions and 0 deletions
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python |
||||
|
||||
from glob import glob |
||||
import polib |
||||
import re |
||||
|
||||
def validateEntry(original, translation): |
||||
if translation == '': |
||||
return True |
||||
|
||||
# Find fmt arguments in source message |
||||
src_arguments = re.findall("{.*?}", original) |
||||
if len(src_arguments) == 0: |
||||
return True |
||||
|
||||
# Find fmt arguments in translation |
||||
translated_arguments = re.findall("{.*?}", translation) |
||||
|
||||
# If paramteres are untyped with order, sort so that they still appear equal if reordered |
||||
# Note: This does no hadle cases where the translator reordered arguments where not expected |
||||
# by the source. Or other advanced but valid usages of the fmt syntax |
||||
isOrdered = True |
||||
for argument in src_arguments: |
||||
if re.search("^{\d+}$", argument) == None: |
||||
isOrdered = False |
||||
break |
||||
|
||||
if isOrdered: |
||||
src_arguments.sort() |
||||
translated_arguments.sort() |
||||
|
||||
if src_arguments == translated_arguments: |
||||
return True |
||||
|
||||
print ("\033[36m" + original + "\033[0m != \033[31m" + translation + "\033[0m") |
||||
|
||||
return False |
||||
|
||||
|
||||
status = 0 |
||||
|
||||
files = glob('Translations/*.po') |
||||
files.sort() |
||||
for path in files: |
||||
po = polib.pofile(path) |
||||
print ("\033[32mValidating " + po.metadata['Language'] + "\033[0m : " + str(po.percent_translated()) + "% translated") |
||||
|
||||
for entry in po: |
||||
if entry.fuzzy: |
||||
continue |
||||
|
||||
if entry.msgid_plural: |
||||
for translation in entry.msgstr_plural.values(): |
||||
if not validateEntry(entry.msgid_plural, translation): |
||||
status = 255 |
||||
continue |
||||
|
||||
if not validateEntry(entry.msgid, entry.msgstr): |
||||
status = 255 |
||||
|
||||
exit(status) |
||||
Loading…
Reference in new issue