Fixed creation of db fields with invalid python language code, resolving #4 (thanks to carl.j.meyer).

This commit is contained in:
Dirk Eschler 2010-02-16 10:47:57 +00:00
parent 353a4c8f65
commit 325837b742
2 changed files with 20 additions and 6 deletions

View file

@ -1,9 +1,8 @@
from django.conf import settings
from django.db.models.fields import Field, CharField
from django.utils.translation import get_language
from modeltranslation.utils import build_localized_fieldname
from modeltranslation.utils import get_language, build_localized_fieldname
class TranslationField(Field):
"""
@ -95,4 +94,4 @@ class TranslationField(Field):
#def __contains__(self, model):
#return model in self.__class__._registry

View file

@ -2,7 +2,22 @@ from django.db import models
from django.conf import settings
from django.core.exceptions import ValidationError
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import get_language
from django.utils.translation import get_language as _get_language
def get_language():
"""
Return an active language code that is guaranteed to be in
settings.LANGUAGES (Django does not seem to guarantee this for
us.)
"""
lang = _get_language()
available_languages = [l[0] for l in settings.LANGUAGES]
if lang not in available_languages and '-' in lang:
lang = lang.split('-')[0]
if lang in available_languages:
return lang
return available_languages[0]
class TranslationFieldDescriptor(object):
"""
@ -18,7 +33,7 @@ class TranslationFieldDescriptor(object):
def __set__(self, instance, value):
# print "Descriptor.__set__%s %s %s.%s: %s" % (id(instance), id(self), type(instance), self.name, value)
lang = get_language()
lang = get_language()
loc_field_name = build_localized_fieldname(self.name, lang)
# also update the translation field of the current language
@ -100,4 +115,4 @@ def copy_field(field):
def build_localized_fieldname(field_name, lang):
return '%s_%s' % (field_name, lang)
return '%s_%s' % (field_name, lang.replace('-', '_'))