i18n: Add Makefile to extract classref strings

Change extract script `path` argument to support specifying multiple
paths, like `makerst.py`. This prevents parsing invalid XML files while
scanning the whole repository.
This commit is contained in:
Rémi Verschelde 2020-03-20 12:56:34 +01:00
parent aca1971a12
commit 87d23bf85a
2 changed files with 36 additions and 9 deletions

23
doc/translations/Makefile Normal file
View file

@ -0,0 +1,23 @@
# Makefile providing various facilities to manage translations
TEMPLATE = classes.pot
POFILES = $(wildcard *.po)
LANGS = $(POFILES:%.po=%)
all: update merge
update:
@cd ../..; \
python3 doc/translations/extract.py \
--path doc/classes modules/*/doc_classes \
--output doc/translations/$(TEMPLATE)
merge:
@for po in $(POFILES); do \
echo -e "\nMerging $$po..."; \
msgmerge -w 79 -C $$po $$po $(TEMPLATE) > "$$po".new; \
mv -f "$$po".new $$po; \
done
check:
@for po in $(POFILES); do msgfmt -c $$po -o /dev/null; done

View file

@ -235,7 +235,7 @@ def _generate_translation_catalog_file(unique_msgs, output):
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--path", "-p", default=".", help="The directory containing XML files to collect.")
parser.add_argument("--path", "-p", nargs="+", default=".", help="The directory or directories containing XML files to collect.")
parser.add_argument("--output", "-o", default="translation_catalog.pot", help="The path to the output file.")
args = parser.parse_args()
@ -243,16 +243,20 @@ def main():
if not os.path.isdir(os.path.dirname(output)) or not output.endswith('.pot'):
print_error("Invalid output path: {}".format(output))
exit(1)
if not os.path.isdir(args.path):
print_error("Invalid working directory path: {}".format(args.path))
exit(1)
os.chdir(args.path)
print("Current working dir: {}\n".format(os.getcwd()))
classes = OrderedDict()
for path in args.path:
if not os.path.isdir(path):
print_error("Invalid working directory path: {}".format(path))
exit(1)
classes = OrderedDict() ## dictionary of key=class_name, value=DescList objects
_collect_classes_dir('.', classes)
classes = OrderedDict(sorted(classes.items(), key = lambda kv: kv[0].lower() ))
print("\nCurrent working dir: {}".format(path))
path_classes = OrderedDict() ## dictionary of key=class_name, value=DescList objects
_collect_classes_dir(path, path_classes)
classes.update(path_classes)
classes = OrderedDict(sorted(classes.items(), key = lambda kv: kv[0].lower()))
unique_msgs = _make_translation_catalog(classes)
_generate_translation_catalog_file(unique_msgs, output)