Przeglądaj źródła

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.

(cherry picked from commit 87d23bf85a3375c4c81f009d88beba66dc42e987)
Rémi Verschelde 5 lat temu
rodzic
commit
ab80f9d9b2
2 zmienionych plików z 37 dodań i 8 usunięć
  1. 23 0
      doc/translations/Makefile
  2. 14 8
      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

+ 14 - 8
doc/translations/extract.py

@@ -254,7 +254,9 @@ 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()
 
@@ -262,15 +264,19 @@ 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()))
     unique_msgs = _make_translation_catalog(classes)
     _generate_translation_catalog_file(unique_msgs, output)