diff --git a/gui/kivy/__init__.py b/gui/kivy/__init__.py index ed06054c..3bf7db7f 100644 --- a/gui/kivy/__init__.py +++ b/gui/kivy/__init__.py @@ -32,7 +32,6 @@ except ImportError: # minimum required version for kivy kivy.require('1.8.0') -from electrum.i18n import set_language from kivy.logger import Logger from main_window import ElectrumWindow @@ -43,7 +42,6 @@ class ElectrumGui: self.network = daemon.network self.config = config self.plugins = plugins - set_language(config.get('language')) def main(self): w = ElectrumWindow(config=self.config, diff --git a/gui/kivy/i18n.py b/gui/kivy/i18n.py new file mode 100644 index 00000000..a9d62b55 --- /dev/null +++ b/gui/kivy/i18n.py @@ -0,0 +1,36 @@ +import gettext + +class _(str): + + observers = set() + lang = None + + def __new__(cls, s, *args, **kwargs): + if _.lang is None: + _.switch_lang('en') + t = _.translate(s, *args, **kwargs) + o = super(_, cls).__new__(cls, t) + o.source_text = s + return o + + @staticmethod + def translate(s, *args, **kwargs): + return _.lang(s).format(args, kwargs) + + @staticmethod + def bind(label): + if isinstance(label.text, _): + _.observers.add(label) + + @staticmethod + def switch_lang(lang): + # get the right locales directory, and instanciate a gettext + from electrum.i18n import LOCALE_DIR + locales = gettext.translation('electrum', LOCALE_DIR, languages=[lang], fallback=True) + _.lang = locales.gettext + for label in _.observers: + try: + label.text = _(label.text.source_text) + except ReferenceError: + pass + diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv index cbbd9cc8..098a6d00 100644 --- a/gui/kivy/main.kv +++ b/gui/kivy/main.kv @@ -1,11 +1,12 @@ #:import Clock kivy.clock.Clock #:import Window kivy.core.window.Window #:import Factory kivy.factory.Factory -#:import _ electrum.i18n._ +#:import _ electrum_gui.kivy.i18n._ # Custom Global Widgets