From 15d712ed4ad190ac69430589d2290f56d13b22a0 Mon Sep 17 00:00:00 2001 From: stffrdhrn Date: Sat, 3 Dec 2005 05:56:10 +0000 Subject: [PATCH] Try to fix logic for setting locales when NULL is passed, This shoud satisfy the needs of both Mathieu and andyetitmoves. - Get lang from env vars - If we were passed NULL do not set any env vars SVN revision: 18809 --- src/bin/e_intl.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/bin/e_intl.c b/src/bin/e_intl.c index 6321d77bc..a23b52215 100644 --- a/src/bin/e_intl.c +++ b/src/bin/e_intl.c @@ -163,28 +163,43 @@ void e_intl_language_set(const char *lang) { char *alias_locale; - + int set_envars; + if (_e_intl_language) free(_e_intl_language); - /* NULL lang means set everything back to the original environment defaults */ + set_envars = 1; + /* NULL lang means set everything back to the original environment + * defaults + */ if (!lang) { e_util_env_set("LC_MESSAGES", _e_intl_orig_lc_messages); e_util_env_set("LANGUAGE", _e_intl_orig_language); e_util_env_set("LC_ALL", _e_intl_orig_lc_all); e_util_env_set("LANG", _e_intl_orig_lang); + + lang = getenv("LC_MESSAGES"); + if (!lang) lang = getenv("LANGUAGE"); + if (!lang) lang = getenv("LC_ALL"); + if (!lang) lang = getenv("LANG"); + + set_envars = 0; } - if (!lang) lang = getenv("LC_MESSAGES"); - if (!lang) lang = getenv("LANGUAGE"); - if (!lang) lang = getenv("LC_ALL"); - if (!lang) lang = getenv("LANG"); + if (lang) { _e_intl_language = strdup(lang); e_util_env_set("LANGUAGE", _e_intl_language); - /* FIXME: maybe we should set these anyway? */ - if (getenv("LANG")) e_util_env_set("LANG", _e_intl_language); - if (getenv("LC_ALL")) e_util_env_set("LC_ALL", _e_intl_language); - if (getenv("LC_MESSAGES")) e_util_env_set("LC_MESSAGES", _e_intl_language); + /* Only set env vars is a non NULL locale was passed */ + if (set_envars) + { + /* FIXME: maybe we should set these anyway? */ + if (getenv("LANG")) + e_util_env_set("LANG", _e_intl_language); + if (getenv("LC_ALL")) + e_util_env_set("LC_ALL", _e_intl_language); + if (getenv("LC_MESSAGES")) + e_util_env_set("LC_MESSAGES", _e_intl_language); + } } else {