diff --git a/zenmap/radialnet/gui/NodeNotebook.py b/zenmap/radialnet/gui/NodeNotebook.py
index 30a329119..5c5b51789 100644
--- a/zenmap/radialnet/gui/NodeNotebook.py
+++ b/zenmap/radialnet/gui/NodeNotebook.py
@@ -83,7 +83,7 @@ UNKNOWN_SERVICE_COLOR = '#d5d5d5'
TRACE_HEADER = ['TTL', 'RTT', 'IP', _('Hostname')]
TRACE_TEXT = _(
- "Traceroute on port %s/%s totalized %d known hops.")
+ "Traceroute on port %(port)s/%(proto)s took %(hops)d known hops.")
NO_TRACE_TEXT = _("No traceroute information available.")
@@ -98,7 +98,7 @@ OSCLASS_HEADER = ['%', _('Vendor'), _('Type'), _('Family'), _('Version')]
USED_PORTS_TEXT = "%d/%s %s"
TCP_SEQ_NOTE = _("""\
-* TCP sequence index equal to %d and difficulty is "%s".\
+* TCP sequence index equal to %(index)d and difficulty is "%(difficulty)s".\
""")
@@ -220,7 +220,7 @@ class ServicesPage(Gtk.Notebook):
if key in ['servicefp']:
- text = _('[%d] service: %s') % (port['id'], key)
+ text = _('[%(port)d] service: %(servicefp)s') % (port['id'], key)
self.__select_combobox.append_text(text)
self.__text.append(port['service'][key])
@@ -420,10 +420,7 @@ class SystemPage(BWScrolledWindow):
self.__uptime_label = BWSectionLabel(_('Last boot:'))
- seconds = self.__node.get_info('uptime')['seconds']
- lastboot = self.__node.get_info('uptime')['lastboot']
-
- text = _('%s (%s seconds).') % (lastboot, seconds)
+ text = _('%(lastboot)s (%(seconds)s seconds).') % self.__node.get_info('uptime')
self.__uptime_value = BWLabel(text)
self.__uptime_value.set_selectable(True)
@@ -732,9 +729,9 @@ class TraceroutePage(BWVBox):
self.__trace_scroll.add_with_viewport(self.__trace_treeview)
- self.__trace_info = (self.__node.get_info('trace')['port'],
- self.__node.get_info('trace')['protocol'],
- len(self.__node.get_info('trace')['hops']))
+ self.__trace_info = {port = self.__node.get_info('trace')['port'],
+ proto = self.__node.get_info('trace')['protocol'],
+ hops = len(self.__node.get_info('trace')['hops'])}
self.__trace_label = BWLabel(TRACE_TEXT % self.__trace_info)
self.__trace_label.set_use_markup(True)
diff --git a/zenmap/zenmapCore/NmapParser.py b/zenmap/zenmapCore/NmapParser.py
index 5cde34cd3..3d1af1cbf 100644
--- a/zenmap/zenmapCore/NmapParser.py
+++ b/zenmap/zenmapCore/NmapParser.py
@@ -347,13 +347,13 @@ class HostInfo(object):
services = []
for p in self.ports:
services.append({
- "service_name": p.get("service_name", _("unknown")),
+ "service_name": p.get("service_name", "unknown"),
"portid": p.get("portid", ""),
"service_version": p.get("service_version",
_("Unknown version")),
"service_product": p.get("service_product", ""),
"service_extrainfo": p.get("service_extrainfo", ""),
- "port_state": p.get("port_state", _("unknown")),
+ "port_state": p.get("port_state", "unknown"),
"protocol": p.get("protocol", "")
})
return services
@@ -639,8 +639,10 @@ in epoch format!")
if scan_name:
return scan_name
if self.profile_name and self.get_targets():
- return _("%s on %s") % (self.profile_name,
- join_quoted(self.get_targets()))
+ return _("%(profile_name)s on %(targets)s") % {
+ profile_name = self.profile_name,
+ targets = join_quoted(self.get_targets())
+ }
return self.get_nmap_command()
def set_scan_name(self, scan_name):
diff --git a/zenmap/zenmapCore/UmitConf.py b/zenmap/zenmapCore/UmitConf.py
index ebf49832b..88b9ba07e 100644
--- a/zenmap/zenmapCore/UmitConf.py
+++ b/zenmap/zenmapCore/UmitConf.py
@@ -195,7 +195,7 @@ class Profile(UmitConfigParser, object):
self.read(user_profile)
except ConfigParser_Error as e:
# No scan profiles found is not a reason to crash.
- self.add_profile(_("Profiles not found"),
+ self.add_profile(_("No profiles found"),
command="nmap",
description=_("The {} file is missing or corrupted"
).format(user_profile))
diff --git a/zenmap/zenmapCore/data/locale/zenmap.pot b/zenmap/zenmapCore/data/locale/zenmap.pot
index 0f1844bdc..8dbb92cdf 100644
--- a/zenmap/zenmapCore/data/locale/zenmap.pot
+++ b/zenmap/zenmapCore/data/locale/zenmap.pot
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Zenmap\n"
"Report-Msgid-Bugs-To: dev@nmap.org\n"
-"POT-Creation-Date: 2025-05-16 19:56+0000\n"
+"POT-Creation-Date: 2025-05-19 16:32+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -16,18 +16,13 @@ msgstr ""
msgid "Unknown Host"
msgstr ""
-#: zenmapCore/NmapParser.py:350 zenmapCore/NmapParser.py:356
-#: zenmapGUI/ScanOpenPortsPage.py:400
-msgid "unknown"
-msgstr ""
-
#: zenmapCore/NmapParser.py:353
msgid "Unknown version"
msgstr ""
#: zenmapCore/NmapParser.py:642
#, python-format
-msgid "%s on %s"
+msgid "%(profile_name)s on %(targets)s"
msgstr ""
#: zenmapCore/UmitOptionParser.py:77
@@ -65,7 +60,7 @@ msgid ""
msgstr ""
#: zenmapCore/UmitConf.py:198
-msgid "Profiles not found"
+msgid "No profiles found"
msgstr ""
#: zenmapCore/UmitConf.py:200
@@ -187,11 +182,11 @@ msgstr ""
msgid "Cannot open selected file"
msgstr ""
-#: zenmapGUI/DiffCompare.py:208
+#: zenmapGUI/DiffCompare.py:209
#, python-format
msgid ""
-" This error occurred while trying to open the file:\n"
-" %s"
+"This error occurred while trying to open the file:\n"
+"%s"
msgstr ""
#: zenmapGUI/DiffCompare.py:256 zenmapGUI/MainWindow.py:289
@@ -334,7 +329,7 @@ msgstr ""
msgid "Search for a scan result"
msgstr ""
-#: zenmapGUI/MainWindow.py:272 zenmapGUI/ScanInterface.py:874
+#: zenmapGUI/MainWindow.py:272 zenmapGUI/ScanInterface.py:876
msgid "Filter Hosts"
msgstr ""
@@ -487,19 +482,19 @@ msgstr ""
#, python-format
msgid ""
"An error occurred when saving to\n"
-"%s\n"
-"The error was: %s."
+"%(configfile)s\n"
+"The error was: %(error)s."
msgstr ""
-#: zenmapGUI/MainWindow.py:944
+#: zenmapGUI/MainWindow.py:947
msgid "Can't find documentation files"
msgstr ""
-#: zenmapGUI/MainWindow.py:945
+#: zenmapGUI/MainWindow.py:948
#, python-format
msgid ""
-"There was an error loading the documentation file %s (%s). See the online "
-"documentation at %s."
+"There was an error loading the documentation file %(helpfile)s (%(error)s). "
+"See the online documentation at %(url)s."
msgstr ""
#: zenmapGUI/ScanInterface.py:379
@@ -568,32 +563,32 @@ msgid ""
"%s"
msgstr ""
-#: zenmapGUI/ScanInterface.py:687
+#: zenmapGUI/ScanInterface.py:688
#, python-format
-msgid "%d/%d hosts shown"
-msgstr ""
-
-#: zenmapGUI/ScanInterface.py:924
-msgid "Nmap Output"
-msgstr ""
-
-#: zenmapGUI/ScanInterface.py:925
-msgid "Ports / Hosts"
+msgid "%(num_shown)d/%(total)d hosts shown"
msgstr ""
#: zenmapGUI/ScanInterface.py:926
-msgid "Topology"
+msgid "Nmap Output"
msgstr ""
#: zenmapGUI/ScanInterface.py:927
-msgid "Host Details"
+msgid "Ports / Hosts"
msgstr ""
#: zenmapGUI/ScanInterface.py:928
+msgid "Topology"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:929
+msgid "Host Details"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:930
msgid "Scans"
msgstr ""
-#: zenmapGUI/ScanInterface.py:949
+#: zenmapGUI/ScanInterface.py:951
msgid "No host selected."
msgstr ""
@@ -894,7 +889,7 @@ msgstr ""
#: zenmapGUI/About.py:132
#, python-format
-msgid "About %s and %s"
+msgid "About %(nmap)s and %(zenmap)s"
msgstr ""
#: zenmapGUI/About.py:151
@@ -907,34 +902,35 @@ msgstr ""
#: zenmapGUI/About.py:156
#, python-format
msgid ""
-"%s is a multi-platform graphical %s frontend and results viewer. It was "
-"originally derived from %s."
+"%(zenmap)s is a multi-platform graphical %(nmap)s frontend and results "
+"viewer. It was originally derived from %(umit)s."
msgstr ""
-#: zenmapGUI/About.py:162
+#: zenmapGUI/About.py:164
#, python-format
msgid ""
-"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+"%(umit)s is a %(nmap)s GUI created as part of the Nmap/Google Summer of Code "
+"program."
msgstr ""
-#: zenmapGUI/About.py:164 zenmapGUI/About.py:206
+#: zenmapGUI/About.py:166 zenmapGUI/About.py:208
#, python-format
msgid "%s credits"
msgstr ""
-#: zenmapGUI/About.py:248
+#: zenmapGUI/About.py:250
msgid "Written by"
msgstr ""
-#: zenmapGUI/About.py:250
+#: zenmapGUI/About.py:252
msgid "Design"
msgstr ""
-#: zenmapGUI/About.py:254
+#: zenmapGUI/About.py:256
msgid "Contributors"
msgstr ""
-#: zenmapGUI/About.py:256
+#: zenmapGUI/About.py:258
msgid "Translation"
msgstr ""
@@ -982,7 +978,7 @@ msgstr ""
#, python-format
msgid ""
"Topology is disabled because too many hosts can cause it\n"
-"to run slowly. The limit is %d hosts and there are %d."
+"to run slowly. The limit is %(limit)d hosts and there are %(num)d."
msgstr ""
#: zenmapGUI/FileChoosers.py:78
@@ -1103,53 +1099,54 @@ msgstr ""
#: zenmapGUI/App.py:221
#, python-format
msgid ""
-"There was an error creating the directory %s or one of the files in it. The "
-"directory is created by copying the contents of %s. The specific error was\n"
+"There was an error creating the directory %(dirname)s or one of the files in "
+"it. The directory is created by copying the contents of %(configdir)s. The "
+"specific error was\n"
"\n"
-"%s\n"
+"%(error)s\n"
"\n"
-"%s needs to create this directory to store information such as the list of "
-"scan profiles. Check for access to the directory and try again."
-msgstr ""
-
-#: zenmapGUI/App.py:246
-msgid "Error parsing the configuration file"
+"%(zenmap)s needs to create this directory to store information such as the "
+"list of scan profiles. Check for access to the directory and try again."
msgstr ""
#: zenmapGUI/App.py:247
-#, python-format
-msgid ""
-"There was an error parsing the configuration file %s. The specific error "
-"was\n"
-"\n"
-"%s\n"
-"\n"
-"%s can continue without this file but any information in it will be ignored "
-"until it is repaired."
+msgid "Error parsing the configuration file"
msgstr ""
-#: zenmapGUI/App.py:261
+#: zenmapGUI/App.py:248
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %(filename)s. The specific "
+"error was\n"
+"\n"
+"%(error)s\n"
+"\n"
+"%(zenmap)s can continue without this file but any information in it will be "
+"ignored until it is repaired."
+msgstr ""
+
+#: zenmapGUI/App.py:263
msgid "Restore default configuration?"
msgstr ""
-#: zenmapGUI/App.py:262
+#: zenmapGUI/App.py:264
#, python-format
msgid ""
-"To avoid further errors parsing the configuration file %s, you can copy the "
-"default configuration from %s.\n"
+"To avoid further errors parsing the configuration file %(filename)s, you can "
+"copy the default configuration from %(dirname)s.\n"
"\n"
"Do this now? "
msgstr ""
-#: zenmapGUI/App.py:321
+#: zenmapGUI/App.py:323
#, python-format
msgid ""
-"You are trying to run %s with a non-root user!\n"
+"You are trying to run %(zenmap)s with a non-root user!\n"
"\n"
-"Some %s options need root privileges to work."
+"Some %(nmap)s options need root privileges to work."
msgstr ""
-#: zenmapGUI/App.py:326
+#: zenmapGUI/App.py:328
msgid "Non-root user"
msgstr ""
@@ -1312,7 +1309,8 @@ msgstr ""
#: radialnet/gui/NodeNotebook.py:86
#, python-format
-msgid "Traceroute on port %s/%s totalized %d known hops."
+msgid ""
+"Traceroute on port %(port)s/%(proto)s took %(hops)d known hops."
msgstr ""
#: radialnet/gui/NodeNotebook.py:88
@@ -1334,8 +1332,8 @@ msgstr ""
#: radialnet/gui/NodeNotebook.py:100
#, python-format
msgid ""
-"* TCP sequence index equal to %d and difficulty is \"%s"
-"\"."
+"* TCP sequence index equal to %(index)d and difficulty "
+"is \"%(difficulty)s\"."
msgstr ""
#: radialnet/gui/NodeNotebook.py:134
@@ -1351,7 +1349,7 @@ msgstr ""
msgid "Ports (%s)"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:196 radialnet/gui/NodeNotebook.py:707
+#: radialnet/gui/NodeNotebook.py:196 radialnet/gui/NodeNotebook.py:704
msgid ""
msgstr ""
@@ -1361,7 +1359,7 @@ msgstr ""
#: radialnet/gui/NodeNotebook.py:223
#, python-format
-msgid "[%d] service: %s"
+msgid "[%(port)d] service: %(servicefp)s"
msgstr ""
#: radialnet/gui/NodeNotebook.py:228
@@ -1401,32 +1399,32 @@ msgstr ""
msgid "Hostname:"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:426
+#: radialnet/gui/NodeNotebook.py:423
#, python-format
-msgid "%s (%s seconds)."
+msgid "%(lastboot)s (%(seconds)s seconds)."
msgstr ""
-#: radialnet/gui/NodeNotebook.py:489
+#: radialnet/gui/NodeNotebook.py:486
msgid "Match"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:530 radialnet/gui/NodeNotebook.py:580
+#: radialnet/gui/NodeNotebook.py:527 radialnet/gui/NodeNotebook.py:577
msgid "Class"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:538
+#: radialnet/gui/NodeNotebook.py:535
msgid "Used ports:"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:561
+#: radialnet/gui/NodeNotebook.py:558
msgid "Fingerprint"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:581
+#: radialnet/gui/NodeNotebook.py:578
msgid "Values"
msgstr ""
-#: radialnet/gui/NodeNotebook.py:585
+#: radialnet/gui/NodeNotebook.py:582
msgid "TCP Timestamp"
msgstr ""
diff --git a/zenmap/zenmapGUI/About.py b/zenmap/zenmapGUI/About.py
index 6148c312c..12b71ebc5 100644
--- a/zenmap/zenmapGUI/About.py
+++ b/zenmap/zenmapGUI/About.py
@@ -129,8 +129,8 @@ class About(HIGDialog):
have roughly the same feel as Gtk.AboutDialog."""
def __init__(self):
HIGDialog.__init__(self)
- self.set_title(_("About %s and %s") % (
- NMAP_DISPLAY_NAME, APP_DISPLAY_NAME))
+ self.set_title(_("About %(nmap)s and %(zenmap)s") % {
+ nmap = NMAP_DISPLAY_NAME, zenmap = APP_DISPLAY_NAME })
self.vbox.set_border_width(12)
self.vbox.set_spacing(12)
@@ -153,14 +153,16 @@ class About(HIGDialog):
self.vbox.pack_start(entry, True, True, 0)
entry = _program_entry(APP_DISPLAY_NAME, APP_WEB_SITE, _(
- "%s is a multi-platform graphical %s frontend and results viewer. "
- "It was originally derived from %s.") % (
- APP_DISPLAY_NAME, NMAP_DISPLAY_NAME, UMIT_DISPLAY_NAME))
+ "%(zenmap)s is a multi-platform graphical %(nmap)s frontend and results viewer. "
+ "It was originally derived from %(umit)s.") % {
+ zenmap = APP_DISPLAY_NAME,
+ nmap = NMAP_DISPLAY_NAME,
+ umit = UMIT_DISPLAY_NAME})
self.vbox.pack_start(entry, True, True, 0)
entry = _program_entry(UMIT_DISPLAY_NAME, UMIT_WEB_SITE, _(
- "%s is an %s GUI created as part of the Nmap/Google Summer "
- "of Code program.") % (UMIT_DISPLAY_NAME, NMAP_DISPLAY_NAME))
+ "%(umit)s is a %(nmap)s GUI created as part of the Nmap/Google Summer "
+ "of Code program.") % {umit = UMIT_DISPLAY_NAME, nmap = NMAP_DISPLAY_NAME})
button = Gtk.Button.new_with_label(_("%s credits") % UMIT_DISPLAY_NAME)
button.connect("clicked", self._show_umit_credits)
entry.hbox.pack_start(button, False, True, 0)
diff --git a/zenmap/zenmapGUI/App.py b/zenmap/zenmapGUI/App.py
index be24d3180..b37a65161 100644
--- a/zenmap/zenmapGUI/App.py
+++ b/zenmap/zenmapGUI/App.py
@@ -219,17 +219,18 @@ def run():
message_format=_(
"Error creating the per-user configuration directory"),
secondary_text=_("""\
-There was an error creating the directory %s or one of the files in it. \
-The directory is created by copying the contents of %s. \
+There was an error creating the directory %(dirname)s or one of the files in it. \
+The directory is created by copying the contents of %(configdir)s. \
The specific error was
-%s
+%(error)s
-%s needs to create this directory to store information such as the list of \
-scan profiles. Check for access to the directory and try again.""") % (
- repr(Path.user_config_dir), repr(Path.config_dir),
- repr(str(e)), APP_DISPLAY_NAME
- )
+%(zenmap)s needs to create this directory to store information such as the list of \
+scan profiles. Check for access to the directory and try again.""") % {
+ dirname = repr(Path.user_config_dir),
+ configdir = repr(Path.config_dir),
+ error = repr(str(e)), zenmap = APP_DISPLAY_NAME
+ }
)
error_dialog.run()
error_dialog.destroy()
@@ -245,13 +246,14 @@ scan profiles. Check for access to the directory and try again.""") % (
error_dialog = HIGAlertDialog(
message_format=_("Error parsing the configuration file"),
secondary_text=_("""\
-There was an error parsing the configuration file %s. \
+There was an error parsing the configuration file %(filename)s. \
The specific error was
-%s
+%(error)s
-%s can continue without this file but any information in it will be ignored \
-until it is repaired.""") % (Path.user_config_file, str(e), APP_DISPLAY_NAME)
+%(zenmap)s can continue without this file but any information in it will be ignored \
+until it is repaired.""") % {
+ filename = Path.user_config_file, error = str(e), zenmap = APP_DISPLAY_NAME}
)
error_dialog.run()
error_dialog.destroy()
@@ -260,11 +262,11 @@ until it is repaired.""") % (Path.user_config_file, str(e), APP_DISPLAY_NAME)
type=Gtk.MessageType.QUESTION,
message_format=_("Restore default configuration?"),
secondary_text=_("""\
-To avoid further errors parsing the configuration file %s, \
-you can copy the default configuration from %s.
+To avoid further errors parsing the configuration file %(filename)s, \
+you can copy the default configuration from %(dirname)s.
Do this now? \
-""") % (Path.user_config_file, global_config_path),
+""") % {filename = Path.user_config_file, dirname = global_config_path},
)
repair_dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
repair_dialog.set_default_response(Gtk.ResponseType.CANCEL)
@@ -318,10 +320,10 @@ Do this now? \
class NonRootWarning (HIGAlertDialog):
def __init__(self):
- warning_text = _('''You are trying to run %s with a non-root user!
+ warning_text = _('''You are trying to run %(zenmap)s with a non-root user!
-Some %s options need root privileges to work.''') % (
- APP_DISPLAY_NAME, NMAP_DISPLAY_NAME)
+Some %(nmap)s options need root privileges to work.''') % {
+ zenmap = APP_DISPLAY_NAME, nmap = NMAP_DISPLAY_NAME}
HIGAlertDialog.__init__(self, message_format=_('Non-root user'),
secondary_text=warning_text)
diff --git a/zenmap/zenmapGUI/DiffCompare.py b/zenmap/zenmapGUI/DiffCompare.py
index 873ce5ba4..f4e8c7196 100644
--- a/zenmap/zenmapGUI/DiffCompare.py
+++ b/zenmap/zenmapGUI/DiffCompare.py
@@ -205,9 +205,9 @@ class ScanChooser(HIGVBox):
alert = HIGAlertDialog(
message_format='%s' % _(
'Cannot open selected file'),
- secondary_text=_("""\
- This error occurred while trying to open the file:
- %s""") % str(e))
+ secondary_text=_(
+ "This error occurred while trying to open the file:\n%s"
+ ) % str(e))
alert.run()
alert.destroy()
return False
diff --git a/zenmap/zenmapGUI/MainWindow.py b/zenmap/zenmapGUI/MainWindow.py
index 4d5e81885..3f46b0440 100644
--- a/zenmap/zenmapGUI/MainWindow.py
+++ b/zenmap/zenmapGUI/MainWindow.py
@@ -896,9 +896,12 @@ This scan has not been run yet. Start the scan with the "Scan" button first.'))
message_format=_("Can't save Zenmap configuration"),
# newline before path to help avoid weird line wrapping
secondary_text=_(
- 'An error occurred when saving to\n%s'
- '\nThe error was: %s.'
- ) % (Path.user_config_file, config_parser.failed))
+ 'An error occurred when saving to\n%(configfile)s'
+ '\nThe error was: %(error)s.'
+ ) % {
+ configfile = Path.user_config_file,
+ error = config_parser.failed
+ })
alert.run()
alert.destroy()
@@ -943,9 +946,10 @@ This scan has not been run yet. Start the scan with the "Scan" button first.'))
d = HIGAlertDialog(parent=self,
message_format=_("Can't find documentation files"),
secondary_text=_("""\
-There was an error loading the documentation file %s (%s). See the \
-online documentation at %s.\
-""") % (doc_path, str(e), APP_DOCUMENTATION_SITE))
+There was an error loading the documentation file %(helpfile)s (%(error)s). See the \
+online documentation at %(url)s.\
+""") % {
+ helpfile = doc_path, error = str(e), url = APP_DOCUMENTATION_SITE})
d.run()
d.destroy()
diff --git a/zenmap/zenmapGUI/ScanInterface.py b/zenmap/zenmapGUI/ScanInterface.py
index b64b9deda..79a81e851 100644
--- a/zenmap/zenmapGUI/ScanInterface.py
+++ b/zenmap/zenmapGUI/ScanInterface.py
@@ -684,9 +684,11 @@ class ScanInterface(HIGVBox):
self.host_view_selection.select_iter(
self.scan_result.scan_host_view.host_list.get_iter_first())
- self.filter_bar.set_information_text(_("%d/%d hosts shown") %
- (len(self.inventory.get_hosts_up()),
- len(NetworkInventory.get_hosts_up(self.inventory))))
+ self.filter_bar.set_information_text(
+ _("%(num_shown)d/%(total)d hosts shown") % {
+ num_shown = len(self.inventory.get_hosts_up()),
+ total = len(NetworkInventory.get_hosts_up(self.inventory))
+ })
mode = self.scan_result.scan_host_view.mode
if mode == ScanHostsView.HOST_MODE:
diff --git a/zenmap/zenmapGUI/ScanOpenPortsPage.py b/zenmap/zenmapGUI/ScanOpenPortsPage.py
index d031f3e3a..b69d7f15b 100644
--- a/zenmap/zenmapGUI/ScanOpenPortsPage.py
+++ b/zenmap/zenmapGUI/ScanOpenPortsPage.py
@@ -397,7 +397,7 @@ class HostOpenPorts(HIGVBox):
p["host"].get_hostname(),
int(p.get('portid', "0")),
p.get('protocol', ""),
- p.get('port_state', _("unknown")),
+ p.get('port_state', "unknown"),
get_version_string(p)
]
)
diff --git a/zenmap/zenmapGUI/TopologyPage.py b/zenmap/zenmapGUI/TopologyPage.py
index ef2ef8d0b..bb9d33be5 100644
--- a/zenmap/zenmapGUI/TopologyPage.py
+++ b/zenmap/zenmapGUI/TopologyPage.py
@@ -139,8 +139,8 @@ class TopologyPage(HIGVBox):
self.slow_label.set_text(_("""\
Topology is disabled because too many hosts can cause it
-to run slowly. The limit is %d hosts and there are %d.\
-""" % (SLOW_LIMIT, len(hosts_up))))
+to run slowly. The limit is %(limit)d hosts and there are %(num)d.\
+""" % {limit = SLOW_LIMIT, num = len(hosts_up)}))
if len(hosts_up) <= SLOW_LIMIT:
self.radialnet.show()