diff --git a/clap-utils/src/keypair.rs b/clap-utils/src/keypair.rs index 5d65d88190..7fdf14b24e 100644 --- a/clap-utils/src/keypair.rs +++ b/clap-utils/src/keypair.rs @@ -298,7 +298,24 @@ pub fn keypair_from_seed_phrase( keypair_from_seed_phrase_and_passphrase(&seed_phrase, &passphrase)? } else { let sanitized = sanitize_seed_phrase(seed_phrase); - let mnemonic = Mnemonic::from_phrase(&sanitized, Language::English)?; + let parse_language_fn = || { + for language in &[ + Language::English, + Language::ChineseSimplified, + Language::ChineseTraditional, + Language::Japanese, + Language::Spanish, + Language::Korean, + Language::French, + Language::Italian, + ] { + if let Ok(mnemonic) = Mnemonic::from_phrase(&sanitized, *language) { + return Ok(mnemonic); + } + } + Err("Can't get mnemonic from seed phrases") + }; + let mnemonic = parse_language_fn()?; let passphrase = prompt_passphrase(&passphrase_prompt)?; let seed = Seed::new(&mnemonic, &passphrase); keypair_from_seed(seed.as_bytes())? diff --git a/keygen/src/keygen.rs b/keygen/src/keygen.rs index 99c5107855..e3448b1876 100644 --- a/keygen/src/keygen.rs +++ b/keygen/src/keygen.rs @@ -270,6 +270,15 @@ fn main() -> Result<(), Box> { .takes_value(true) .help("Specify the number of words that will be present in the generated seed phrase"), ) + .arg( + Arg::with_name("language") + .long("language") + .possible_values(&["english", "chinese-simplified", "chinese-traditional", "japanese", "spanish", "korean", "french", "italian"]) + .default_value("english") + .value_name("LANGUAGE") + .takes_value(true) + .help("Specify the mnemonic lanaguage that will be present in the generated seed phrase"), + ) .arg( Arg::with_name("no_passphrase") .long("no-passphrase") @@ -430,7 +439,18 @@ fn do_main(matches: &ArgMatches<'_>) -> Result<(), Box> { let word_count = value_t!(matches.value_of("word_count"), usize).unwrap(); let mnemonic_type = MnemonicType::for_word_count(word_count)?; - let mnemonic = Mnemonic::new(mnemonic_type, Language::English); + let language = match matches.value_of("language").unwrap() { + "english" => Language::English, + "chinese-simplified" => Language::ChineseSimplified, + "chinese-traditional" => Language::ChineseTraditional, + "japanese" => Language::Japanese, + "spanish" => Language::Spanish, + "korean" => Language::Korean, + "french" => Language::French, + "italian" => Language::Italian, + _ => unreachable!(), + }; + let mnemonic = Mnemonic::new(mnemonic_type, language); let passphrase = if matches.is_present("no_passphrase") { NO_PASSPHRASE.to_string() } else {