diff --git a/tests/check_locale_format_consistency.py b/tests/check_locale_format_consistency.py deleted file mode 100644 index 99107ccc2..000000000 --- a/tests/check_locale_format_consistency.py +++ /dev/null @@ -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) diff --git a/tests/test_translation_format_consistency.py b/tests/test_translation_format_consistency.py new file mode 100644 index 000000000..81e98f3d5 --- /dev/null +++ b/tests/test_translation_format_consistency.py @@ -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))