Пример #1
0
def i18n(request):
    return {
        'LANGUAGES': settings.LANGUAGES,
        'LANG': (settings.LANGUAGE_URL_MAP.get(translation.get_language()) or
                 translation.get_language()),
        'DIR': 'rtl' if translation.get_language_bidi() else 'ltr',
    }
Пример #2
0
 def test_activate_deactivate(self):
     """Should activate and deactivate languages"""
     self.assertEqual(translation.get_language(), settings.LANGUAGE_CODE)
     translation.activate('de')
     self.assertEqual(translation.get_language(), 'de')
     self.assertNotEqual(translation.get_language(), settings.LANGUAGE_CODE)
     translation.deactivate()
     self.assertEqual(translation.get_language(), settings.LANGUAGE_CODE)
Пример #3
0
def i18n(request):
    return {
        "LANGUAGES":
        settings.LANGUAGES,
        "LANG": (settings.LANGUAGE_URL_MAP.get(translation.get_language())
                 or translation.get_language()),
        "DIR":
        "rtl" if translation.get_language_bidi() else "ltr",
    }
Пример #4
0
def lang_file_tag_set(path, lang=None):
    """Return a set of tags for a specific lang file and locale.

    :param path: the relative lang file name
    :param lang: the language code or the lang of the request if omitted
    :return: set of strings
    """
    if settings.DEV or lang == settings.LANGUAGE_CODE:
        return ALL_THE_THINGS

    lang = lang or translation.get_language(True)
    fpath = settings.LOCALES_PATH / lang / f'{path}.lang'
    cache_key = f'tag:locale/{lang}/{path}.lang'
    tag_set = cache.get(cache_key)
    if tag_set is None:
        tag_set = set()
        try:
            with codecs.open(fpath, 'r', 'utf-8', errors='replace') as lines:
                for line in lines:
                    # Filter out Byte order Mark
                    line = line.replace(u'\ufeff', '')
                    m = TAG_REGEX.match(line)
                    if m:
                        tag_set.add(m.group(1))
                    else:
                        # Stop at the first non-tag line.
                        break
        except IOError:
            pass

        cache.set(cache_key, tag_set)

    return tag_set
Пример #5
0
def translate(text, files):
    """Search a list of .lang files for a translation"""
    lang = translation.get_language(True)

    # don't attempt to translate the default language.
    if lang == settings.LANGUAGE_CODE:
        return Markup(text)

    tweaked_text = strip_whitespace(text)

    for file_ in files:
        key = "dotlang-%s-%s" % (lang, file_)
        path = str(settings.LOCALES_PATH / lang / f'{file_}.lang')
        trans = cache.get(key)
        if trans is None:
            trans = parse(path)
            cache.set(key, trans)

        if tweaked_text in trans:
            original = FORMAT_IDENTIFIER_RE.findall(text)
            translated = FORMAT_IDENTIFIER_RE.findall(trans[tweaked_text])
            if set(original) != set(translated):
                explanation = ('The translation has a different set of '
                               'replaced text (aka %s)')
                message = '%s\n\n%s\n%s' % (explanation, text,
                                            trans[tweaked_text])
                mail_error(path, message)
                return Markup(text)
            return Markup(trans[tweaked_text])
    return Markup(text)
Пример #6
0
def lang_file_tag_set(path, lang=None):
    """Return a set of tags for a specific lang file and locale.

    :param path: the relative lang file name
    :param lang: the language code or the lang of the request if omitted
    :return: set of strings
    """
    if settings.DEV or lang == settings.LANGUAGE_CODE:
        return ALL_THE_THINGS

    lang = lang or fix_case(translation.get_language())
    rel_path = os.path.join('locale', lang, '%s.lang' % path)
    cache_key = 'tag:%s' % rel_path
    tag_set = cache.get(cache_key)
    if tag_set is None:
        tag_set = set()
        fpath = os.path.join(settings.ROOT, rel_path)
        try:
            with codecs.open(fpath, 'r', 'utf-8', errors='replace') as lines:
                for line in lines:
                    # Filter out Byte order Mark
                    line = line.replace(u'\ufeff', '')
                    m = TAG_REGEX.match(line)
                    if m:
                        tag_set.add(m.group(1))
                    else:
                        # Stop at the first non-tag line.
                        break
        except IOError:
            pass

        cache.set(cache_key, tag_set, settings.DOTLANG_CACHE)

    return tag_set
Пример #7
0
def translate(text, files):
    """Search a list of .lang files for a translation"""
    lang = fix_case(translation.get_language())

    # don't attempt to translate the default language.
    if lang == settings.LANGUAGE_CODE:
        return Markup(text)

    tweaked_text = strip_whitespace(text)

    for file_ in files:
        key = "dotlang-%s-%s" % (lang, file_)
        rel_path = os.path.join('locale', lang, '%s.lang' % file_)

        trans = cache.get(key)
        if trans is None:
            path = os.path.join(settings.ROOT, rel_path)
            trans = parse(path)
            cache.set(key, trans, settings.DOTLANG_CACHE)

        if tweaked_text in trans:
            original = FORMAT_IDENTIFIER_RE.findall(text)
            translated = FORMAT_IDENTIFIER_RE.findall(trans[tweaked_text])
            if set(original) != set(translated):
                explanation = ('The translation has a different set of '
                               'replaced text (aka %s)')
                message = '%s\n\n%s\n%s' % (explanation, text,
                                            trans[tweaked_text])
                mail_error(rel_path, message)
                return Markup(text)
            return Markup(trans[tweaked_text])
    return Markup(text)
