Validate student account and profile form fields. Use RequireJS for Jasmine tests of account and profile JS.
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
""" Python API for language and translation management. """
|
|
|
|
from collections import namedtuple
|
|
|
|
from django.conf import settings
|
|
from django.utils.translation import get_language
|
|
from dark_lang.models import DarkLangConfig
|
|
|
|
|
|
# Named tuples can be referenced using object-like variable
|
|
# deferencing, making the use of tuples more readable by
|
|
# eliminating the need to see the context of the tuple packing.
|
|
Language = namedtuple('Language', 'code name')
|
|
|
|
|
|
def released_languages():
|
|
"""Retrieve the list of released languages.
|
|
|
|
Constructs a list of Language tuples by intersecting the
|
|
list of valid language tuples with the list of released
|
|
language codes.
|
|
|
|
Returns:
|
|
list of Language: Languages in which full translations are available.
|
|
|
|
Example:
|
|
|
|
>>> print released_languages()
|
|
[Language(code='en', name=u'English'), Language(code='fr', name=u'Français')]
|
|
|
|
"""
|
|
released_language_codes = DarkLangConfig.current().released_languages_list
|
|
default_language_code = settings.LANGUAGE_CODE
|
|
|
|
if default_language_code not in released_language_codes:
|
|
released_language_codes.append(default_language_code)
|
|
released_language_codes.sort()
|
|
|
|
# Intersect the list of valid language tuples with the list
|
|
# of release language codes
|
|
released_languages = [
|
|
Language(tuple[0], tuple[1])
|
|
for tuple in settings.LANGUAGES
|
|
if tuple[0] in released_language_codes
|
|
]
|
|
|
|
return released_languages
|
|
|
|
|
|
def preferred_language(preferred_language_code):
|
|
"""Retrieve the name of the user's preferred language.
|
|
|
|
Note:
|
|
The preferred_language_code may be None. If this is the case,
|
|
the if/else block will handle it by returning either the active
|
|
language or the default language.
|
|
|
|
Args:
|
|
preferred_language_code (str): The ISO 639 code corresponding
|
|
to the user's preferred language.
|
|
|
|
Returns:
|
|
unicode: The name of the user's preferred language.
|
|
|
|
"""
|
|
active_language_code = get_language()
|
|
|
|
if preferred_language_code in settings.LANGUAGE_DICT:
|
|
# If the user has indicated a preference for a valid
|
|
# language, record their preferred language
|
|
pass
|
|
elif active_language_code in settings.LANGUAGE_DICT:
|
|
# Otherwise, set the language used in the current thread
|
|
# as the preferred language
|
|
preferred_language_code = active_language_code
|
|
else:
|
|
# Otherwise, use the default language
|
|
preferred_language_code = settings.LANGUAGE_CODE
|
|
|
|
preferred_language = settings.LANGUAGE_DICT[preferred_language_code]
|
|
|
|
return Language(preferred_language_code, preferred_language)
|