feat: feat: add multilingual output support for commit, tag, and changelog commands
This commit is contained in:
@@ -3,7 +3,7 @@ use clap::{Parser, Subcommand};
|
||||
use colored::Colorize;
|
||||
use dialoguer::{Confirm, Input, Select};
|
||||
|
||||
use crate::config::manager::ConfigManager;
|
||||
use crate::config::{Language, manager::ConfigManager};
|
||||
use crate::config::CommitFormat;
|
||||
|
||||
/// Mask API key with asterisks for security
|
||||
@@ -146,7 +146,25 @@ enum ConfigSubcommand {
|
||||
/// Path
|
||||
path: String,
|
||||
},
|
||||
|
||||
|
||||
/// Set output language
|
||||
SetLanguage {
|
||||
/// Language code (en, zh, ja, ko, es, fr, de)
|
||||
language: Option<String>,
|
||||
},
|
||||
|
||||
/// Set whether to keep commit types in English
|
||||
SetKeepTypesEnglish {
|
||||
/// Keep types in English (true/false)
|
||||
keep: bool,
|
||||
},
|
||||
|
||||
/// Set whether to keep changelog types in English
|
||||
SetKeepChangelogTypesEnglish {
|
||||
/// Keep types in English (true/false)
|
||||
keep: bool,
|
||||
},
|
||||
|
||||
/// Reset configuration to defaults
|
||||
Reset {
|
||||
/// Skip confirmation
|
||||
@@ -196,6 +214,9 @@ impl ConfigCommand {
|
||||
Some(ConfigSubcommand::SetCommitFormat { format }) => self.set_commit_format(format).await,
|
||||
Some(ConfigSubcommand::SetVersionPrefix { prefix }) => self.set_version_prefix(prefix).await,
|
||||
Some(ConfigSubcommand::SetChangelogPath { path }) => self.set_changelog_path(path).await,
|
||||
Some(ConfigSubcommand::SetLanguage { language }) => self.set_language(language.as_deref()).await,
|
||||
Some(ConfigSubcommand::SetKeepTypesEnglish { keep }) => self.set_keep_types_english(*keep).await,
|
||||
Some(ConfigSubcommand::SetKeepChangelogTypesEnglish { keep }) => self.set_keep_changelog_types_english(*keep).await,
|
||||
Some(ConfigSubcommand::Reset { force }) => self.reset(*force).await,
|
||||
Some(ConfigSubcommand::Export { output }) => self.export_config(output.as_deref()).await,
|
||||
Some(ConfigSubcommand::Import { file }) => self.import_config(file).await,
|
||||
@@ -268,6 +289,12 @@ impl ConfigCommand {
|
||||
println!(" GPG sign: {}", if config.tag.gpg_sign { "yes".green() } else { "no".red() });
|
||||
println!(" Include changelog: {}", if config.tag.include_changelog { "yes".green() } else { "no".red() });
|
||||
|
||||
println!("\n{}", "Language Configuration:".bold());
|
||||
let language = manager.get_language().unwrap_or(Language::English);
|
||||
println!(" Output language: {}", language.display_name().cyan());
|
||||
println!(" Keep commit types in English: {}", if manager.keep_types_english() { "yes".green() } else { "no".red() });
|
||||
println!(" Keep changelog types in English: {}", if manager.keep_changelog_types_english() { "yes".green() } else { "no".red() });
|
||||
|
||||
println!("\n{}", "Changelog Configuration:".bold());
|
||||
println!(" Path: {}", config.changelog.path);
|
||||
println!(" Auto-generate: {}", if config.changelog.auto_generate { "yes".green() } else { "no".red() });
|
||||
@@ -706,6 +733,54 @@ impl ConfigCommand {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn set_language(&self, language: Option<&str>) -> Result<()> {
|
||||
let mut manager = ConfigManager::new()?;
|
||||
|
||||
let language_code = if let Some(lang) = language {
|
||||
lang.to_string()
|
||||
} else {
|
||||
let languages = vec![
|
||||
Language::English,
|
||||
Language::Chinese,
|
||||
Language::Japanese,
|
||||
Language::Korean,
|
||||
Language::Spanish,
|
||||
Language::French,
|
||||
Language::German,
|
||||
];
|
||||
let language_names: Vec<String> = languages.iter().map(|l| l.display_name().to_string()).collect();
|
||||
let idx = Select::new()
|
||||
.with_prompt("Select language")
|
||||
.items(&language_names)
|
||||
.default(0)
|
||||
.interact()?;
|
||||
languages[idx].to_code().to_string()
|
||||
};
|
||||
|
||||
manager.set_output_language(language_code.clone());
|
||||
manager.save()?;
|
||||
println!("{} Set output language to {}", "✓".green(), language_code.cyan());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn set_keep_types_english(&self, keep: bool) -> Result<()> {
|
||||
let mut manager = ConfigManager::new()?;
|
||||
manager.set_keep_types_english(keep);
|
||||
manager.save()?;
|
||||
let status = if keep { "enabled" } else { "disabled" };
|
||||
println!("{} Keep commit types in English: {}", "✓".green(), status);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn set_keep_changelog_types_english(&self, keep: bool) -> Result<()> {
|
||||
let mut manager = ConfigManager::new()?;
|
||||
manager.set_keep_changelog_types_english(keep);
|
||||
manager.save()?;
|
||||
let status = if keep { "enabled" } else { "disabled" };
|
||||
println!("{} Keep changelog types in English: {}", "✓".green(), status);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn reset(&self, force: bool) -> Result<()> {
|
||||
if !force {
|
||||
let confirm = Confirm::new()
|
||||
|
||||
Reference in New Issue
Block a user