2010-02-23 14:20:42 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2012-10-19 11:32:33 +00:00
|
|
|
from django.conf import global_settings
|
2012-07-11 20:24:37 +00:00
|
|
|
from django.utils.encoding import force_unicode
|
2010-02-16 10:47:57 +00:00
|
|
|
from django.utils.translation import get_language as _get_language
|
2010-05-26 09:14:00 +00:00
|
|
|
from django.utils.functional import lazy
|
2010-02-16 10:47:57 +00:00
|
|
|
|
2012-07-04 09:29:05 +00:00
|
|
|
from modeltranslation.settings import DEFAULT_LANGUAGE, AVAILABLE_LANGUAGES
|
2010-06-21 09:43:41 +00:00
|
|
|
|
|
|
|
|
|
2010-02-16 10:47:57 +00:00
|
|
|
def get_language():
|
|
|
|
|
"""
|
|
|
|
|
Return an active language code that is guaranteed to be in
|
2010-06-21 20:26:52 +00:00
|
|
|
settings.LANGUAGES (Django does not seem to guarantee this for us).
|
2010-02-16 10:47:57 +00:00
|
|
|
"""
|
|
|
|
|
lang = _get_language()
|
2010-07-06 09:52:41 +00:00
|
|
|
if lang not in AVAILABLE_LANGUAGES and '-' in lang:
|
2010-02-16 10:47:57 +00:00
|
|
|
lang = lang.split('-')[0]
|
2010-07-06 09:52:41 +00:00
|
|
|
if lang in AVAILABLE_LANGUAGES:
|
2010-02-16 10:47:57 +00:00
|
|
|
return lang
|
2011-04-10 20:27:24 +00:00
|
|
|
return DEFAULT_LANGUAGE
|
2010-06-17 14:33:39 +00:00
|
|
|
|
|
|
|
|
|
2010-02-23 14:20:42 +00:00
|
|
|
def get_translation_fields(field):
|
2012-07-04 10:09:22 +00:00
|
|
|
"""
|
|
|
|
|
Returns a list of localized fieldnames for a given field.
|
|
|
|
|
"""
|
2010-07-06 09:52:41 +00:00
|
|
|
return [build_localized_fieldname(field, l) for l in AVAILABLE_LANGUAGES]
|
2010-02-23 14:20:42 +00:00
|
|
|
|
|
|
|
|
|
2010-04-19 10:52:57 +00:00
|
|
|
def build_localized_fieldname(field_name, lang):
|
2010-06-30 19:37:37 +00:00
|
|
|
return str('%s_%s' % (field_name, lang.replace('-', '_')))
|
2010-04-19 10:52:57 +00:00
|
|
|
|
|
|
|
|
|
2010-05-26 09:14:00 +00:00
|
|
|
def _build_localized_verbose_name(verbose_name, lang):
|
2012-07-11 20:24:37 +00:00
|
|
|
return u'%s [%s]' % (force_unicode(verbose_name), lang)
|
2010-05-26 09:14:00 +00:00
|
|
|
build_localized_verbose_name = lazy(_build_localized_verbose_name, unicode)
|
2012-10-19 11:32:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def _join_css_class(bits, offset):
|
|
|
|
|
if ('-'.join(bits[-offset:]) in
|
2012-10-24 09:06:35 +00:00
|
|
|
[l[0] for l in global_settings.LANGUAGES]):
|
2012-10-19 11:32:33 +00:00
|
|
|
return '%s-%s' % ('_'.join(bits[:len(bits) - offset]),
|
|
|
|
|
'_'.join(bits[-offset:]))
|
|
|
|
|
return ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build_css_class(localized_fieldname, prefix=''):
|
|
|
|
|
"""
|
|
|
|
|
Returns a css class based on ``localized_fieldname`` which is easily
|
|
|
|
|
splitable and capable of regionalized language codes.
|
|
|
|
|
|
|
|
|
|
Takes an optional ``prefix`` which is prepended to the returned string.
|
|
|
|
|
"""
|
|
|
|
|
bits = localized_fieldname.split('_')
|
|
|
|
|
css_class = ''
|
|
|
|
|
if bits[0] == '':
|
|
|
|
|
return ''
|
|
|
|
|
if len(bits) == 1:
|
|
|
|
|
css_class = str(localized_fieldname)
|
|
|
|
|
elif len(bits) == 2:
|
|
|
|
|
# Fieldname without underscore and short language code
|
|
|
|
|
# Examples:
|
|
|
|
|
# 'foo_de' --> 'foo-de',
|
|
|
|
|
# 'bar_en' --> 'bar-en'
|
|
|
|
|
css_class = '-'.join(bits)
|
|
|
|
|
elif len(bits) > 2:
|
|
|
|
|
# Try regionalized language code
|
|
|
|
|
# Examples:
|
|
|
|
|
# 'foo_es_ar' --> 'foo-es_ar',
|
|
|
|
|
# 'foo_bar_zh_tw' --> 'foo_bar-zh_tw'
|
|
|
|
|
css_class = _join_css_class(bits, 2)
|
|
|
|
|
if not css_class:
|
|
|
|
|
# Try short language code
|
|
|
|
|
# Examples:
|
|
|
|
|
# 'foo_bar_de' --> 'foo_bar-de',
|
|
|
|
|
# 'foo_bar_baz_de' --> 'foo_bar_baz-de'
|
|
|
|
|
css_class = _join_css_class(bits, 1)
|
|
|
|
|
return '%s-%s' % (prefix, css_class) if prefix else css_class
|