electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

i18n.py (1104B)


      1 import gettext
      2 
      3 
      4 class _(str):
      5 
      6     observers = set()
      7     lang = None
      8 
      9     def __new__(cls, s):
     10         if _.lang is None:
     11             _.switch_lang('en')
     12         t = _.translate(s)
     13         o = super(_, cls).__new__(cls, t)
     14         o.source_text = s
     15         return o
     16 
     17     @staticmethod
     18     def translate(s, *args, **kwargs):
     19         return _.lang(s)
     20 
     21     @staticmethod
     22     def bind(label):
     23         try:
     24             _.observers.add(label)
     25         except:
     26             pass
     27         # garbage collection
     28         new = set()
     29         for label in _.observers:
     30             try:
     31                 new.add(label)
     32             except:
     33                 pass
     34         _.observers = new
     35 
     36     @staticmethod
     37     def switch_lang(lang):
     38         # get the right locales directory, and instanciate a gettext
     39         from electrum.i18n import LOCALE_DIR
     40         locales = gettext.translation('electrum', LOCALE_DIR, languages=[lang], fallback=True)
     41         _.lang = locales.gettext
     42         for label in _.observers:
     43             try:
     44                 label.text = _(label.text.source_text)
     45             except:
     46                 pass