From 775b09cb001aae11f753654ae22365f295f56fe8 Mon Sep 17 00:00:00 2001
From: oehhar <harald.oehlmann@elmicron.de>
Date: Wed, 21 Oct 2015 20:30:49 +0000
Subject: Change "clock format -format %x -locale current" output on msgcat
 locale change [4a0c163d24]

---
 library/clock.tcl | 36 ++++++++++++++++++++++++++++++++++++
 tests/clock.test  | 13 +++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/library/clock.tcl b/library/clock.tcl
index bfdf832..8e4b657 100755
--- a/library/clock.tcl
+++ b/library/clock.tcl
@@ -111,6 +111,7 @@ proc ::tcl::clock::Initialize {} {
     mcpackagelocale set {}
     ::msgcat::mcpackageconfig set mcfolder [file join $LibDir msgs]
     ::msgcat::mcpackageconfig set unknowncmd ""
+    ::msgcat::mcpackageconfig set changecmd ChangeCurrentLocale
 
     # Define the message catalog for the root locale.
 
@@ -4475,6 +4476,41 @@ proc ::tcl::clock::AddDays { days clockval timezone changeover } {
 
 #----------------------------------------------------------------------
 #
+# ChangeCurrentLocale --
+#
+#        The global locale was changed within msgcat.
+#        Clears the buffered parse functions of the current locale.
+#
+# Parameters:
+#        loclist (ignored)
+#
+# Results:
+#        None.
+#
+# Side effects:
+#        Buffered parse functions are cleared.
+#
+#----------------------------------------------------------------------
+
+proc ::tcl::clock::ChangeCurrentLocale {args} {
+    variable FormatProc
+    variable LocaleNumeralCache
+    variable CachedSystemTimeZone
+    variable TimeZoneBad
+
+    foreach p [info procs [namespace current]::scanproc'*'current] {
+        rename $p {}
+    }
+    foreach p [info procs [namespace current]::formatproc'*'current] {
+        rename $p {}
+    }
+
+    catch {array unset FormatProc *'current}
+    set LocaleNumeralCache {}
+}
+
+#----------------------------------------------------------------------
+#
 # ClearCaches --
 #
 #	Clears all caches to reclaim the memory used in [clock]
diff --git a/tests/clock.test b/tests/clock.test
index 2abeab9..4f69ed3 100644
--- a/tests/clock.test
+++ b/tests/clock.test
@@ -36931,6 +36931,19 @@ test clock-67.2 {Bug d19a30db57} -body {
     # error, not segfault
     tcl::clock::GetJulianDayFromEraYearMonthDay {} 2361222
 } -returnCodes error -match glob -result *
+
+test clock-67.3 {Change %x output on global locale change [Bug 4a0c163d24]} -setup {
+    package require msgcat
+    set current [msgcat::mclocale]
+} -body {
+    msgcat::mclocale de_de
+    set res [clock format 1 -locale current -format %x]
+    msgcat::mclocale en_uk
+    lappend res [clock format 1 -locale current -format %x]
+} -cleanup {
+    msgcat::mclocale $current
+} -result {01.01.1970 01/01/1970}
+
 test clock-67.3 {Bug d19a30db57} -body {
     # error, not segfault
     tcl::clock::GetJulianDayFromEraYearWeekDay {} 2361222
-- 
cgit v0.12