[glom] glom_get_locale_date_format(): Make this work even when LANGUAGE is set.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom] glom_get_locale_date_format(): Make this work even when LANGUAGE is set.
- Date: Mon, 19 Jan 2015 08:13:24 +0000 (UTC)
commit 3d41e98a96e206be78f58bb775d54c19b31ef186
Author: Murray Cumming <murrayc murrayc com>
Date: Mon Jan 19 09:12:12 2015 +0100
glom_get_locale_date_format(): Make this work even when LANGUAGE is set.
By temporarily unsetting LANGUAGE while getting LC_TIME via
setlocale(LC_TIME, NULL). As Geary does already too.
glom/libglom/data_structure/glomconversions.cc | 17 +++++++++++++++++
tests/test_glom_date_in_locales_lc_time.sh.in | 18 +++++++++++++-----
2 files changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/glom/libglom/data_structure/glomconversions.cc b/glom/libglom/data_structure/glomconversions.cc
index 3d43770..a17bf87 100644
--- a/glom/libglom/data_structure/glomconversions.cc
+++ b/glom/libglom/data_structure/glomconversions.cc
@@ -89,6 +89,17 @@ static inline const char* glom_get_locale_date_format()
if(!c_locale_date_format)
{
//Get the current LC_TIME value:
+
+ //Unset LANGUAGE because it affects what setlocale(LC_TIME, NULL) returns,
+ //though it doesn't affect what, for instance, printf() uses. So unsetting
+ //it lets us get the correct LC_TIME locale.
+ const char* ENV_LANGUAGE = "LANGUAGE";
+ char* language = getenv(ENV_LANGUAGE);
+ if(language)
+ language = g_strdup(language);
+
+ setenv(ENV_LANGUAGE, "", 1 /* replace */);
+
//We copy the string because setlocale() probably returns the same array
//each time.
//Even when the LC_TIME environment variable is not set, we still seem
@@ -139,8 +150,14 @@ static inline const char* glom_get_locale_date_format()
setlocale(LC_MESSAGES, old_lc_messages);
}
+ //Restore this:
+ if(language) { //setenv() can't take NULL for this.
+ setenv(ENV_LANGUAGE, language, 1 /* replace */);
+ }
+
g_free(old_lc_messages);
g_free(lc_time);
+ g_free(language);
}
//std::cout << G_STRFUNC << ": c_locale_date_format=" << c_locale_date_format << std::endl;
diff --git a/tests/test_glom_date_in_locales_lc_time.sh.in b/tests/test_glom_date_in_locales_lc_time.sh.in
index 42bc84a..5ef357b 100644
--- a/tests/test_glom_date_in_locales_lc_time.sh.in
+++ b/tests/test_glom_date_in_locales_lc_time.sh.in
@@ -26,18 +26,26 @@ function test_date {
echo testing with LANG="$lang" and LC_TIME="$lc_time"
export LANG="$lang"
+ export LC_TIME="$lc_time"
- # We don't set LANGUAGE because that seems to affect what setlocale() returns
- # for LC_TIME (so we can't get the translated "%x"),
- # though LC_TIME still affects printf(),
- # Maybe we need to handle that too.
- # export LANGUAGE="$lang"
+ @abs_top_builddir@/glom/glom --debug-date-check || exit 1
+}
+
+function test_date_with_language {
+ lang="$1"
+ lc_time="$2"
+
+ echo testing with LANG="$lang" and LC_TIME="$lc_time"
+ export LANG="$lang"
+ export LANGUAGE="$lang"
export LC_TIME="$lc_time"
@abs_top_builddir@/glom/glom --debug-date-check || exit 1
}
test_date "en_US.UTF-8" "en_GB.UTF-8"
+test_date_with_language "en_US.UTF-8" "en_GB.UTF-8"
test_date "en_US.UTF-8" "es_ES.UTF-8"
+test_date_with_language "en_US.UTF-8" "es_ES.UTF-8"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]