diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 04733be..05cf4fb 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,5 @@ + ADDED: Setting to override the default language. + (thanks to jaap, resolves issue 2) ADDED: Support for related fields - ForeignKey, ManyToManyField and OneToOneField. (resolves issue 15) diff --git a/docs/modeltranslation/modeltranslation.txt b/docs/modeltranslation/modeltranslation.txt index 65b2b82..20a7736 100644 --- a/docs/modeltranslation/modeltranslation.txt +++ b/docs/modeltranslation/modeltranslation.txt @@ -96,8 +96,17 @@ modeltranslation app, but rather required for Django to be able to (statically) translate the verbose names of the languages using the standard ``i18n`` solution. +**settings.MODELTRANSLATION_DEFAULT_LANGUAGE** + +*New in development version* +To override the default language as described in settings.LANGUAGES, define +``MODELTRANSLATION_DEFAULT_LANGUAGE``. Note that the value has to be in +settings.LANGUAGES, otherwise an exception will be raised. + **settings.TRANSLATION_REGISTRY** +TODO: Rename setting to MODELTRANSLATION_TRANSLATION_REGISTRY. + In order to be able to import the project's ``translation.py`` registration file the ``TRANSLATION_REGISTRY`` must be set to a value in the form ``.translation``. E.g. if your project is located in a folder @@ -366,7 +375,7 @@ custom admin class and that's done in the example above. After that the Inlines ------- -*New in development version* +*New in 0.2* Support for tabular and stacked inlines, common and generic ones. A translated inline must derive from one of the following classes: diff --git a/modeltranslation/models.py b/modeltranslation/models.py index 739c897..6c9c376 100644 --- a/modeltranslation/models.py +++ b/modeltranslation/models.py @@ -13,6 +13,7 @@ from modeltranslation.translator import translator # Import the project's global "translation.py" which registers model # classes and their translation options with the translator object. +# TODO: Rename setting to MODELTRANSLATION_TRANSLATION_REGISTRY. if getattr(settings, 'TRANSLATION_REGISTRY', False): try: __import__(settings.TRANSLATION_REGISTRY, {}, {}, ['']) diff --git a/modeltranslation/utils.py b/modeltranslation/utils.py index c63e129..75a6f30 100644 --- a/modeltranslation/utils.py +++ b/modeltranslation/utils.py @@ -1,19 +1,24 @@ # -*- coding: utf-8 -*- from django.db import models from django.conf import settings -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, ImproperlyConfigured from django.contrib.contenttypes.models import ContentType from django.utils.translation import get_language as _get_language from django.utils.functional import lazy +def get_available_languages(): + """Returns a list of the language codes in settings.LANGUAGES""" + return [l[0] for l in settings.LANGUAGES] + + 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] + available_languages = get_available_languages() if lang not in available_languages and '-' in lang: lang = lang.split('-')[0] if lang in available_languages: @@ -22,12 +27,26 @@ def get_language(): def get_default_language(): - return settings.LANGUAGES[0][0] + """ + Returns the language to use as the default language. This is either + the value of settings.DEFAULT_LANGUAGE (if it's in the list of + settings.LANGUAGES) or the first item in settings.LANGUAGES. + """ + available_languages = get_available_languages() + default_language = getattr(settings, + 'MODELTRANSLATION_DEFAULT_LANGUAGE', None) + if default_language and default_language not in available_languages: + raise ImproperlyConfigured('MODELTRANSLATION_DEFAULT_LANGUAGE not ' + 'in LANGUAGES setting.') + if not default_language: + default_language = available_languages[0] + return default_language def get_translation_fields(field): """Returns a list of localized fieldnames for a given field.""" - return [build_localized_fieldname(field, l[0]) for l in settings.LANGUAGES] + return [build_localized_fieldname(field, l) for l in\ + get_available_languages()] def build_localized_fieldname(field_name, lang):