feat: feat: add multilingual output support for commit, tag, and changelog commands
This commit is contained in:
@@ -53,6 +53,10 @@ pub struct AppConfig {
|
||||
/// Theme settings
|
||||
#[serde(default)]
|
||||
pub theme: ThemeConfig,
|
||||
|
||||
/// Language settings
|
||||
#[serde(default)]
|
||||
pub language: LanguageConfig,
|
||||
}
|
||||
|
||||
impl Default for AppConfig {
|
||||
@@ -68,6 +72,7 @@ impl Default for AppConfig {
|
||||
repo_profiles: HashMap::new(),
|
||||
encrypt_sensitive: true,
|
||||
theme: ThemeConfig::default(),
|
||||
language: LanguageConfig::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -497,6 +502,83 @@ impl Default for ThemeConfig {
|
||||
}
|
||||
}
|
||||
|
||||
/// Language configuration
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct LanguageConfig {
|
||||
/// Output language for messages (en, zh, etc.)
|
||||
#[serde(default = "default_output_language")]
|
||||
pub output_language: String,
|
||||
|
||||
/// Keep commit types in English
|
||||
#[serde(default = "default_true")]
|
||||
pub keep_types_english: bool,
|
||||
|
||||
/// Keep changelog types in English
|
||||
#[serde(default = "default_true")]
|
||||
pub keep_changelog_types_english: bool,
|
||||
}
|
||||
|
||||
impl Default for LanguageConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
output_language: default_output_language(),
|
||||
keep_types_english: true,
|
||||
keep_changelog_types_english: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Supported languages
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum Language {
|
||||
English,
|
||||
Chinese,
|
||||
Japanese,
|
||||
Korean,
|
||||
Spanish,
|
||||
French,
|
||||
German,
|
||||
}
|
||||
|
||||
impl Language {
|
||||
pub fn from_str(s: &str) -> Option<Self> {
|
||||
match s.to_lowercase().as_str() {
|
||||
"en" | "english" => Some(Language::English),
|
||||
"zh" | "chinese" | "zh-cn" | "zh-tw" => Some(Language::Chinese),
|
||||
"ja" | "japanese" => Some(Language::Japanese),
|
||||
"ko" | "korean" => Some(Language::Korean),
|
||||
"es" | "spanish" => Some(Language::Spanish),
|
||||
"fr" | "french" => Some(Language::French),
|
||||
"de" | "german" => Some(Language::German),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_code(&self) -> &str {
|
||||
match self {
|
||||
Language::English => "en",
|
||||
Language::Chinese => "zh",
|
||||
Language::Japanese => "ja",
|
||||
Language::Korean => "ko",
|
||||
Language::Spanish => "es",
|
||||
Language::French => "fr",
|
||||
Language::German => "de",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn display_name(&self) -> &str {
|
||||
match self {
|
||||
Language::English => "English",
|
||||
Language::Chinese => "中文",
|
||||
Language::Japanese => "日本語",
|
||||
Language::Korean => "한국어",
|
||||
Language::Spanish => "Español",
|
||||
Language::French => "Français",
|
||||
Language::German => "Deutsch",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Default value functions
|
||||
fn default_version() -> String {
|
||||
"1".to_string()
|
||||
@@ -594,6 +676,10 @@ fn default_date_format() -> String {
|
||||
"%Y-%m-%d".to_string()
|
||||
}
|
||||
|
||||
fn default_output_language() -> String {
|
||||
"en".to_string()
|
||||
}
|
||||
|
||||
impl AppConfig {
|
||||
/// Load configuration from file
|
||||
pub fn load(path: &Path) -> Result<Self> {
|
||||
|
||||
Reference in New Issue
Block a user