diff --git a/assets/locales/common.ftl b/assets/locales/common.ftl index 2f25107..d321e69 100644 --- a/assets/locales/common.ftl +++ b/assets/locales/common.ftl @@ -13,3 +13,7 @@ company-alter-name = {-company-alter-name-1}{-company-alter-name-2}{-company-alt -game-name-3 = Imp -game-name-4 = act game-name = {-game-name-1}{-game-name-2} {-game-name-3}{-game-name-4} + +en = English +ru = Русский +de = Deutsch diff --git a/src/ui/preferences/general.rs b/src/ui/preferences/general.rs index 887856c..6ac2ad6 100644 --- a/src/ui/preferences/general.rs +++ b/src/ui/preferences/general.rs @@ -24,6 +24,8 @@ pub struct GeneralApp { style: LauncherStyle, + languages: Vec, + downloaded_wine_versions: Vec, downloaded_dxvk_versions: Vec, @@ -167,25 +169,23 @@ impl SimpleAsyncComponent for GeneralApp { // TODO: maybe simplify it by some way? e.g. specify such stuff in i18n mod - #[wrap(Some)] - set_model = >k::StringList::new(&[ - "English", - "Русский" - ]), + set_model: Some(>k::StringList::new(&model.languages.iter().map(|lang| lang.as_str()).collect::>())), - set_selected: match CONFIG.launcher.language.as_str() { - "en-us" => 0, - "ru-ru" => 1, - _ => 0 + set_selected: { + let selected = crate::i18n::get_lang().language; + + SUPPORTED_LANGUAGES.iter() + .position(|lang| lang.language == selected) + .unwrap_or(0) as u32 }, connect_selected_notify => move |row| { if is_ready() { if let Ok(mut config) = config::get() { - config.launcher.language = String::from(*[ - "en-us", - "ru-ru" - ].get(row.selected() as usize).unwrap_or(&"en-us")); + config.launcher.language = SUPPORTED_LANGUAGES + .get(row.selected() as usize) + .unwrap_or(&SUPPORTED_LANGUAGES[0]) + .language.to_string(); config::update(config); } @@ -503,6 +503,8 @@ impl SimpleAsyncComponent for GeneralApp { style: CONFIG.launcher.style, + languages: SUPPORTED_LANGUAGES.iter().map(|lang| tr(lang.language.as_str())).collect(), + downloaded_wine_versions: vec![], downloaded_dxvk_versions: vec![],