[virt-manager PATCH 17/21] i18n: improve translatability of vmmAddHardware.input_pretty_name

Pino Toscano ptoscano at redhat.com
Mon Jul 13 08:25:55 UTC 2020


A single "Generic" message glued together with capitalized names of bus
and type is a really bad string puzzle:
a) the parts cannot be moved around, while they could depending on the
   language
b) the type cannot be translated, and things like mouse/keyboard/tablet
   are usually translated
c) "generic" as adjective must get the proper gender depending on the
   name it refers to

Hence, unroll 6 more whole strings for the most common combinations of
type and bus. Otherwise, use strings with the type, as it is needed
because of (c) above. At last, fallback to a generic string, still
allowing (a) above. In both cases of fallback, the bus is still properly
translated.

In all the cases, use constants instead of explicit identifier strings.

Signed-off-by: Pino Toscano <ptoscano at redhat.com>
---
 virtManager/addhardware.py | 36 +++++++++++++++++++++++++++++-------
 1 file changed, 29 insertions(+), 7 deletions(-)

diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index b5e166c0..5d966655 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -616,13 +616,35 @@ class vmmAddHardware(vmmGObjectUI):
 
     @staticmethod
     def input_pretty_name(typ, bus):
-        if typ == "tablet" and bus == "usb":
-            return _("EvTouch USB Graphics Tablet")
-
-        if bus in ["usb", "ps2"]:
-            return _("Generic") + (" %s %s" %
-                (bus.upper(), str(typ).capitalize()))
-        return "%s %s" % (str(bus).capitalize(), str(typ).capitalize())
+        pretty_mappings = {
+            (DeviceInput.TYPE_MOUSE, DeviceInput.BUS_PS2): _("Generic PS/2 Mouse"),
+            (DeviceInput.TYPE_MOUSE, DeviceInput.BUS_USB): _("Generic USB Mouse"),
+            (DeviceInput.TYPE_TABLET, DeviceInput.BUS_USB): _("EvTouch USB Graphics Tablet"),
+            (DeviceInput.TYPE_TABLET, DeviceInput.BUS_VIRTIO): _("Generic VirtIO Tablet"),
+            (DeviceInput.TYPE_KEYBOARD, DeviceInput.BUS_PS2): _("Generic PS/2 Keyboard"),
+            (DeviceInput.TYPE_KEYBOARD, DeviceInput.BUS_USB): _("Generic USB Keyboard"),
+            (DeviceInput.TYPE_KEYBOARD, DeviceInput.BUS_VIRTIO): _("Generic VirtIO Keyboard"),
+        }
+        try:
+            return pretty_mappings[(typ, bus)]
+        except KeyError:
+            bus_mappings = {
+                DeviceInput.BUS_PS2: _("PS/2"),
+                DeviceInput.BUS_USB: _("USB"),
+                DeviceInput.BUS_VIRTIO: _("VirtIO"),
+                DeviceInput.BUS_XEN: _("Xen"),
+            }
+            pretty_bus = bus_mappings.get(bus, str(bus).capitalize())
+            if typ == DeviceInput.TYPE_MOUSE:
+                return _("Generic %(bus)s Mouse") % {"bus": pretty_bus}
+            if typ == DeviceInput.TYPE_TABLET:
+                return _("Generic %(bus)s Tablet") % {"bus": pretty_bus}
+            if typ == DeviceInput.TYPE_KEYBOARD:
+                return _("Generic %(bus)s Keyboard") % {"bus": pretty_bus}
+            return _("Generic %(bus)s %(type)s") % {
+                "bus": pretty_bus,
+                "type": str(typ).capitalize()
+            }
 
     @staticmethod
     def interface_recommended_models(guest):
-- 
2.26.2




More information about the virt-tools-list mailing list