Add a separate command to extract the messages; this also changes the way messages are extracted: - the messages from the application itself are still extracted to a virt-manager catalog; use xgettext instead of intltool, as it is simpler and more flexible - the messages from the .in files are extracted to a separate virt-manager-meta catalog in a separate directory; this will ease the merge back, and avoid shipping these helper translations Signed-off-by: Pino Toscano <ptoscano@xxxxxxxxxx> --- setup.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/setup.py b/setup.py index 3e921b45..7bc1e3a6 100755 --- a/setup.py +++ b/setup.py @@ -12,6 +12,7 @@ if sys.version_info.major < 3: import glob import fnmatch import os +from pathlib import Path import unittest import distutils @@ -690,6 +691,63 @@ class VMMDistribution(distutils.dist.Distribution): distutils.dist.Distribution.__init__(self, *args, **kwargs) +class ExtractMessages(distutils.core.Command): + user_options = [ + ] + description = "Extract the translation messages" + + bug_address = "https://github.com/virt-manager/virt-manager/issues" + common_xgettext_args = [ + "xgettext", + "-F", + "--msgid-bugs-address=" + bug_address + ] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def _extract_main(self): + pot_file = "po/virt-manager.pot" + + xgettext_args = self.common_xgettext_args + \ + ["-o", pot_file, "--package-name=virt-manager"] + + # First extract the messages from the Python sources + py_sources = list(Path("virtManager").rglob("*.py")) + py_sources += list(Path("virtinst").rglob("*.py")) + py_sources = [str(src) for src in py_sources] + cmd = xgettext_args + ["-L", "Python"] + py_sources + self.spawn(cmd) + + # Then extract the messages from the Glade UI files + ui_files = list(Path(".").rglob("*.ui")) + ui_files = [str(src) for src in ui_files] + cmd = xgettext_args + ["-j", "-L", "Glade"] + ui_files + self.spawn(cmd) + + def _extract_meta(self): + po_dir = "meta-po" + potfiles = _generate_meta_potfiles_in() + potpath = "meta-po/POTFILES.in" + + try: + open(potpath, "w").write(potfiles) + cmd = ["intltool-update", "-p", "-g", "virt-manager-meta"] + wd = os.getcwd() + os.chdir(po_dir) + self.spawn(cmd) + os.chdir(wd) + finally: + os.unlink(potpath) + + def run(self): + self._extract_main() + self._extract_meta() + + distutils.core.setup( name="virt-manager", version=BuildConfig.version, @@ -754,6 +812,8 @@ distutils.core.setup( 'test_urls': TestURLFetch, 'test_initrd_inject': TestInitrdInject, 'test_dist': TestDist, + + 'extract_messages': ExtractMessages, }, distclass=VMMDistribution, -- 2.26.2