diff --git a/src/bin/fish.rs b/src/bin/fish.rs index 11f504cc9..cefe4654c 100644 --- a/src/bin/fish.rs +++ b/src/bin/fish.rs @@ -385,7 +385,8 @@ fn throwing_main() -> i32 { set_libc_locales(/*log_ok=*/ false) }; - fish::localization::initialize_gettext(); + #[cfg(feature = "localize-messages")] + fish::localization::initialize_localization(); // Enable debug categories set in FISH_DEBUG. // This is in *addition* to the ones given via --debug. diff --git a/src/builtins/fish_indent.rs b/src/builtins/fish_indent.rs index 78f75c03a..7bcdb3cc6 100644 --- a/src/builtins/fish_indent.rs +++ b/src/builtins/fish_indent.rs @@ -930,7 +930,8 @@ fn throwing_main() -> i32 { unsafe { set_libc_locales(/*log_ok=*/ false) }; - crate::localization::initialize_gettext(); + #[cfg(feature = "localize-messages")] + crate::localization::initialize_localization(); env_init(None, true, false); // Only set these here so you can't set them via the builtin. diff --git a/src/builtins/fish_key_reader.rs b/src/builtins/fish_key_reader.rs index 09ed0ff3b..a69c724ee 100644 --- a/src/builtins/fish_key_reader.rs +++ b/src/builtins/fish_key_reader.rs @@ -289,7 +289,8 @@ fn throwing_main() -> i32 { set_interactive_session(true); topic_monitor_init(); threads::init(); - crate::localization::initialize_gettext(); + #[cfg(feature = "localize-messages")] + crate::localization::initialize_localization(); env_init(None, true, false); reader_init(false); if let Some(features_var) = EnvStack::globals().get(L!("fish_features")) { diff --git a/src/localization/gettext.rs b/src/localization/gettext.rs index 3c3a3f2c0..e8435c4ba 100644 --- a/src/localization/gettext.rs +++ b/src/localization/gettext.rs @@ -1,24 +1,7 @@ -#[cfg(feature = "localize-messages")] -use crate::env::EnvStack; use fish_wchar::{L, WString, wstr}; use once_cell::sync::Lazy; use std::sync::Mutex; -#[cfg(not(feature = "localize-messages"))] -pub fn initialize_gettext() {} - -/// This function only exists to provide a way for initializing gettext before an [`EnvStack`] is -/// available. Without this, early error messages cannot be localized. -#[cfg(feature = "localize-messages")] -pub fn initialize_gettext() { - let vars = EnvStack::new(); - env_stack_set_from_env!(vars, "LANGUAGE"); - env_stack_set_from_env!(vars, "LC_ALL"); - env_stack_set_from_env!(vars, "LC_MESSAGES"); - env_stack_set_from_env!(vars, "LANG"); - super::update_from_env(&vars); -} - /// Use this function to localize a message. /// The [`MaybeStatic`] wrapper type allows avoiding allocating and leaking a new [`wstr`] when no /// localization is found and the input is returned, but as a static reference. diff --git a/src/localization/mod.rs b/src/localization/mod.rs index 45290b354..ef75df866 100644 --- a/src/localization/mod.rs +++ b/src/localization/mod.rs @@ -1,7 +1,6 @@ mod gettext; pub use gettext::{ - LocalizableString, initialize_gettext, localizable_consts, localizable_string, wgettext, - wgettext_fmt, + LocalizableString, localizable_consts, localizable_string, wgettext, wgettext_fmt, }; #[cfg(feature = "localize-messages")] mod settings; @@ -10,3 +9,18 @@ list_available_languages, status_language, unset_from_status_language_builtin, update_from_env, update_from_status_language_builtin, }; + +#[cfg(feature = "localize-messages")] +/// This function only exists to provide a way for initializing gettext before an `EnvStack` is +/// available. Without this, early error messages cannot be localized. +pub fn initialize_localization() { + use crate::env::EnvStack; + use fish_wchar::L; + + let env = EnvStack::new(); + env_stack_set_from_env!(env, "LANGUAGE"); + env_stack_set_from_env!(env, "LC_ALL"); + env_stack_set_from_env!(env, "LC_MESSAGES"); + env_stack_set_from_env!(env, "LANG"); + update_from_env(&env); +}