diff --git a/django/core/management/base.py b/django/core/management/base.py
index db855e1..6be57d8 100644
--- a/django/core/management/base.py
+++ b/django/core/management/base.py
@@ -137,6 +137,7 @@ class BaseCommand(object):
 
     # Configuration shortcuts that alter various logic.
     can_import_settings = True
+    force_en_us_locale = True
     requires_model_validation = True
     output_transaction = False  # Whether to wrap the output in a "BEGIN; COMMIT;"
 
@@ -204,17 +205,12 @@ class BaseCommand(object):
         stderr.
         """
         show_traceback = options.get('traceback', False)
-
-        # Switch to English, because django-admin.py creates database content
-        # like permissions, and those shouldn't contain any translations.
-        # But only do this if we can assume we have a working settings file,
-        # because django.utils.translation requires settings.
-        saved_lang = None
+        self.stdout = options.get('stdout', sys.stdout)
+        self.stderr = options.get('stderr', sys.stderr)
         if self.can_import_settings:
             try:
-                from django.utils import translation
-                saved_lang = translation.get_language()
-                translation.activate('en-us')
+                from django.conf import settings
+                settings.__getattr__('_', None)
             except ImportError, e:
                 # If settings should be available, but aren't,
                 # raise the error and quit.
@@ -223,10 +219,23 @@ class BaseCommand(object):
                 else:
                     sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
                 sys.exit(1)
-
+                
+                
+        # Switch to English, because django-admin.py creates database content
+        # like permissions, and those shouldn't contain any translations.
+        # But only do this if we can assume we have a working settings file,
+        # because django.utils.translation requires settings.
+        saved_lang = None
+        if self.force_en_us_locale:
+            if not self.can_import_settings:
+                raise StandardError("Can't force locale with can_import_settings set to False")
+            from django.utils import translation
+            saved_lang = translation.get_language()
+            translation.activate('en-us')
+            if int(options.get('verbosity', 1)) >= 2: 
+                self.stdout.write("Active language set to 'en-us'.\n")
+                
         try:
-            self.stdout = options.get('stdout', sys.stdout)
-            self.stderr = options.get('stderr', sys.stderr)
             if self.requires_model_validation:
                 self.validate()
             output = self.handle(*args, **options)
diff --git a/django/core/management/commands/shell.py b/django/core/management/commands/shell.py
index 26cbd7f..902a4fd 100644
--- a/django/core/management/commands/shell.py
+++ b/django/core/management/commands/shell.py
@@ -10,6 +10,7 @@ class Command(NoArgsCommand):
     help = "Runs a Python interactive interpreter. Tries to use IPython, if it's available."
     shells = ['ipython', 'bpython']
     requires_model_validation = False
+    force_en_us_locale = False
 
     def ipython(self):
         try:
diff --git a/tests/modeltests/user_commands/management/commands/force_en_us_locale_false.py b/tests/modeltests/user_commands/management/commands/force_en_us_locale_false.py
new file mode 100644
index 0000000..7bae951
--- /dev/null
+++ b/tests/modeltests/user_commands/management/commands/force_en_us_locale_false.py
@@ -0,0 +1,8 @@
+from django.core.management.base import BaseCommand
+from django.utils import translation
+
+class Command(BaseCommand):
+    can_import_settings=True
+    force_en_us_locale=False
+    def handle(self, *args, **options):
+        return translation.get_language()
diff --git a/tests/modeltests/user_commands/management/commands/force_en_us_locale_true.py b/tests/modeltests/user_commands/management/commands/force_en_us_locale_true.py
new file mode 100644
index 0000000..0c49eb2
--- /dev/null
+++ b/tests/modeltests/user_commands/management/commands/force_en_us_locale_true.py
@@ -0,0 +1,8 @@
+from django.core.management.base import BaseCommand
+from django.utils import translation
+
+class Command(BaseCommand):
+    can_import_settings=True
+    force_en_us_locale=True
+    def handle(self, *args, **options):
+        return translation.get_language()
diff --git a/tests/modeltests/user_commands/tests.py b/tests/modeltests/user_commands/tests.py
index e138e07..d7fc35c 100644
--- a/tests/modeltests/user_commands/tests.py
+++ b/tests/modeltests/user_commands/tests.py
@@ -23,9 +23,21 @@ class CommandTests(TestCase):
 
     def test_language_preserved(self):
         out = StringIO()
-        with translation.override('fr'):
+        with translation.override('pl'):
             management.call_command('dance', stdout=out)
-            self.assertEqual(translation.get_language(), 'fr')
+            self.assertEqual(translation.get_language(), 'pl')
 
     def test_explode(self):
         self.assertRaises(CommandError, management.call_command, ('explode',))
+        
+        # Forces en_us when set to true
+        out = StringIO()
+        with translation.override('pl'):
+            management.call_command('force_en_us_locale_true', stdout=out)
+            self.assertEqual(out.getvalue(), "en-us")        
+
+        # Leaves locale from settings when set to false
+        out = StringIO()
+        with translation.override('pl'):
+            management.call_command('force_en_us_locale_false', stdout=out)
+            self.assertEqual(out.getvalue(), "pl")
