diff --git a/Cargo.lock b/Cargo.lock index b8d49ec..eeecd2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1650,6 +1650,7 @@ dependencies = [ "fontdb 0.16.2", "freedesktop-desktop-entry", "futures", + "gettext-rs", "hostname-validator", "hostname1-zbus", "i18n-embed", diff --git a/cosmic-settings/Cargo.toml b/cosmic-settings/Cargo.toml index 5ef3ccf..1d18f3d 100644 --- a/cosmic-settings/Cargo.toml +++ b/cosmic-settings/Cargo.toml @@ -72,6 +72,9 @@ fontdb = "0.16.2" fixed_decimal = "0.5.6" mime = "0.3.17" rustix = "0.38.41" +gettext-rs = { version = "0.7.2", features = [ + "gettext-system", +], optional = true } [dependencies.cosmic-settings-subscriptions] git = "https://github.com/pop-os/cosmic-settings-subscriptions" @@ -95,6 +98,7 @@ optional = true [features] default = ["a11y", "dbus-config", "linux", "single-instance", "wgpu"] +gettext = ["dep:gettext-rs"] # Default features for Linux linux = [ @@ -120,6 +124,7 @@ page-bluetooth = ["dep:bluez-zbus", "dep:zbus"] page-date = ["dep:timedate-zbus", "dep:zbus"] page-default-apps = ["dep:mime-apps"] page-input = [ + "gettext", "dep:cosmic-comp-config", "dep:cosmic-settings-config", "dep:udev", diff --git a/cosmic-settings/src/main.rs b/cosmic-settings/src/main.rs index e34d87d..e22258d 100644 --- a/cosmic-settings/src/main.rs +++ b/cosmic-settings/src/main.rs @@ -149,6 +149,11 @@ pub fn main() -> color_eyre::Result<()> { init_logger(); init_localizer(); + #[cfg(feature = "gettext")] + { + let _ = gettextrs::setlocale(gettextrs::LocaleCategory::LcAll, ""); + } + let args = Args::parse(); let settings = cosmic::app::Settings::default() diff --git a/cosmic-settings/src/pages/input/keyboard/mod.rs b/cosmic-settings/src/pages/input/keyboard/mod.rs index afcf747..e29d063 100644 --- a/cosmic-settings/src/pages/input/keyboard/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/mod.rs @@ -338,7 +338,7 @@ impl page::Page for Page { self.keyboard_layouts.insert(( layout.name().to_owned(), String::new(), - layout.description().to_owned(), + gettextrs::dgettext("xkeyboard-config", layout.description()), source.clone(), )); @@ -347,7 +347,7 @@ impl page::Page for Page { ( layout.name().to_owned(), variant.name().to_owned(), - variant.description().to_owned(), + gettextrs::dgettext("xkeyboard-config", variant.description()), source.clone(), ) }) @@ -395,6 +395,13 @@ impl page::Page for Page { Task::none() } + + fn on_leave(&mut self) -> Task { + self.active_layouts = Vec::new(); + self.keyboard_layouts = SlotMap::new(); + self.input_source_search = String::new(); + Task::none() + } } impl Page { diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs index 0178b0b..c8fe2c1 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs @@ -208,6 +208,7 @@ impl Model { pub(super) fn on_clear(&mut self) { self.shortcut_models.clear(); + self.shortcut_models.shrink_to_fit(); } /// Gets the custom configuration for keyboard shortcuts. diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs index b39e3dd..b788bc0 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs @@ -203,9 +203,9 @@ impl page::Page for Page { } fn on_leave(&mut self) -> Task { - self.search.actions.clear(); - self.search.localized.clear(); - self.search.input.clear(); + self.search.actions = SlotMap::new(); + self.search.localized = SecondaryMap::new(); + self.search.input = String::new(); self.search_model.on_clear(); self.modified.custom = 0; self.modified.manage_windows = 0;