mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Convert previous check draft into a proper test for pytest/tox
This commit is contained in:
parent
dc445a8aa8
commit
c627580479
2 changed files with 45 additions and 40 deletions
|
@ -1,40 +0,0 @@
|
|||
import re
|
||||
import json
|
||||
import glob
|
||||
|
||||
# List all locale files (except en.json being the ref)
|
||||
locale_folder = "../locales/"
|
||||
locale_files = glob.glob(locale_folder + "*.json")
|
||||
locale_files = [filename.split("/")[-1] for filename in locale_files]
|
||||
locale_files.remove("en.json")
|
||||
|
||||
reference = json.loads(open(locale_folder + "en.json").read())
|
||||
|
||||
found_inconsistencies = False
|
||||
|
||||
# Let's iterate over each locale file
|
||||
for locale_file in locale_files:
|
||||
|
||||
this_locale = json.loads(open(locale_folder + locale_file).read())
|
||||
|
||||
# We iterate over all keys/string in en.json
|
||||
for key, string in reference.items():
|
||||
# If there is a translation available for this key/string
|
||||
if key in this_locale:
|
||||
|
||||
# Then we check that every "{stuff}" (for python's .format())
|
||||
# should also be in the translated string, otherwise the .format
|
||||
# will trigger an exception!
|
||||
subkeys_in_ref = set(k[0] for k in re.findall(r"{(\w+)(:\w)?}", string))
|
||||
subkeys_in_this_locale = set(k[0] for k in re.findall(r"{(\w+)(:\w)?}", this_locale[key]))
|
||||
|
||||
if any(key not in subkeys_in_ref for key in subkeys_in_this_locale):
|
||||
found_inconsistencies = True
|
||||
print("\n")
|
||||
print("==========================")
|
||||
print("Format inconsistency for string %s in %s:" % (key, locale_file))
|
||||
print("%s -> %s " % ("en.json", string))
|
||||
print("%s -> %s " % (locale_file, this_locale[key]))
|
||||
|
||||
if found_inconsistencies:
|
||||
sys.exit(1)
|
45
tests/test_translation_format_consistency.py
Normal file
45
tests/test_translation_format_consistency.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
import re
|
||||
import json
|
||||
import glob
|
||||
import pytest
|
||||
|
||||
# List all locale files (except en.json being the ref)
|
||||
locale_folder = "locales/"
|
||||
locale_files = glob.glob(locale_folder + "*.json")
|
||||
locale_files = [filename.split("/")[-1] for filename in locale_files]
|
||||
locale_files.remove("en.json")
|
||||
|
||||
reference = json.loads(open(locale_folder + "en.json").read())
|
||||
|
||||
|
||||
def find_inconsistencies(locale_file):
|
||||
|
||||
this_locale = json.loads(open(locale_folder + locale_file).read())
|
||||
|
||||
# We iterate over all keys/string in en.json
|
||||
for key, string in reference.items():
|
||||
|
||||
# Ignore check if there's no translation yet for this key
|
||||
if key not in this_locale:
|
||||
continue
|
||||
|
||||
# Then we check that every "{stuff}" (for python's .format())
|
||||
# should also be in the translated string, otherwise the .format
|
||||
# will trigger an exception!
|
||||
subkeys_in_ref = set(k[0] for k in re.findall(r"{(\w+)(:\w)?}", string))
|
||||
subkeys_in_this_locale = set(k[0] for k in re.findall(r"{(\w+)(:\w)?}", this_locale[key]))
|
||||
|
||||
if any(k not in subkeys_in_ref for k in subkeys_in_this_locale):
|
||||
yield """\n
|
||||
==========================
|
||||
Format inconsistency for string {key} in {locale_file}:"
|
||||
en.json -> {string}
|
||||
{locale_file} -> {translated_string}
|
||||
""".format(key=key, string=string.encode("utf-8"), locale_file=locale_file, translated_string=this_locale[key].encode("utf-8"))
|
||||
|
||||
|
||||
@pytest.mark.parametrize('locale_file', locale_files)
|
||||
def test_translation_format_consistency(locale_file):
|
||||
inconsistencies = list(find_inconsistencies(locale_file))
|
||||
if inconsistencies:
|
||||
raise Exception(''.join(inconsistencies))
|
Loading…
Add table
Reference in a new issue