Пример #8
0
def lang_file_tag_set(path, lang=None):
    """Return a set of tags for a specific lang file and locale.

    :param path: the relative lang file name
    :param lang: the language code or the lang of the request if omitted
    :return: set of strings
    """
    if settings.DEV or lang == settings.LANGUAGE_CODE:
        return ALL_THE_THINGS

    lang = lang or fix_case(translation.get_language())
    rel_path = os.path.join('locale', lang, '%s.lang' % path)
    cache_key = 'tag:%s' % rel_path
    tag_set = cache.get(cache_key)
    if tag_set is None:
        tag_set = set()
        fpath = os.path.join(settings.ROOT, rel_path)
        try:
            with codecs.open(fpath, 'r', 'utf-8', errors='replace') as lines:
                for line in lines:
                    # Filter out Byte order Mark
                    line = line.replace(u'\ufeff', '')
                    m = TAG_REGEX.match(line)
                    if m:
                        tag_set.add(m.group(1))
                    else:
                        # Stop at the first non-tag line.
                        break
        except IOError:
            pass

        cache.set(cache_key, tag_set, settings.DOTLANG_CACHE)

    return tag_set
Пример #9
0
def translate(text, files):
    """Search a list of .lang files for a translation"""
    lang = fix_case(translation.get_language())

    # don't attempt to translate the default language.
    if lang == settings.LANGUAGE_CODE:
        return Markup(text)

    tweaked_text = strip_whitespace(text)

    for file_ in files:
        key = "dotlang-%s-%s" % (lang, file_)
        rel_path = os.path.join('locale', lang, '%s.lang' % file_)

        trans = cache.get(key)
        if trans is None:
            path = os.path.join(settings.ROOT, rel_path)
            trans = parse(path)
            cache.set(key, trans, settings.DOTLANG_CACHE)

        if tweaked_text in trans:
            original = FORMAT_IDENTIFIER_RE.findall(text)
            translated = FORMAT_IDENTIFIER_RE.findall(trans[tweaked_text])
            if set(original) != set(translated):
                explanation = ('The translation has a different set of '
                               'replaced text (aka %s)')
                message = '%s\n\n%s\n%s' % (explanation, text,
                                            trans[tweaked_text])
                mail_error(rel_path, message)
                return Markup(text)
            return Markup(trans[tweaked_text])
    return Markup(text)
Пример #10
0
 def activate(self, locale):
     """Context manager that temporarily activates a locale."""
     old_prefix = get_url_prefix()
     old_locale = translation.get_language()
     rf = RequestFactory()
     set_url_prefix(Prefixer(rf.get('/%s/' % (locale,))))
     translation.activate(locale)
     yield
     set_url_prefix(old_prefix)
     translation.activate(old_locale)
Пример #11
0
 def activate(self, locale):
     """Context manager that temporarily activates a locale."""
     old_prefix = get_url_prefix()
     old_locale = translation.get_language()
     rf = RequestFactory()
     set_url_prefix(Prefixer(rf.get('/%s/' % (locale, ))))
     translation.activate(locale)
     yield
     set_url_prefix(old_prefix)
     translation.activate(old_locale)
Пример #12
0
    def inner(*args, **kwargs):
        ftl_files = kwargs.get('ftl_files', [])
        if isinstance(ftl_files, str):
            ftl_files = [ftl_files]
        elif isinstance(ftl_files, tuple):
            ftl_files = list(ftl_files)

        # can not use += here because that mutates the original list
        ftl_files = ftl_files + settings.FLUENT_DEFAULT_FILES
        locale = kwargs.get('locale') or translation.get_language(True)
        l10n = fluent_l10n([locale, 'en'], ftl_files)
        return f(l10n, *args, **kwargs)
Пример #13
0
def ftl_file_is_active(ftl_file, locale=None):
    """Return True if the given FTL file is active in the given locale."""
    locale = locale or translation.get_language(True)
    return locale in get_active_locales(ftl_file)
Пример #14
0
 def inner(ftl_files, *args, **kwargs):
     locale = kwargs.get('locale') or translation.get_language(True)
     l10n = fluent_l10n([locale, 'en'], ftl_files)
     return f(l10n, *args, **kwargs)
Пример #15
0
    def test_get_language(self):
        # nothing set, should return default lang
        self.assertEqual(translation.get_language(), settings.LANGUAGE_CODE)

        translation.activate('non-default')
        self.assertEqual(translation.get_language(), 'non-default')
Пример #16
0
def current_locale():
    """
    Return the current Locale object (from Babel). Defaults to locale
    based on settings.LANGUAGE_CODE if locale does not exist.
    """
    return get_locale(get_language())
Пример #17
0
def current_locale():
    """
    Return the current Locale object (from Babel). Defaults to locale
    based on settings.LANGUAGE_CODE if locale does not exist.
    """
    return get_locale(get_language())