8 changed files with 57 additions and 17 deletions
@ -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 |
||||||
|
|
||||||
Loading…
Reference in new issue