mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-01-19 05:33:47 +01:00
cf4d575062
* use translated string * fix typos in lnbits/static/i18n/{it,jp,nl,we}.js * add missing strings to cs,en,sk translations * remove duplicates from lnbits/static/i18n/{cs,en,kr,sk}.js * add i18n checker * add i18n ai tool * add autogenerated AI translations * add i18n-ai-tool check whether variables in formatted strings are not broken * fix issues with variables found by the script * chore: make bundle
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import os
|
|
import re
|
|
|
|
|
|
def get_translation_ids_from_source():
|
|
# find all HTML files in selected directories
|
|
files = []
|
|
for start in ["lnbits/core/templates", "lnbits/templates", "lnbits/static/js"]:
|
|
for dir, _, filenames in os.walk(start):
|
|
for filename in filenames:
|
|
if filename.endswith(".html") or filename.endswith(".js"):
|
|
fn = os.path.join(dir, filename)
|
|
files.append(fn)
|
|
# find all $t('...') and $t("...") calls in HTML files
|
|
# and extract the string inside the quotes
|
|
p1 = re.compile(r"\$t\('([^']*)'")
|
|
p2 = re.compile(r'\$t\("([^"]*)"')
|
|
ids = []
|
|
for fn in files:
|
|
with open(fn, "rt") as f:
|
|
text = f.read()
|
|
m1 = re.findall(p1, text)
|
|
m2 = re.findall(p2, text)
|
|
for m in m1:
|
|
ids.append(m)
|
|
for m in m2:
|
|
ids.append(m)
|
|
return ids
|
|
|
|
|
|
def get_translation_ids_for_language(language):
|
|
ids = []
|
|
for line in open(f"lnbits/static/i18n/{language}.js", "rt"):
|
|
# extract ids from lines like that start with exactly 2 spaces
|
|
if line.startswith(" ") and not line.startswith(" "):
|
|
m = line[2:].split(":")[0]
|
|
ids.append(m)
|
|
return ids
|
|
|
|
|
|
src_ids = get_translation_ids_from_source()
|
|
print(f"Number of ids from source: {len(src_ids)}")
|
|
|
|
en_ids = get_translation_ids_for_language("en")
|
|
missing = set(src_ids) - set(en_ids)
|
|
extra = set(en_ids) - set(src_ids)
|
|
if len(missing) > 0:
|
|
print()
|
|
print(f'Missing ids in language "en": {len(missing)}')
|
|
for i in sorted(missing):
|
|
print(f" {i}")
|
|
if len(extra) > 0:
|
|
print()
|
|
print(f'Extraneous ids in language "en": {len(extra)}')
|
|
for i in sorted(extra):
|
|
print(f" {i}")
|
|
|
|
languages = []
|
|
for dir, _, filenames in os.walk("lnbits/static/i18n"):
|
|
for filename in filenames:
|
|
if filename.endswith(".js") and filename not in ["i18n.js", "en.js"]:
|
|
languages.append(filename.split(".")[0])
|
|
|
|
for lang in sorted(languages):
|
|
ids = get_translation_ids_for_language(lang)
|
|
missing = set(en_ids) - set(ids)
|
|
extra = set(ids) - set(en_ids)
|
|
if len(missing) > 0:
|
|
print()
|
|
print(f'Missing ids in language "{lang}": {len(missing)}')
|
|
for i in sorted(missing):
|
|
print(f" {i}")
|
|
if len(extra) > 0:
|
|
print()
|
|
print(f'Extraneous ids in language "{lang}": {len(extra)}')
|
|
for i in sorted(extra):
|
|
print(f" {i}")
|