a blog about programming, photography and electronics.

Fix “ValueError: unknown locale: UTF-8″ under Mac OS X 10.7 – Lion

Posted: February 16th, 2012 | Author: | Filed under: Python | 14 Comments »

Today I was trying the new Django 1.4 Beta 1 and when I run the syncdb command I got this error:

(app)patrick@app$ python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Traceback (most recent call last):
File "manage.py", line 9, in
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 110, in handle_noargs
emit_post_sync_signal(created_models, verbosity, interactive, db)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/sql.py", line 189, in emit_post_sync_signal
interactive=interactive, db=db)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send
response = receiver(signal=self, sender=sender, **named)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 73, in create_superuser
call_command("createsuperuser", interactive=True)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 150, in call_command
return klass.execute(*args, **defaults)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 63, in handle
default_username = get_default_username()
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 105, in get_default_username
default_username = get_system_username()
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 85, in get_system_username
return getpass.getuser().decode(locale.getdefaultlocale()[1])
File "/Users/patrick/.virtualenvs/app/lib/python2.7/locale.py", line 496, in getdefaultlocale
return _parse_localename(localename)
File "/Users/patrick/.virtualenvs/app/lib/python2.7/locale.py", line 428, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

More precisely the error is

ValueError: unknown locale: UTF-8

After doing a little search on Google I found this ticket on the Django bug tracker.

The solution was really simple I just needed to export some variables in my bash enviroment. So I edited my .bash_profile file adding these lines:

export LANG="it_IT.UTF-8"
export LC_COLLATE="it_IT.UTF-8"
export LC_CTYPE="it_IT.UTF-8"
export LC_MESSAGES="it_IT.UTF-8"
export LC_MONETARY="it_IT.UTF-8"
export LC_NUMERIC="it_IT.UTF-8"
export LC_TIME="it_IT.UTF-8"
export LC_ALL=

where it_IT.UTF-8 should be your locale string. To test if it worked for you just reload the console and run this code:

python -c 'import locale; print(locale.getdefaultlocale());'

You should get something like this:

('it_IT', 'UTF8')

  • Pingback: Django在syncdb时出现“ValueError: unknown locale: UTF-8″ 的解决办法

  • http://manuelciosici.com Manuel R. Ciosici

    Thank you. I’m trying to learn Django and Python and I just stumbled upon this issue.

  • http://Website Sandeep

    Thank You for taking time out to post a fix.

  • http://Website Rahman Hashim

    This has solved my problem. Thank you!

  • http://ygamretuta.me Ygam

    Thanks much! This error appears when the language pack is not in your system, in my case, Australian English or en_AU was disabled. I had to enable it in my system, then replace this post’s it_IT with enAU. Thanks very much!

  • http://omaryahir.blogspot.mx Omar

    Thx a lot, It was useful …

  • http://Website danilo

    grazie, funziona :)

  • http://Website Ken

    Thank you, It really helps!!

  • http://assertselenium.com Manoj

    Thanks. This helped me a lot.

  • http://ross.my Ross

    Thank you for this tip! Saved my day!

  • http://leonstafford.com Leon Stafford

    Thanks, got it doing first Satchmo install on OS X 10.8, virtualenv

  • http://www.nikhilpatil.com nikhil patil

    Thanks it helps, I was struggling for almost 30 mins,Thanks go google too ;)

  • http://Website Johan

    An even quicker fix is to disable “Set locale environment variables on startup” in “Settings -> Advanced” in Terminal’s settings.

  • eason

    Thank you very much, this did the trick.
    OS: Mac OS X 10.9.4