summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlibrary/clock.tcl36
-rw-r--r--tests/clock.test26
2 files changed, 62 insertions, 0 deletions
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..d4f0bc9 100644
--- a/tests/clock.test
+++ b/tests/clock.test
@@ -36931,11 +36931,37 @@ test clock-67.2 {Bug d19a30db57} -body {
# error, not segfault
tcl::clock::GetJulianDayFromEraYearMonthDay {} 2361222
} -returnCodes error -match glob -result *
+
test clock-67.3 {Bug d19a30db57} -body {
# error, not segfault
tcl::clock::GetJulianDayFromEraYearWeekDay {} 2361222
} -returnCodes error -match glob -result *
+test clock-67.4 {Change format %x output on global locale change [Bug 4a0c163d24]} -setup {
+ package require msgcat
+ set current [msgcat::mclocale]
+} -body {
+ msgcat::mclocale de_de
+ set res [list [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.5 {Change scan %x output on global locale change [Bug 4a0c163d24]} -setup {
+ package require msgcat
+ set current [msgcat::mclocale]
+} -body {
+ msgcat::mclocale de_de
+ set res [clock scan "01.01.1970" -locale current -format %x]
+ msgcat::mclocale en_uk
+ # This will fail without the bug fix, as still de_de is active
+ expr {$res == [clock scan "01/01/1970" -locale current -format %x]}
+} -cleanup {
+ msgcat::mclocale $current
+} -result {1}
+
# cleanup
namespace delete ::testClock