Skip to content

Commit

Permalink
#79 * Switched back to older version of translatable string extractio…
Browse files Browse the repository at this point in the history
…n helper

* Initial translation validation helper added
  • Loading branch information
d4nj1 committed Dec 23, 2020
1 parent 413e98f commit 0d7999e
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 50 deletions.
60 changes: 10 additions & 50 deletions tlpui/lang/extractLocaleStringsFromSchema.py
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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:
Expand Down
63 changes: 63 additions & 0 deletions translationValidationHelper.py
Original file line number Diff line number Diff line change
@@ -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 <b>{check_locale}</b> for <b>{language_file}</b></br></br>"

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"</br><h3>{item}</h3></br>"

check_item = check_translation_catalog[item]
translated_item = trans.translate(check_item, dest=main_lang).text

html += f"{check_item}</br>"
html += differ.make_table([translated_item], [main_translation_catalog[item]])
html += "</br>"

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')

0 comments on commit 0d7999e

Please sign in to comment.