示例#1
0
    def switch_lang(self, language):
        if not language or not self.locale_dirs:
            translator = NullTranslations()
        else:
            # Instantiate the whole translator chain
            translator = None
            for locale_dir in self.locale_dirs:
                _translator = get_package_translator(language,
                                                     locale_dir=locale_dir)
                if translator is None:
                    translator = _translator  # Head of chain
                else:
                    translator.add_fallback(_translator)

        self.ugettext = translator.gettext
        self.language = language

        # update all the kv rules attached to this text
        _obsolete_idx = []

        for idx, (func, largs, kwargs) in enumerate(self.observers):
            try:
                func(largs, None, None)
            except ReferenceError:
                _obsolete_idx.append(idx)

        for _idx in reversed(_obsolete_idx):
            # Reversed loop, to preserve meaning of indexes
            del self.observers[_idx]