Files
katrain-qt/katrain/gui/kivy_lang.py
T

64 lines
1.8 KiB
Python

"""Kivy observable adapter for the framework-neutral translator."""
from kivy._event import Observable
from katrain.core.lang import DEFAULT_LANGUAGE, Lang as CoreLang
from katrain.gui.theme import Theme
class Lang(CoreLang, Observable):
observers = []
def __init__(self, lang):
Observable.__init__(self)
self.callbacks = []
super().__init__(lang)
def set_widget_font(self, widget):
widget.font_name = self.font_name or Theme.DEFAULT_FONT
for sub_widget in [getattr(widget, "_hint_lbl", None), getattr(widget, "_msg_lbl", None)]:
if sub_widget:
sub_widget.font_name = widget.font_name
def fbind(self, name, func, *args):
if name != "_":
return Observable.fbind(self, name, func, *args)
widget, _property, *_ = args[0]
self.observers.append((widget, func, args))
self.set_widget_font(widget)
def funbind(self, name, func, *args):
if name != "_":
return Observable.funbind(self, name, func, *args)
widget, *_ = args[0]
key = (widget, func, args)
if key in self.observers:
self.observers.remove(key)
def switch_lang(self, lang):
previous = self.lang
super().switch_lang(lang)
if lang == previous:
return
for widget, func, args in self.observers:
try:
func(args[0], None, None)
self.set_widget_font(widget)
except ReferenceError:
pass
for callback in self.callbacks:
callback(self)
i18n = Lang(DEFAULT_LANGUAGE)
def rank_label(rank):
if rank is None:
return "??k"
if rank >= 0.5:
return f"{rank:.0f}{i18n._('strength:dan')}"
return f"{1-rank:.0f}{i18n._('strength:kyu')}"
__all__ = ["DEFAULT_LANGUAGE", "i18n", "rank_label"]