[virt-manager PATCH v3 3/8] setup: refactor build_i18n
Pino Toscano
ptoscano at redhat.com
Wed Jul 8 06:54:49 UTC 2020
Refactor and simplify the handling of translations according to the
catalog split:
- use msgmerge to merge the translations from the update catalog,
instead of intltool
- split the parts in different functions
Remove the writing of the temporary POTFILES.in, as it is no more needed
now.
Also, since now gettext is used at installation time:
- mention the gettext requirement in INSTALL.md
- add the gettext BuildRequires in the RPM spec file
Signed-off-by: Pino Toscano <ptoscano at redhat.com>
---
INSTALL.md | 1 +
setup.py | 69 +++++++++++++-------------------------------
virt-manager.spec.in | 1 +
3 files changed, 22 insertions(+), 49 deletions(-)
diff --git a/INSTALL.md b/INSTALL.md
index 685c400f..7080fce8 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -30,6 +30,7 @@ A detailed dependency list can be found in
Minimum version requirements of major components:
+ - gettext
- python >= 3.4
- gtk3 >= 3.22
- libvirt-python >= 0.6.0
diff --git a/setup.py b/setup.py
index 7bc1e3a6..d1202c68 100755
--- a/setup.py
+++ b/setup.py
@@ -67,28 +67,6 @@ def _generate_meta_potfiles_in():
return potfiles
-def _generate_potfiles_in():
- def find(dirname, ext):
- ret = []
- for root, ignore, filenames in os.walk(dirname):
- for filename in fnmatch.filter(filenames, ext):
- ret.append(os.path.join(root, filename))
- ret.sort(key=lambda s: s.lower())
- return ret
-
- potfiles = ""
- potfiles += "\n".join(find("virtManager", "*.py")) + "\n\n"
- potfiles += "\n".join(find("virtinst", "*.py")) + "\n\n"
-
- potfiles += _generate_meta_potfiles_in()
- potfiles += "\n"
-
- potfiles += "\n".join(["[type: gettext/glade]" + f for
- f in find("ui", "*.ui")]) + "\n\n"
-
- return potfiles
-
-
class my_build_i18n(distutils.command.build.build):
"""
Add our desktop files to the list, saves us having to track setup.cfg
@@ -103,35 +81,23 @@ class my_build_i18n(distutils.command.build.build):
pass
def run(self):
- potfiles = _generate_potfiles_in()
- potpath = "po/POTFILES.in"
-
- try:
- print("Writing %s" % potpath)
- open(potpath, "w").write(potfiles)
- self._run()
- finally:
- print("Removing %s" % potpath)
- os.unlink(potpath)
-
- def _run(self):
- # Borrowed from python-distutils-extra
- po_dir = "po"
-
- # Update po(t) files and print a report
- # We have to change the working dir to the po dir for intltool
- cmd = ["intltool-update",
- (self.merge_po and "-r" or "-p"), "-g", "virt-manager"]
+ if self.merge_po:
+ self._msgmerge("po", "virt-manager.pot")
+ self._msgmerge("meta-po", "virt-manager-meta.pot")
+ self._msgfmt("po", "virt-manager")
+ self._merge_in("meta-po")
+
+ def _msgmerge(self, po_dir, pot_name):
+ pot_file = os.path.join(po_dir, pot_name)
+ for po_file in glob.glob("%s/*.po" % po_dir):
+ cmd = ["msgmerge", "--previous", "-o", po_file, po_file, pot_file]
+ self.spawn(cmd)
- wd = os.getcwd()
- os.chdir("po")
- self.spawn(cmd)
- os.chdir(wd)
- max_po_mtime = 0
+ def _msgfmt(self, po_dir, po_name):
for po_file in glob.glob("%s/*.po" % po_dir):
lang = os.path.basename(po_file[:-3])
mo_dir = os.path.join("build", "mo", lang, "LC_MESSAGES")
- mo_file = os.path.join(mo_dir, "virt-manager.mo")
+ mo_file = os.path.join(mo_dir, po_name + ".mo")
if not os.path.exists(mo_dir):
os.makedirs(mo_dir)
@@ -139,14 +105,19 @@ class my_build_i18n(distutils.command.build.build):
po_mtime = os.path.getmtime(po_file)
mo_mtime = (os.path.exists(mo_file) and
os.path.getmtime(mo_file)) or 0
- if po_mtime > max_po_mtime:
- max_po_mtime = po_mtime
if po_mtime > mo_mtime:
self.spawn(cmd)
targetpath = os.path.join("share/locale", lang, "LC_MESSAGES")
self.distribution.data_files.append((targetpath, (mo_file,)))
+ def _merge_in(self, po_dir):
+ max_po_mtime = 0
+ for po_file in glob.glob("%s/*.po" % po_dir):
+ po_mtime = os.path.getmtime(po_file)
+ if po_mtime > max_po_mtime:
+ max_po_mtime = po_mtime
+
# merge .in with translation
for (file_set, switch) in [(_desktop_files, "-d"),
(_appdata_files, "-x")]:
diff --git a/virt-manager.spec.in b/virt-manager.spec.in
index 1819b9ce..af2591ed 100644
--- a/virt-manager.spec.in
+++ b/virt-manager.spec.in
@@ -49,6 +49,7 @@ Recommends: libvirt-daemon-config-network
# Optional inspection of guests
Suggests: python3-libguestfs
+BuildRequires: gettext
BuildRequires: intltool
BuildRequires: /usr/bin/pod2man
BuildRequires: python3-devel
--
2.26.2
More information about the virt-tools-list
mailing list