conventionschedule-android/stringExtractor/androidStringToArb.py

45 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import sys
import json
from pathlib import Path
import lxml.etree
import lxml
def print_usage():
print('Usage:')
print(f' {sys.argv[0]} <android_res_folder> <default_language> <arb_files_output_folder>')
def convert_xml_to_arb(androidResFolder, defaultLanguage, arbOutputFolder):
xmls_path = {
defaultLanguage.lower(): androidResFolder.joinpath('values/strings.xml'),
**{
path.parent.name.split('-')[-1].lower(): path
for path in androidResFolder.glob('values-*/strings.xml')
}
}
untranslatables = dict()
translations = {lang: dict() for lang in xmls_path}
for lang, xml_path in xmls_path.items():
etree = lxml.etree.fromstring(xml_path.read_bytes())
for translated_string in etree.findall('string'):
if translated_string.attrib.get('translatable', 'true').lower() == 'false':
untranslatables[translated_string.attrib['name']] = translated_string.text
else:
translations[lang][translated_string.attrib['name']] = translated_string.text
for d in translations.values():
d.update(untranslatables)
for k, v in translations.items():
arbOutputFolder.joinpath(f'strings_{k}.arb').write_text(json.dumps(v, indent=4, sort_keys=True, ensure_ascii=False))
def main():
if len(sys.argv) != 4:
print_usage()
else:
convert_xml_to_arb(Path(sys.argv[1]), sys.argv[2], Path(sys.argv[3]))
if __name__ == '__main__':
main()