«

Fix "ValueError: unknown locale: UTF-8" under Mac OS X 10.7 - Lion

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  
execute_from_command_line(sys.argv)  
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line  
utility.execute()  
File "/Users/patrick/.virtualenvs/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute  
self.fetch_command(subcommand).run_from_argv(self.argv)  
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')
Share Comment on Twitter