File tree Expand file tree Collapse file tree 2 files changed +16
-10
lines changed Expand file tree Collapse file tree 2 files changed +16
-10
lines changed Original file line number Diff line number Diff line change @@ -101,16 +101,16 @@ def normalize_string(txt: AnyStr) -> str:
101
101
102
102
@classmethod
103
103
def detect_language (cls , code : str ) -> str :
104
+ """Scan the Mnemonic until the language becomes unambiguous."""
104
105
code = cls .normalize_string (code )
105
- first = code .split (" " )[0 ]
106
- languages = cls .list_languages ()
107
-
108
- for lang in languages :
109
- mnemo = cls (lang )
110
- if first in mnemo .wordlist :
111
- return lang
112
-
113
- raise ConfigurationError ("Language not detected" )
106
+ possible = set (cls (lang ) for lang in cls .list_languages ())
107
+ for word in code .split ():
108
+ possible = set (p for p in possible if word in p .wordlist )
109
+ if not possible :
110
+ raise ConfigurationError (f"Language unrecognized: { word !r} " )
111
+ if len ( possible ) == 1 :
112
+ return possible .pop ().language
113
+ raise ConfigurationError (f"Language ambiguous: { ', ' .join ( p .language for p in possible )} " )
114
114
115
115
def generate (self , strength : int = 128 ) -> str :
116
116
"""
Original file line number Diff line number Diff line change @@ -58,7 +58,13 @@ def test_detection(self) -> None:
58
58
self .assertEqual ("english" , Mnemonic .detect_language ("security" ))
59
59
60
60
with self .assertRaises (Exception ):
61
- Mnemonic .detect_language ("xxxxxxx" )
61
+ Mnemonic .detect_language ("jaguar xxxxxxx" ) # Unrecognized in any known language
62
+
63
+ with self .assertRaises (Exception ):
64
+ Mnemonic .detect_language ("jaguar jaguar" ) # Ambiguous after examining all words
65
+
66
+ self .assertEqual ("english" , Mnemonic .detect_language ("jaguar security" ))
67
+ self .assertEqual ("french" , Mnemonic .detect_language ("jaguar aboyer" ))
62
68
63
69
def test_utf8_nfkd (self ) -> None :
64
70
# The same sentence in various UTF-8 forms
You can’t perform that action at this time.
0 commit comments