Index: openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl,v diff -u -r1.22 -r1.23 --- openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl 15 Aug 2003 15:42:58 -0000 1.22 +++ openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl 21 Aug 2003 08:45:26 -0000 1.23 @@ -330,7 +330,12 @@ } } elseif { [string length $locale] == 2 } { # Only language provided, let's get the default locale for this language - set locale [lang::util::default_locale_from_lang $locale] + set default_locale [lang::util::default_locale_from_lang $locale] + if { [empty_string_p $default_locale] } { + error "Could not look up locale for language $locale" + } else { + set locale $default_locale + } } if { [lang::util::translator_mode_p] } { Index: openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl,v diff -u -r1.20 -r1.21 --- openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl 18 Aug 2003 08:04:26 -0000 1.20 +++ openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl 21 Aug 2003 08:45:26 -0000 1.21 @@ -366,7 +366,7 @@ Returns the default locale for a language. Not cached. @author Henry Minsky (hqm@mit.edu) - @param language Name of a country, using ISO-3166 two letter code + @param language Name of a language, using a two or three letter ISO code @return Default locale @see lang::util::default_locale_from_lang @@ -375,14 +375,16 @@ # Note that this query does not use bind variables, because these cause the query to not # match any rows in Oracle when the language key is less than 3 characters, # because the column is a char(3), not a varchar2(3). - return [db_string default_locale_from_lang {}] + return [db_string default_locale_from_lang {} -default ""] } ad_proc -public lang::util::default_locale_from_lang { language } { - Returns the default locale for a language - + Returns an enabled default locale for a language. If a language + only has one locale then that locale is returned. If no locale + could be found the empty string is returned. + @author Henry Minsky (hqm@mit.edu) @param language Name of a country, using ISO-3166 two letter code @return Default locale Index: openacs-4/packages/acs-lang/tcl/lang-util-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/tcl/lang-util-procs.xql,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-lang/tcl/lang-util-procs.xql 18 Aug 2003 08:04:26 -0000 1.2 +++ openacs-4/packages/acs-lang/tcl/lang-util-procs.xql 21 Aug 2003 08:45:26 -0000 1.3 @@ -13,12 +13,15 @@ - - select locale - from ad_locales + select locale + from ad_locales where language = '[db_quote $language]' - and default_p = 't' - + and enabled_p = 't' + and (default_p = 't' or + (select count(*) + from ad_locales + where language = '[db_quote $language]') = 1 + ) Index: openacs-4/packages/acs-lang/tcl/locale-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/tcl/locale-procs.tcl,v diff -u -r1.14 -r1.15 --- openacs-4/packages/acs-lang/tcl/locale-procs.tcl 18 Aug 2003 08:08:33 -0000 1.14 +++ openacs-4/packages/acs-lang/tcl/locale-procs.tcl 21 Aug 2003 08:45:26 -0000 1.15 @@ -175,47 +175,6 @@ return [db_string system_utc_offset {}] } - -ad_proc -public lang::system::default_locale { - {-language:required} -} { - Get the default locale for language. Cached. - - @author Simon Carstensen - @author Peter Marklund - @creation-date 2003-08-13 - @return the default locale or the empty string if there is no default enabled locale. -} { - return [util_memoize [list lang::system::default_locale_not_cached \ - -language $language]] -} - -ad_proc -private lang::system::default_locale_not_cached { - {-language:required} -} { - Get the default locale for language. - - @author Simon Carstensen - @author Peter Marklund - @creation-date 2003-08-13 - @return the default locale or the empty string if there is no default enabled locale. -} { - # Using a bind variable for language doens't work - # with Oracle since the language column is a char, not a varchar - # We'd have to pad the language with spaces for bind vars to work - return [db_string select_default_locale " - select locale - from ad_locales - where language = '$language' - and enabled_p = 't' - and (default_p = 't' or - (select count(*) - from ad_locales - where language = '$language') = 1 - ) - " -default ""] -} - ad_proc -public lang::system::get_locales {} { Return all enabled locales in the system. Cached @@ -510,8 +469,7 @@ # we have a different locale with matching language, # i.e. a tentative match if { ![info exists tentative_match] } { - set default_locale [lang::system::default_locale \ - -language $language] + set default_locale [lang::util::default_locale_for_lang $language] if { ![empty_string_p $default_locale] } { set tentative_match $default_locale } @@ -523,8 +481,7 @@ } } else { # We have just a language, e.g. en - set default_locale [lang::system::default_locale \ - -language $locale] + set default_locale [lang::util::default_locale_for_lang $locale] if { ![empty_string_p $default_locale] } { set perfect_match $default_locale break Index: openacs-4/packages/acs-lang/www/admin/locale-make-default.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/www/admin/locale-make-default.tcl,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-lang/www/admin/locale-make-default.tcl 14 Aug 2003 16:06:20 -0000 1.4 +++ openacs-4/packages/acs-lang/www/admin/locale-make-default.tcl 21 Aug 2003 08:45:26 -0000 1.5 @@ -29,6 +29,6 @@ } # Flush caches -util_memoize_flush_regexp {^lang::system::default_locale_not_cached} +util_memoize_flush_regexp {^lang::util::default_locale_from_lang_not_cached} template::forward "index?tab=locales" Index: openacs-4/packages/acs-lang/www/admin/locale-set-enabled-p.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/www/admin/locale-set-enabled-p.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-lang/www/admin/locale-set-enabled-p.tcl 14 Aug 2003 16:06:20 -0000 1.2 +++ openacs-4/packages/acs-lang/www/admin/locale-set-enabled-p.tcl 21 Aug 2003 08:45:27 -0000 1.3 @@ -13,7 +13,7 @@ db_dml set_enabled_p { update ad_locales set enabled_p = :enabled_p where locale = :locale } # Flush caches -util_memoize_flush_regexp {^lang::system::default_locale_not_cached} +util_memoize_flush_regexp {^lang::util::default_locale_from_lang_not_cached} util_memoize_flush_regexp {^lang::system::get_locales} ad_returnredirect .