rush_sync_server/commands/lang/
manager.rs1use super::persistence::LanguagePersistence;
4use crate::core::prelude::*;
5use crate::i18n::{
6 get_available_languages, get_command_translation, get_current_language, set_language,
7};
8
9pub struct LanguageManager;
11
12impl LanguageManager {
13 pub fn show_status() -> String {
15 let current_lang = get_current_language();
16 let available_langs = get_available_languages().join(", ");
17
18 let current = get_command_translation("system.commands.language.current", &[¤t_lang]);
19 let available =
20 get_command_translation("system.commands.language.available", &[&available_langs]);
21
22 format!("{}\n{}", current, available)
23 }
24
25 pub async fn change_language(lang: &str) -> Result<String> {
27 match set_language(lang) {
29 Ok(()) => {
30 if let Err(e) = LanguagePersistence::save_to_config(lang).await {
32 log::error!("Failed to save language config: {}", e);
33 }
35
36 Ok(Self::create_save_message(
38 lang,
39 &get_command_translation(
40 "system.commands.language.changed",
41 &[&lang.to_uppercase()],
42 ),
43 ))
44 }
45 Err(e) => {
46 Ok(get_command_translation(
48 "system.commands.language.invalid",
49 &[&e.to_string()],
50 ))
51 }
52 }
53 }
54
55 pub async fn process_save_message(message: &str) -> Option<String> {
57 if !message.starts_with("__SAVE_LANGUAGE__") {
58 return None;
59 }
60
61 let parts: Vec<&str> = message.split("__MESSAGE__").collect();
62 if parts.len() != 2 {
63 return None;
64 }
65
66 let lang_part = parts[0].replace("__SAVE_LANGUAGE__", "");
67 let display_message = parts[1];
68
69 if let Err(e) = crate::i18n::set_language(&lang_part) {
71 return Some(format!("Fehler beim Setzen der Sprache: {}", e));
72 }
73
74 if let Err(e) = LanguagePersistence::save_to_config(&lang_part).await {
76 log::error!("Failed to save language config: {}", e);
77 }
78
79 Some(display_message.to_string())
80 }
81
82 fn create_save_message(lang: &str, display_text: &str) -> String {
84 format!("__SAVE_LANGUAGE__{}__MESSAGE__{}", lang, display_text)
85 }
86
87 pub fn create_save_message_format(lang: &str, display_text: &str) -> String {
89 format!("__SAVE_LANGUAGE__{}__MESSAGE__{}", lang, display_text)
90 }
91
92 pub fn switch_language_only(lang: &str) -> Result<()> {
94 set_language(lang)
95 }
96
97 pub fn get_available() -> Vec<String> {
99 get_available_languages()
100 }
101
102 pub fn get_current() -> String {
104 get_current_language()
105 }
106}