from django.conf import settings from django.utils import six from django.utils.safestring import SafeData, mark_safe if settings.USE_I18N: from django.utils.translation.trans_real import DjangoTranslation, get_language _translations = {} def translation(language): global _translations if language not in _translations: _translations[language] = DjangoTranslation(language, domain='dmoj-user') return _translations[language] def do_translate(message, translation_function): """Copied from django.utils.translation.trans_real""" # str() is allowing a bytestring message to remain bytestring on Python 2 eol_message = message.replace(str('\r\n'), str('\n')).replace(str('\r'), str('\n')) if len(eol_message) == 0: # Returns an empty value of the corresponding type if an empty message # is given, instead of metadata, which is the default gettext behavior. result = '' else: translation_object = translation(get_language()) result = getattr(translation_object, translation_function)(eol_message) if not isinstance(result, six.text_type): result = result.decode('utf-8') if isinstance(message, SafeData): return mark_safe(result) return result def gettext(message): return do_translate(message, 'gettext') else: def gettext(message): return message