rush_sync_server/commands/lang/
config.rs1use super::persistence::LanguagePersistence;
3use crate::core::config::Config;
4use crate::core::prelude::*;
5use crate::i18n::get_available_languages;
6
7pub struct LanguageConfig;
9
10impl LanguageConfig {
11 pub async fn set_in_config(config: &mut Config, lang: &str) -> Result<()> {
13 let lang_lower = lang.to_lowercase();
15 let available = get_available_languages();
16
17 if !available.iter().any(|l| l.to_lowercase() == lang_lower) {
18 return Err(AppError::Validation(format!(
19 "Ungültige Sprache: {}. Verfügbar: {:?}",
20 lang, available
21 )));
22 }
23
24 config.language = lang.to_lowercase();
26
27 config.save().await?;
29
30 crate::i18n::set_language(lang)?;
32
33 log::debug!("Language set in config: {}", lang.to_uppercase());
34 Ok(())
35 }
36
37 pub async fn load_and_apply_from_config(config: &Config) -> Result<()> {
39 let lang = &config.language;
40
41 if let Err(e) = crate::i18n::set_language(lang) {
43 log::warn!(
44 "{}",
45 get_translation("system.config.language_set_failed", &[&e.to_string()])
46 );
47
48 let _ = crate::i18n::set_language(crate::i18n::DEFAULT_LANGUAGE);
50 }
51
52 Ok(())
53 }
54
55 pub async fn create_config_with_language(lang: &str) -> Result<Config> {
57 let mut config = Config::default();
58 config.language = lang.to_lowercase();
59
60 config.save().await?;
62
63 Ok(config)
64 }
65
66 pub async fn sync_config_with_current_language() -> Result<()> {
68 let current_lang = crate::i18n::get_current_language().to_lowercase();
69 LanguagePersistence::save_to_config(¤t_lang).await
70 }
71
72 pub fn is_config_in_sync_with_i18n(config: &Config) -> bool {
74 let config_lang = config.language.to_lowercase();
75 let current_lang = crate::i18n::get_current_language().to_lowercase();
76 config_lang == current_lang
77 }
78
79 pub async fn repair_config_sync(config: &mut Config) -> Result<bool> {
81 if !Self::is_config_in_sync_with_i18n(config) {
82 let current_lang = crate::i18n::get_current_language().to_lowercase();
83 config.language = current_lang.clone();
84 config.save().await?;
85
86 log::debug!(
87 "Config language repaired to: {}",
88 current_lang.to_uppercase()
89 );
90 return Ok(true);
91 }
92 Ok(false)
93 }
94}