diff options
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | library/msgcat/msgcat.tcl | 42 | ||||
| -rw-r--r-- | library/msgcat/pkgIndex.tcl | 2 | ||||
| -rw-r--r-- | tests/msgcat.test | 4 | ||||
| -rw-r--r-- | unix/Makefile.in | 4 | ||||
| -rw-r--r-- | win/Makefile.in | 4 | 
6 files changed, 50 insertions, 13 deletions
| @@ -1,3 +1,10 @@ +2012-06-??  Harald Oehlmann <harald.oehlmann@elmicron.de> + +	* library/msgcat/msgcat.tcl:	[Bug 3536888] Locale guessing of msgcat +	* library/msgcat/pkgIndex.tcl:  fails on (some) Windows 7.  Bump to 1.4.5 +	* unix/Makefile.in +	* win/Makefile.in +  2012-06-25  Don Porter  <dgp@users.sourceforge.net>  	* generic/tclFileSystem.h:	[Bug 3024359] Make sure that the diff --git a/library/msgcat/msgcat.tcl b/library/msgcat/msgcat.tcl index 369ed52..204de9c 100644 --- a/library/msgcat/msgcat.tcl +++ b/library/msgcat/msgcat.tcl @@ -13,7 +13,7 @@  package require Tcl 8.5  # When the version number changes, be sure to update the pkgIndex.tcl file,  # and the installation directory in the Makefiles. -package provide msgcat 1.4.4 +package provide msgcat 1.4.5  namespace eval msgcat {      namespace export mc mcload mclocale mcmax mcmset mcpreferences mcset \ @@ -32,7 +32,7 @@ namespace eval msgcat {      variable Msgs [dict create]      # Map of language codes used in Windows registry to those of ISO-639 -    if { $::tcl_platform(platform) eq "windows" } { +    if {[info sharedlibextension] eq ".dll"} {  	variable WinRegToISO639 [dict create  {*}{  	    01 ar 0401 ar_SA 0801 ar_IQ 0c01 ar_EG 1001 ar_LY 1401 ar_DZ  		  1801 ar_MA 1c01 ar_TN 2001 ar_OM 2401 ar_YE 2801 ar_SY @@ -426,7 +426,7 @@ proc msgcat::ConvertLocale {value} {  # Initialize the default locale  proc msgcat::Init {} { -    global env tcl_platform +    global env      #      # set default locale, try to get from environment @@ -454,7 +454,7 @@ proc msgcat::Init {} {      # The rest of this routine is special processing for Windows;      # all other platforms, get out now.      # -    if {$tcl_platform(platform) ne "windows"} { +    if {[info sharedlibextension] ne ".dll"} {  	mclocale C  	return      } @@ -464,10 +464,40 @@ proc msgcat::Init {} {      #      if {[catch {  	package require registry -	set key {HKEY_CURRENT_USER\Control Panel\International} +    }]} { +	mclocale C +	return +    } + +    # First check registry value LocalName present from Windows Vista +    # which contains the local string as RFC5646, composed of: +    # [a-z]{2,3} : language +    # -[a-z]{4}  : script (optional, not used) +    # -[a-z]{2}|[0-9]{3} : territory (optional, numerical region codes not used) +    # (-.*)* : variant, extension, private use (optional, not used) +    # Those are translated to local strings. +    # Examples: de-CH -> de_ch, sr-Latn-CS -> sr_cs, es-419 -> es +    # +    set key {HKEY_CURRENT_USER\Control Panel\International} +    if {([registry values $key "LocaleName"] ne "") +	    && [regexp {^([a-z]{2,3})(?:-[a-z]{4})?(?:-([a-z]{2}))?(?:-.+)?$}\ +	    [string tolower [registry get $key "LocaleName"]] match locale\ +	    territory]} { +	if {"" ne $territory} { +	    append locale _ $territory +	} +	if {![catch { +	    mclocale [ConvertLocale $locale] +	}]} { +	    return +	} +    } + +    # then check key locale which contains a numerical language ID +    if {[catch {  	set locale [registry get $key "locale"]      }]} { -        mclocale C +	mclocale C  	return      }      # diff --git a/library/msgcat/pkgIndex.tcl b/library/msgcat/pkgIndex.tcl index 17ad5db..60c2d3c 100644 --- a/library/msgcat/pkgIndex.tcl +++ b/library/msgcat/pkgIndex.tcl @@ -1,2 +1,2 @@  if {![package vsatisfies [package provide Tcl] 8.5]} {return} -package ifneeded msgcat 1.4.4 [list source [file join $dir msgcat.tcl]] +package ifneeded msgcat 1.4.5 [list source [file join $dir msgcat.tcl]] diff --git a/tests/msgcat.test b/tests/msgcat.test index 6fe4b31..bbcd023 100644 --- a/tests/msgcat.test +++ b/tests/msgcat.test @@ -17,8 +17,8 @@ if {[catch {package require tcltest 2}]} {      puts stderr "Skipping tests in [info script].  tcltest 2 required."      return  } -if {[catch {package require msgcat 1.4.4}]} { -    puts stderr "Skipping tests in [info script].  No msgcat 1.4.4 found to test." +if {[catch {package require msgcat 1.4.5}]} { +    puts stderr "Skipping tests in [info script].  No msgcat 1.4.5 found to test."      return  } diff --git a/unix/Makefile.in b/unix/Makefile.in index 883a379..a527bf0 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -781,8 +781,8 @@ install-libraries: libraries $(INSTALL_TZDATA) install-msgs  	    do \  	    $(INSTALL_DATA) $$i "$(SCRIPT_INSTALL_DIR)"/opt0.4; \  	    done; -	@echo "Installing package msgcat 1.4.4 as a Tcl Module"; -	@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.4.4.tm; +	@echo "Installing package msgcat 1.4.5 as a Tcl Module"; +	@$(INSTALL_DATA) $(TOP_DIR)/library/msgcat/msgcat.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/msgcat-1.4.5.tm;  	@echo "Installing package tcltest 2.3.4 as a Tcl Module";  	@$(INSTALL_DATA) $(TOP_DIR)/library/tcltest/tcltest.tcl "$(SCRIPT_INSTALL_DIR)"/../tcl8/8.5/tcltest-2.3.4.tm; diff --git a/win/Makefile.in b/win/Makefile.in index 17bb1aa..a06cc3f 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -644,8 +644,8 @@ install-libraries: libraries install-tzdata install-msgs  	    do \  	    $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \  	    done; -	@echo "Installing package msgcat 1.4.4 as a Tcl Module"; -	@$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.4.4.tm; +	@echo "Installing package msgcat 1.4.5 as a Tcl Module"; +	@$(COPY) $(ROOT_DIR)/library/msgcat/msgcat.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/msgcat-1.4.5.tm;  	@echo "Installing package tcltest 2.3.4 as a Tcl Module";  	@$(COPY) $(ROOT_DIR)/library/tcltest/tcltest.tcl $(SCRIPT_INSTALL_DIR)/../tcl8/8.5/tcltest-2.3.4.tm;  	@echo "Installing package platform 1.0.10 as a Tcl Module"; | 
