diff --git a/tlpui/lang/extractLocaleStringsFromSchema.py b/tlpui/lang/extractLocaleStringsFromSchema.py index a3824bf..33a5784 100644 --- a/tlpui/lang/extractLocaleStringsFromSchema.py +++ b/tlpui/lang/extractLocaleStringsFromSchema.py @@ -1,33 +1,9 @@ from io import open -import os from json import load +import os lastvalue = '' -custom_translations = { - 'TLP_PERSISTENT_DEFAULT': ['1_0', '1_1'], # ID / since 1.0 - 'CPU_SCALING_GOVERNOR': ['all'], # GRP - 'CPU_SCALING_FREQ': ['all'], # GRP - 'CPU_HWP': ['1_0', '1_1'], # GRP / since 1.0 - 'ENERGY_PERF_POLICY': ['all'], # GRP - 'DISK_APM_LEVEL': ['all'], # GRP - 'DISK_IOSCHED': ['all'], # ID - 'SATA_LINKPWR': ['all'], # GRP - 'SATA_LINKPWR_BLACKLIST': ['0_9', '1_0', '1_1'], # ID / since 0.9 - 'AHCI_RUNTIME_PM': ['0_9', '1_0', '1_1'], # GRP / since 0.9 - 'AHCI_RUNTIME_PM_TIMEOUT': ['0_9', '1_0', '1_1'], # ID / since 0.9 - 'WIFI_PWR': ['all'], # GRP - 'BAY_POWEROFF': ['1_0', '1_1'], # GRP / since 1.0 - 'BAY_POWEROFF_ON_BAT': ['0_8', '0_9'], # ID / until 0.9 - 'RUNTIME_PM_ALL': ['0_8', '0_9'], # ID / until 0.9 - 'RUNTIME_PM_DRIVER_BLACKLIST': ['all'], # ID - 'USB_BLACKLIST_BTUSB': ['1_0', '1_1'], # ID / since 1.0 - 'USB_BLACKLIST_PHONE': ['1_0', '1_1'], # ID / since 1.0 - 'USB_BLACKLIST_PRINTER': ['1_1'], # ID / since 1.1 - 'USB_BLACKLIST_WWAN': ['all'], # ID - 'RESTORE_THRESHOLDS_ON_BAT': ['1_0', '1_1'] # ID / since 1.0 -} - def get_json_schema_object_from_file(objectname: str, filename: str) -> dict: jsonfile = open(filename) @@ -60,38 +36,22 @@ def create_translateable_strings_header_file(): if not file.endswith('.json'): continue - configversion = file.replace('.json', '') - versionfile = open('configschema.{}.json.h'.format(configversion), 'w+') - categories = get_json_schema_object_from_file('categories', '../configschema/' + file) + for category in categories: add_to_list(translateobjects, category['name'] + '__CATEGORY_TITLE') configs = category['configs'] for config in configs: if 'group' in config: - if config['group'] in custom_translations.keys() \ - and any(v in custom_translations.get(config['group']) for v in {configversion, 'all'}): - # versionfile.write('_(\"' + config['group'] + '__GROUP_TITLE' + '\");\n') - versionfile.write('_(\"' + config['group'] + '__GROUP_DESCRIPTION' + '\");\n') - # configitems = config['ids'] - # for configitem in configitems: - # versionfile.write('_(\"' + configitem['id'] + '__ID_TITLE' + '\");\n') - elif config['group'] not in custom_translations.keys(): - # add_to_list(translateobjects, config['group'] + '__GROUP_TITLE') - add_to_list(translateobjects, config['group'] + '__GROUP_DESCRIPTION') - # configitems = config['ids'] - # for configitem in configitems: - # add_to_list(translateobjects, configitem['id'] + '__ID_TITLE') + add_to_list(translateobjects, config['group'] + '__GROUP_TITLE') + add_to_list(translateobjects, config['group'] + '__GROUP_DESCRIPTION') + configitems = config['ids'] + for configitem in configitems: + add_to_list(translateobjects, configitem['id'] + '__ID_TITLE') else: - if config['id'] in custom_translations.keys() \ - and any(v in custom_translations.get(config['id']) for v in {configversion, 'all'}): - # versionfile.write('_(\"' + config['id'] + '__ID_TITLE' + '\");\n') - versionfile.write('_(\"' + config['id'] + '__ID_DESCRIPTION' + '\");\n') - elif config['id'] not in custom_translations.keys(): - # add_to_list(translateobjects, config['id'] + '__ID_TITLE') - add_to_list(translateobjects, config['id'] + '__ID_DESCRIPTION') - - versionfile.close() + add_to_list(translateobjects, config['id'] + '__ID_TITLE') + add_to_list(translateobjects, config['id'] + '__ID_DESCRIPTION') + newfile = open('configschema.json.h', 'w+') for item in translateobjects: diff --git a/translationValidationHelper.py b/translationValidationHelper.py new file mode 100644 index 0000000..c379cff --- /dev/null +++ b/translationValidationHelper.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +import sys +import gettext +import difflib +from tlpui import settings +from googletrans import Translator + + +def validate_translation(trans: Translator, check_locale: str, language_file: str): + main_lang = "en" + main_locale = "en_EN" + main_translation_catalog = gettext.translation(domain=language_file, localedir=settings.langdir, languages=[main_locale])._catalog + check_translation_catalog = gettext.translation(domain=language_file, localedir=settings.langdir, languages=[check_locale])._catalog + + differ = difflib.HtmlDiff() + charset = 'utf-8' + unknown_items = [] + html = f"Checking locale {check_locale} for {language_file}

" + + for item in main_translation_catalog: + if item == '' or '__ID_TITLE' in item or '__GROUP_TITLE' in item: + continue + if item not in check_translation_catalog: + unknown_items.append(item) + continue + if '_DESCRIPTION' in item or '_TITLE' in item: + html += f"

{item}


" + + check_item = check_translation_catalog[item] + translated_item = trans.translate(check_item, dest=main_lang).text + + html += f"{check_item}
" + html += differ.make_table([translated_item], [main_translation_catalog[item]]) + html += "
" + + if len(unknown_items) > 0: + print('Translations missing for:') + print(unknown_items) + + html_output = (differ._file_template % dict( + styles=differ._styles, + legend=differ._legend, + table=html, + charset=charset + )).encode(charset, 'xmlcharrefreplace').decode(charset) + + html_file = open(f"diffresult-{check_locale}-{language_file}.html", "w") + html_file.write(html_output) + html_file.close() + + +if len(sys.argv) < 2: + print('No locale provided. Must be in format like xx_XX') + sys.exit() + +locale = sys.argv[1] +print(f"Evaluating locale: {locale}") +translator = Translator() +validate_translation(translator, locale, 'configdescriptions') +validate_translation(translator, locale, 'mainui') +validate_translation(translator, locale, 'statui') +validate_translation(translator, locale, 'uihelper')