From 325837b742551a8428a2ec3238ef4737edd72154 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Tue, 16 Feb 2010 10:47:57 +0000 Subject: [PATCH] Fixed creation of db fields with invalid python language code, resolving #4 (thanks to carl.j.meyer). --- modeltranslation/fields.py | 5 ++--- modeltranslation/utils.py | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/modeltranslation/fields.py b/modeltranslation/fields.py index 9862137..e014d6a 100644 --- a/modeltranslation/fields.py +++ b/modeltranslation/fields.py @@ -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 - \ No newline at end of file + diff --git a/modeltranslation/utils.py b/modeltranslation/utils.py index 58ad914..c524c66 100644 --- a/modeltranslation/utils.py +++ b/modeltranslation/utils.py @@ -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('-', '_'))