diff --git a/hgext/relink.py b/hgext/relink.py
--- a/hgext/relink.py
+++ b/hgext/relink.py
@@ -84,7 +84,7 @@ def collect(src, ui):
     total = live * 3 // 2
     src = src.store.path
     pos = 0
-    ui.status(_("tip has %d files, estimated total number of files: %s\n")
+    ui.status(_("tip has %d files, estimated total number of files: %d\n")
               % (live, total))
     for dirpath, dirnames, filenames in os.walk(src):
         dirnames.sort()
diff --git a/mercurial/mail.py b/mercurial/mail.py
--- a/mercurial/mail.py
+++ b/mercurial/mail.py
@@ -127,7 +127,7 @@ def _smtp(ui):
     else:
         defaultport = 25
     mailport = util.getport(ui.config('smtp', 'port', defaultport))
-    ui.note(_('sending mail: smtp host %s, port %s\n') %
+    ui.note(_('sending mail: smtp host %s, port %d\n') %
             (mailhost, mailport))
     s.connect(host=mailhost, port=mailport)
     if starttls:
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2643,7 +2643,7 @@ def _expandaliases(aliases, tree, expand
             l = getlist(tree[2])
             if len(l) != len(alias.args):
                 raise error.ParseError(
-                    _('invalid number of arguments: %s') % len(l))
+                    _('invalid number of arguments: %d') % len(l))
             l = [_expandaliases(aliases, a, [], cache) for a in l]
             result = _expandargs(result, dict(zip(alias.args, l)))
     else:
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -404,7 +404,7 @@ class fncache(object):
             fp.seek(0)
             for n, line in enumerate(fp):
                 if not line.rstrip('\n'):
-                    t = _('invalid entry in fncache, line %s') % (n + 1)
+                    t = _('invalid entry in fncache, line %d') % (n + 1)
                     raise error.Abort(t)
         fp.close()