Jelajahi Sumber

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.
Rémi Verschelde 5 tahun lalu
induk
melakukan
87d23bf85a
2 mengubah file dengan 36 tambahan dan 9 penghapusan
  1. 23 0
      doc/translations/Makefile
  2. 13 9
      doc/translations/extract.py

+ 23 - 0
doc/translations/Makefile

@@ -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

+ 13 - 9
doc/translations/extract.py

@@ -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)
+
+        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() ## dictionary of key=class_name, value=DescList objects
-    _collect_classes_dir('.', classes)
-    classes = OrderedDict(sorted(classes.items(), key = lambda kv: kv[0].lower() ))
+    classes = OrderedDict(sorted(classes.items(), key = lambda kv: kv[0].lower()))
     unique_msgs = _make_translation_catalog(classes)
     _generate_translation_catalog_file(unique_msgs, output)