83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
#!/usr/bin/python3
|
|
|
|
import pathlib
|
|
import json
|
|
import glob
|
|
import pprint
|
|
|
|
here = pathlib.Path(__file__).parent.resolve()
|
|
|
|
reference_file_path = str(here / '../WebApplication/src/locales/en.json')
|
|
language_files_path = glob.glob(str(here / '../WebApplication/src/locales/*.json'))
|
|
source_files_path = glob.glob(str(here / '../WebApplication/src/**/*.vue'), recursive=True)
|
|
|
|
with open(reference_file_path, 'rb') as f:
|
|
reference_content = json.load(f)
|
|
|
|
# check if all entries in the default language file are being used
|
|
all_source_files_content = ""
|
|
for source_file in source_files_path:
|
|
with open(source_file, "rt") as f:
|
|
all_source_files_content += f.read()
|
|
|
|
# collect all keys
|
|
all_keys = []
|
|
def add_keys(node, prefix, all_keys):
|
|
for key in node:
|
|
if isinstance(node[key], dict):
|
|
add_keys(node[key], prefix=f"{key}.", all_keys=all_keys)
|
|
else:
|
|
all_keys.append(f"{prefix}{key}")
|
|
|
|
add_keys(reference_content, "", all_keys=all_keys)
|
|
|
|
for key in all_keys:
|
|
translations_text = [
|
|
f'"{key}"',
|
|
f"'{key}'"
|
|
]
|
|
found = False
|
|
for translation_text in translations_text:
|
|
if translation_text in all_source_files_content:
|
|
found = True
|
|
break
|
|
|
|
if not found:
|
|
print(f"translation '{key}' does not seem to be used")
|
|
|
|
|
|
def compare_json_node(reference, value, prefix, missings = [], excessives = []):
|
|
for key in reference:
|
|
if not key in value:
|
|
missings.append(f"{prefix}{key}")
|
|
|
|
elif isinstance(reference[key], dict):
|
|
compare_json_node(reference[key], value[key], prefix=f"{key}.", missings=missings, excessives=excessives)
|
|
for key in value:
|
|
if not key in reference:
|
|
excessives.append(f"{prefix}{key}")
|
|
|
|
|
|
for path in language_files_path:
|
|
if path != reference_file_path:
|
|
with open(path, 'rb') as f:
|
|
language_content = json.load(f)
|
|
|
|
missings = []
|
|
excessives = []
|
|
|
|
compare_json_node(reference_content, language_content, prefix="", missings=missings, excessives=excessives)
|
|
|
|
if len(missings) > 0:
|
|
print(f">>> {path}, missing nodes in translation:")
|
|
for missing in missings:
|
|
print(f" {missing}")
|
|
|
|
if len(excessives) > 0:
|
|
print(f">>> {path}, unused nodes in translation:")
|
|
for excessive in excessives:
|
|
print(f" {excessive}")
|
|
|
|
if len(missings) == 0 and len(excessives) == 0:
|
|
print(f">>> {path}, translation is complete !")
|