mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-24 06:20:19 +00:00
Validate all translations contain valid text events
This commit is contained in:
61
po/validate-textevent-translations
Executable file
61
po/validate-textevent-translations
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
ret = 0
|
||||
|
||||
|
||||
def validate_translation(input, translation):
|
||||
if not translation:
|
||||
return True
|
||||
|
||||
if re.findall(r'(?:(?<!%)%[^%OCRUHBIH]|\$[^at1234])', translation):
|
||||
print('Translation includes invalid formatting:', translation)
|
||||
|
||||
in_vars = re.findall(r'(\$(?:\d|t))', input)
|
||||
if not all(var in translation for var in in_vars):
|
||||
print('Translation does not contain all variables:', translation)
|
||||
return False
|
||||
|
||||
in_ascii = re.findall(r'\$a(\d{3})', translation)
|
||||
if any(int(i) > 256 for i in in_ascii):
|
||||
print('Translation contains invalid ascii value:')
|
||||
return False
|
||||
|
||||
# We could try to validate colors but that is pretty flexible
|
||||
return True
|
||||
|
||||
|
||||
def validate_language(path):
|
||||
global ret
|
||||
|
||||
print('Validating', path)
|
||||
|
||||
with open(path, 'r') as f:
|
||||
in_event = False
|
||||
event_input = ''
|
||||
|
||||
for line in f:
|
||||
if 'textevents.h' in line:
|
||||
in_event = True
|
||||
elif in_event is False:
|
||||
continue
|
||||
elif line.startswith('msgid'):
|
||||
event_input = line[7:-2]
|
||||
elif line.startswith('msgstr'):
|
||||
if not validate_translation(event_input, line[8:-2]):
|
||||
ret = 1
|
||||
in_event = False
|
||||
elif line == '\n':
|
||||
print('Failed to find translation for', event_input)
|
||||
in_event = False
|
||||
|
||||
|
||||
with open(sys.argv[1], 'r') as linguas:
|
||||
for lang in linguas:
|
||||
path = os.path.join(sys.argv[2], lang.strip() + '.po')
|
||||
validate_language(path)
|
||||
|
||||
sys.exit(ret)
|
||||
Reference in New Issue
Block a user