Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.x] i18n: Add support for translating the class reference #53511

Merged
merged 7 commits into from
Oct 7, 2021
Merged
Prev Previous commit
Next Next commit
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 87d23bf)
  • Loading branch information
akien-mga committed Oct 7, 2021
commit ab80f9d9b2bf24810b127051be9c5d98aba5fbc6
23 changes: 23 additions & 0 deletions doc/translations/Makefile
Original file line number Diff line number Diff line change
@@ -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
22 changes: 14 additions & 8 deletions doc/translations/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,23 +254,29 @@ 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()

output = os.path.abspath(args.output)
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)
Expand Down