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]