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', }
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)
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", }
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
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)
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
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)
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)
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)
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)
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)
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)
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')
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())