def bip39_detect_lang(mnem_str): # TODO: add Electrum1?, Chinese detect not possible? if isinstance(mnem_str, list): mnem_str = u' '.join(mnem_str) mnem_arr = mnem_str.split() sme = set(mnem_arr) # French & English share 100 words #if sme < (frozenset(set(WORDS["english"]) & set(WORDS["french"]))): # print Warning("Could be English OR French!\nUsing English as default") # return "english" languages = set(WORDS.keys()) languages.remove('electrum1') poss_langs = [] for lang in list(languages): if sme < set(WORDS[lang]): poss_langs.append(lang) if len(poss_langs) == 1: return poss_langs[0] elif len(poss_langs) == 2: # 2 possible langauges if poss_langs[0][:7] and poss_langs[1][:7] == 'chinese': sys.stderr.write("Cannot determine which Chinese wordlist to use!\nChinese traditional returned") return 'chinese_traditional' if poss_langs[0][:7] and poss_langs[1][:7] in ('french', 'english'): sys.stderr.write("Cannot determine if English or French.\nEnglish returned") return 'english ' else: sys.stderr.write("Unable to determine language.\nReturning English") return 'english'
def bip39_detect_lang(mnem_str): if isinstance(mnem_str, list): mnem_str = u' '.join(mnem_str) mnem_arr = mnem_str.split() sme = set(mnem_arr) # French & English share 100 words languages = set(WORDS.keys()) languages.remove('electrum1') poss_langs = [] for lang in list(languages): if sme < set(WORDS[lang]): poss_langs.append(lang) if len(poss_langs) == 1: return poss_langs[0] elif len(poss_langs) == 2: # 2 possible langauges if poss_langs[0][:7] and poss_langs[1][:7] == 'chinese': sys.stderr.write( "Cannot determine which Chinese wordlist to use!\nChinese traditional returned" ) return 'chinese_traditional' if poss_langs[0][:7] and poss_langs[1][:7] in ('french', 'english'): sys.stderr.write( "Cannot determine if English or French.\nEnglish returned") return 'english ' else: sys.stderr.write("Unable to determine language.\nReturning English") return 'english'
def get_wordlists(lang=None): # Try to access local lists, otherwise download text lists # if any((listtype, lang)): from bitcoin.bci import make_request global WORDS if 'electrum' in str(lang.lower()): WORDS['electrum1'] = make_request( "http://tinyurl.com/electrum1words").strip().split() return [(k, v.pop(k, "")) for k, v in WORDS] bips_url = "https://github.com/bitcoin/bips/raw/master/bip-0039/%s.txt" WORDS['electrum1'], WORDS['english'], WORDS['japanese'], WORDS['spanish'], \ WORDS['chinese_simplified'], WORDS['chinese_traditional'], WORDS['french'] = map( lambda u: make_request(u).strip().split(), ("http://tinyurl.com/electrum1words", bips_url % 'english', bips_url % 'japanese', bips_url % 'spanish', bips_url % 'chinese_simplified', bips_url % 'chinese_traditional', bips_url % 'french')) assert map(lambda d: isinstance(d, list) and len(d), WORDS.values()).count(2048) == len(WORDS.keys()) - 1 if lang is not None: return WORDS[lang.lower()] return WORDS
def get_wordlists(lang=None): # Try to access local lists, otherwise download text lists # if any((listtype, lang)): from bitcoin.bci import make_request global WORDS if 'electrum' in str(lang.lower()): WORDS['electrum1'] = make_request("http://tinyurl.com/electrum1words").strip().split() return [(k, v.pop(k, "")) for k,v in WORDS] bips_url = "https://github.com/bitcoin/bips/raw/master/bip-0039/%s.txt" WORDS['electrum1'], WORDS['english'], WORDS['japanese'], WORDS['spanish'], \ WORDS['chinese_simplified'], WORDS['chinese_traditional'], WORDS['french'] = map( lambda u: make_request(u).strip().split(), ("http://tinyurl.com/electrum1words", bips_url % 'english', bips_url % 'japanese', bips_url % 'spanish', bips_url % 'chinese_simplified', bips_url % 'chinese_traditional', bips_url % 'french')) assert map(lambda d: isinstance(d, list) and len(d), WORDS.values()).count(2048) == len(WORDS.keys()) - 1 if lang is not None: return WORDS[lang.lower()] return WORDS