feat: feat: add multilingual output support for commit, tag, and changelog commands
This commit is contained in:
1091
src/i18n/messages.rs
Normal file
1091
src/i18n/messages.rs
Normal file
File diff suppressed because it is too large
Load Diff
7
src/i18n/mod.rs
Normal file
7
src/i18n/mod.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
pub mod messages;
|
||||
pub mod translator;
|
||||
|
||||
pub use messages::Messages;
|
||||
pub use translator::Translator;
|
||||
pub use translator::translate_commit_type;
|
||||
pub use translator::translate_changelog_category;
|
||||
233
src/i18n/translator.rs
Normal file
233
src/i18n/translator.rs
Normal file
@@ -0,0 +1,233 @@
|
||||
use crate::config::Language;
|
||||
|
||||
pub struct Translator {
|
||||
language: Language,
|
||||
keep_types_english: bool,
|
||||
keep_changelog_types_english: bool,
|
||||
}
|
||||
|
||||
impl Translator {
|
||||
pub fn new(language: Language, keep_types_english: bool, keep_changelog_types_english: bool) -> Self {
|
||||
Self {
|
||||
language,
|
||||
keep_types_english,
|
||||
keep_changelog_types_english,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn translate_commit_type(&self, commit_type: &str) -> String {
|
||||
if self.keep_types_english {
|
||||
return commit_type.to_string();
|
||||
}
|
||||
|
||||
match self.language {
|
||||
Language::English => commit_type.to_string(),
|
||||
Language::Chinese => self.translate_commit_type_zh(commit_type),
|
||||
Language::Japanese => self.translate_commit_type_ja(commit_type),
|
||||
Language::Korean => self.translate_commit_type_ko(commit_type),
|
||||
Language::Spanish => self.translate_commit_type_es(commit_type),
|
||||
Language::French => self.translate_commit_type_fr(commit_type),
|
||||
Language::German => self.translate_commit_type_de(commit_type),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn translate_changelog_category(&self, category: &str) -> String {
|
||||
if self.keep_changelog_types_english {
|
||||
return category.to_string();
|
||||
}
|
||||
|
||||
match self.language {
|
||||
Language::English => category.to_string(),
|
||||
Language::Chinese => self.translate_changelog_category_zh(category),
|
||||
Language::Japanese => self.translate_changelog_category_ja(category),
|
||||
Language::Korean => self.translate_changelog_category_ko(category),
|
||||
Language::Spanish => self.translate_changelog_category_es(category),
|
||||
Language::French => self.translate_changelog_category_fr(category),
|
||||
Language::German => self.translate_changelog_category_de(category),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_zh(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "新功能".to_string(),
|
||||
"fix" => "修复".to_string(),
|
||||
"docs" => "文档".to_string(),
|
||||
"style" => "样式".to_string(),
|
||||
"refactor" => "重构".to_string(),
|
||||
"perf" => "性能".to_string(),
|
||||
"test" => "测试".to_string(),
|
||||
"build" => "构建".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "杂项".to_string(),
|
||||
"revert" => "回滚".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_ja(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "機能".to_string(),
|
||||
"fix" => "修正".to_string(),
|
||||
"docs" => "ドキュメント".to_string(),
|
||||
"style" => "スタイル".to_string(),
|
||||
"refactor" => "リファクタリング".to_string(),
|
||||
"perf" => "パフォーマンス".to_string(),
|
||||
"test" => "テスト".to_string(),
|
||||
"build" => "ビルド".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "雑務".to_string(),
|
||||
"revert" => "取り消し".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_ko(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "기능".to_string(),
|
||||
"fix" => "버그 수정".to_string(),
|
||||
"docs" => "문서".to_string(),
|
||||
"style" => "스타일".to_string(),
|
||||
"refactor" => "리팩토링".to_string(),
|
||||
"perf" => "성능".to_string(),
|
||||
"test" => "테스트".to_string(),
|
||||
"build" => "빌드".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "기타".to_string(),
|
||||
"revert" => "되돌리기".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_es(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "nueva función".to_string(),
|
||||
"fix" => "corrección".to_string(),
|
||||
"docs" => "documentación".to_string(),
|
||||
"style" => "estilo".to_string(),
|
||||
"refactor" => "refactorización".to_string(),
|
||||
"perf" => "rendimiento".to_string(),
|
||||
"test" => "pruebas".to_string(),
|
||||
"build" => "construcción".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "tareas".to_string(),
|
||||
"revert" => "revertir".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_fr(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "nouvelle fonctionnalité".to_string(),
|
||||
"fix" => "correction".to_string(),
|
||||
"docs" => "documentation".to_string(),
|
||||
"style" => "style".to_string(),
|
||||
"refactor" => "refactorisation".to_string(),
|
||||
"perf" => "performance".to_string(),
|
||||
"test" => "tests".to_string(),
|
||||
"build" => "construction".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "tâches".to_string(),
|
||||
"revert" => "rétablir".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_commit_type_de(&self, commit_type: &str) -> String {
|
||||
match commit_type {
|
||||
"feat" => "Neue Funktion".to_string(),
|
||||
"fix" => "Korrektur".to_string(),
|
||||
"docs" => "Dokumentation".to_string(),
|
||||
"style" => "Stil".to_string(),
|
||||
"refactor" => "Refactoring".to_string(),
|
||||
"perf" => "Leistung".to_string(),
|
||||
"test" => "Tests".to_string(),
|
||||
"build" => "Build".to_string(),
|
||||
"ci" => "CI".to_string(),
|
||||
"chore" => "Wartung".to_string(),
|
||||
"revert" => "Zurücksetzen".to_string(),
|
||||
_ => commit_type.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_zh(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "新增".to_string(),
|
||||
"changed" => "更改".to_string(),
|
||||
"deprecated" => "弃用".to_string(),
|
||||
"removed" => "移除".to_string(),
|
||||
"fixed" => "修复".to_string(),
|
||||
"security" => "安全".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_ja(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "追加".to_string(),
|
||||
"changed" => "変更".to_string(),
|
||||
"deprecated" => "非推奨".to_string(),
|
||||
"removed" => "削除".to_string(),
|
||||
"fixed" => "修正".to_string(),
|
||||
"security" => "セキュリティ".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_ko(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "추가됨".to_string(),
|
||||
"changed" => "변경됨".to_string(),
|
||||
"deprecated" => "사용 중단".to_string(),
|
||||
"removed" => "제거됨".to_string(),
|
||||
"fixed" => "수정됨".to_string(),
|
||||
"security" => "보안".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_es(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "Agregado".to_string(),
|
||||
"changed" => "Cambiado".to_string(),
|
||||
"deprecated" => "Obsoleto".to_string(),
|
||||
"removed" => "Eliminado".to_string(),
|
||||
"fixed" => "Corregido".to_string(),
|
||||
"security" => "Seguridad".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_fr(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "Ajouté".to_string(),
|
||||
"changed" => "Modifié".to_string(),
|
||||
"deprecated" => "Obsolète".to_string(),
|
||||
"removed" => "Supprimé".to_string(),
|
||||
"fixed" => "Corrigé".to_string(),
|
||||
"security" => "Sécurité".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_changelog_category_de(&self, category: &str) -> String {
|
||||
match category.to_lowercase().as_str() {
|
||||
"added" => "Hinzugefügt".to_string(),
|
||||
"changed" => "Geändert".to_string(),
|
||||
"deprecated" => "Veraltet".to_string(),
|
||||
"removed" => "Entfernt".to_string(),
|
||||
"fixed" => "Behoben".to_string(),
|
||||
"security" => "Sicherheit".to_string(),
|
||||
_ => category.to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn translate_commit_type(commit_type: &str, language: Language, keep_english: bool) -> String {
|
||||
let translator = Translator::new(language, keep_english, true);
|
||||
translator.translate_commit_type(commit_type)
|
||||
}
|
||||
|
||||
pub fn translate_changelog_category(category: &str, language: Language, keep_english: bool) -> String {
|
||||
let translator = Translator::new(language, true, keep_english);
|
||||
translator.translate_changelog_category(category)
|
||||
}
|
||||
Reference in New Issue
Block a user