Unexpected-Keyboard/sync_translations.py
Jules Aguillon 8ba82d2555 Generate layouts arrays used in settings
`gen_layouts.py` lists the layouts in `res/xml` and generate the
`pref_layout_values` and `pref_layout_entries` arrays into
`res/values/layouts.xml`.

These arrays are hard to maintain as the order has to match, which is
fragile.

This relies on every layouts having a `name` attribute.
2023-06-25 15:52:24 +02:00

38 lines
1.3 KiB
Python

import xml.etree.ElementTree as ET
import glob
# Edit every strings.xml files:
# - Add missing translation as comments
# - Remove obsolete strings
# - Sort in the same order as the baseline
# The baseline is 'values/strings.xml', which is english.
def parse_strings_file(file):
def key(ent): return ent.get("name"), ent.get("product")
resrcs = ET.parse(file).getroot()
return { key(ent): ent for ent in resrcs if ent.tag == "string" }
def dump_entry(out, entry, comment):
out.write(" ")
if comment: out.write("<!-- ")
out.write(ET.tostring(entry, "unicode").strip())
if comment: out.write(" -->")
out.write("\n")
def write_updated_strings(out, baseline, strings):
out.write('<?xml version="1.0" encoding="utf-8"?>\n<resources>\n')
for key, baseline_entry in baseline.items():
if key in strings:
dump_entry(out, strings[key], False)
else:
dump_entry(out, baseline_entry, True)
out.write('</resources>\n')
baseline = parse_strings_file("res/values/strings.xml")
for strings_file in glob.glob("res/values-*/strings.xml"):
print(strings_file)
strings = dict(parse_strings_file(strings_file))
with open(strings_file, "w", encoding="utf-8") as out:
write_updated_strings(out, baseline, strings)