diff --git a/django/utils/functional.py b/django/utils/functional.py
index 085a8fc..ad64802 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -1,6 +1,8 @@
 import copy
+import inspect
 import operator
 from functools import wraps, update_wrapper
+import re
 import sys
 
 from django.utils import six
@@ -153,6 +155,13 @@ def lazy(func, *resultclasses):
         __hash__ = object.__hash__
 
         def __mod__(self, rhs):
+            if len(inspect.getargspec(func)[0]) > len(self.__args) and isinstance(rhs, dict):
+                # Complete missing argument by looking for '%(var)d' in rhs,
+                # used mainly by ungettext_lazy
+                m = re.search('%\(([^)]*)\)d', self.__args[0])
+                key = m.groups()[0] if m else None
+                if key and key in rhs:
+                    self.__args = self.__args + (rhs[key],)
             if self._delegate_bytes and not six.PY3:
                 return bytes(self) % rhs
             elif self._delegate_text:
