Index: django/utils/translation/__init__.py
===================================================================
--- django/utils/translation/__init__.py	(revision 6411)
+++ django/utils/translation/__init__.py	(working copy)
@@ -39,7 +39,7 @@
             g['real_%s' % name] = getattr(trans, name)
 
     # Make the originally requested function call on the way out the door.
-    return g[caller](*args, **kwargs)
+    return g['real_%s' % caller](*args, **kwargs)
 
 g = globals()
 for name in __all__:
Index: tests/regressiontests/i18n/tests.py
===================================================================
--- tests/regressiontests/i18n/tests.py	(revision 6411)
+++ tests/regressiontests/i18n/tests.py	(working copy)
@@ -30,4 +30,12 @@
 >>> s4 = ugettext_lazy('Some other string')
 >>> s == s4
 False
+
+unicode(string_concat(...)) should not raise a TypeError - #4796
+
+>>> import django.utils.translation
+>>> reload(django.utils.translation)
+<module 'django.utils.translation' from ...>
+>>> unicode(django.utils.translation.string_concat("dja", "ngo"))
+u'django'
 """
