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 | 13 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')

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

  1. 1 Django在syncdb时出现“ValueError: unknown locale: UTF-8″ 的解决办法 said at 2:47 am on June 25th, 2012:

    [...] 文祥生活 django No Comments 参考http://patrick.arminio.info/blog/2012/02/fix-valueerror-unknown-locale-utf8/ [...]

  2. 2 Manuel R. Ciosici said at 8:12 am on July 27th, 2012:

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

  3. 3 Sandeep said at 10:47 am on July 31st, 2012:

    Thank You for taking time out to post a fix.

  4. 4 Rahman Hashim said at 10:27 pm on August 2nd, 2012:

    This has solved my problem. Thank you!

  5. 5 Ygam said at 7:31 am on August 8th, 2012:

    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!

  6. 6 Omar said at 6:22 pm on August 31st, 2012:

    Thx a lot, It was useful …

  7. 7 danilo said at 8:22 pm on December 21st, 2012:

    grazie, funziona :)

  8. 8 Ken said at 5:14 pm on January 29th, 2013:

    Thank you, It really helps!!

  9. 9 Manoj said at 7:40 pm on February 28th, 2013:

    Thanks. This helped me a lot.

  10. 10 Ross said at 5:17 pm on March 23rd, 2013:

    Thank you for this tip! Saved my day!

  11. 11 Leon Stafford said at 3:19 pm on May 3rd, 2013:

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

  12. 12 nikhil patil said at 5:33 pm on May 4th, 2013:

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

  13. 13 Johan said at 6:12 pm on January 11th, 2014:

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

Leave a Reply