Index: openacs-4/packages/acs-lang/tcl/acs-lang-init.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/tcl/acs-lang-init.tcl,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/acs-lang/tcl/acs-lang-init.tcl 23 Oct 2002 11:50:50 -0000 1.1
+++ openacs-4/packages/acs-lang/tcl/acs-lang-init.tcl 11 Nov 2002 09:36:31 -0000 1.2
@@ -12,4 +12,7 @@
ad_schedule_proc -once t 5 lang::catalog::import_from_all_files
# Cache the message catalog from the database
-lang::message::cache
+global message_cache_loaded_p
+if { ![info exists message_cache_loaded_p] } {
+ lang::message::cache
+}
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 -N -r1.9 -r1.10
--- openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl 5 Nov 2002 17:03:43 -0000 1.9
+++ openacs-4/packages/acs-lang/tcl/lang-message-procs.tcl 11 Nov 2002 09:36:31 -0000 1.10
@@ -217,67 +217,81 @@
@return A localized piece of text.
} {
- # Peter TODO: add translation links
- # Peter TODO/FIXME: Should we prefix with ad_conn package_key if the lookup fails?
-
- set system_locale [parameter::get -package_id [apm_package_id_from_key acs-lang] -parameter SiteWideLocale]
-
- # Set default locale if none was provided
+ # If the cache hasn't been loaded - do so now
+ # Peter: should we go to the database on first hit and cache the messages as they are used
+ # instead of loading the whole cache up-front?
+ global message_cache_loaded_p
+ if { ![info exists message_cache_loaded_p] } {
+ lang::message::cache
+ }
+
if { [empty_string_p $locale] } {
+ # No locale provided
global ad_conn
if { [info exists ad_conn] } {
# We are in an HTTP connection (request) so use that locale
set locale [ad_conn locale]
} else {
# There is no HTTP connection - resort to system locale
+ set system_locale [parameter::get -package_id [apm_package_id_from_key acs-lang] -parameter SiteWideLocale]
set locale $system_locale
}
- }
-
- if { [string length $locale] == 2 } {
-
- # it's a language and not a locale
+ } elseif { [string length $locale] == 2 } {
+ # Only language provided
+
# let's get the default locale for this language
# The cache is flushed if the default locale for this language is
- # is changed.
+ # changed.
set locale [util_memoize [list ad_locale_locale_from_lang $locale]]
}
if { [nsv_exists lang_message_$locale $key] } {
- # Message catalog lookup succeeded
+ # Message exists in the given locale
+
set return_value [nsv_get lang_message_$locale $key]
+ # Do any variable substitutions (interpolation of variables)
+ if { [llength $substitution_list] > 0 || ($upvar_level >= 1 && [string first "%" $return_value] != -1) } {
+ set return_value [lang::message::format $return_value $substitution_list [expr $upvar_level + 1]]
+ }
} else {
# There is no entry in the message catalog for the given locale
- # is there any thing under this message key in the default locale
-
if { [nsv_exists lang_message_en_US $key] != 0 } {
- set return_value "$default: $key"
+ # The key exists but there is no translation in the current locale
+
+ if { ![lang::util::translator_mode_p] } {
+ # We are not in translator mode
+
+ if { [string equal $default "TRANSLATION MISSING"] } {
+ set return_value "$default: $key"
+ } else {
+ set return_value $default
+ }
+ } else {
+ # Translator mode - return a translation link
+
+ set key_split [split $key "."]
+ set package_key_part [lindex $key_split 0]
+ set message_key_part [lindex $key_split 1]
+
+ set return_url [ad_conn url]
+ if { [ns_getform] != "" } {
+ append return_url "?[export_entire_form_as_url_vars]"
+ }
+
+ set return_value " $message_key_part - TRANSLATE "
+ }
+
} {
+ # The key doesn't exist - this is a programming error
+
set return_value "NO KEY: $key"
+ ns_log Error "lang::message::lookup key doesn't exist: $key"
}
-
- if { [lang::util::translator_mode_p] } {
- set key_split [split $key "."]
- set package_key_part [lindex $key_split 0]
- set message_key_part [lindex $key_split 1]
-
- set return_url [ad_conn url]
- if { [ns_getform] != "" } {
- append return_url "?[export_entire_form_as_url_vars]"
- }
-
- set return_value " $message_key_part - TRANSLATE "
- }
}
- # Do any variable substitutions (interpolation of variables)
- if { [llength $substitution_list] > 0 || ($upvar_level >= 1 && [string first "%" $return_value] != -1) } {
- set return_value [lang::message::format $return_value $substitution_list [expr $upvar_level + 1]]
- }
-
return $return_value
}
@@ -316,6 +330,8 @@
} {
# We segregate messages by language. It might reduce contention
# if we segregage instead by package. Check for problems with ns_info locks.
+ global message_cache_loaded_p
+ set message_cache_loaded_p 1
set i 0
db_foreach select_locale_keys {} {
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 -N -r1.14 -r1.15
--- openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl 10 Nov 2002 20:07:16 -0000 1.14
+++ openacs-4/packages/acs-lang/tcl/lang-util-procs.tcl 11 Nov 2002 09:36:31 -0000 1.15
@@ -595,13 +595,21 @@
"not translated" message.
@author Lars Pind (lars@collaboraid.biz)
- @create-date October 24, 2002
+ @creation-date October 24, 2002
- @return 1 if translator mode is enabled, 0 otherwise.
+ @return 1 if translator mode is enabled, 0 otherwise. Returns 0 if there is
+ no HTTP connection.
@see lang::util::translator_mode_set
} {
- return [ad_get_client_property -default 0 acs-lang translator_mode_p]
+ global ad_conn
+ if { [info exists ad_conn] } {
+ # THere is an HTTP connection - return the client property
+ return [ad_get_client_property -default 0 acs-lang translator_mode_p]
+ } else {
+ # No HTTP connection
+ return 0
+ }
}
ad_proc -public translator_mode_set {
@@ -611,7 +619,7 @@
not.
@author Lars Pind (lars@collaboraid.biz)
- @create-date October 24, 2002
+ @creation-date October 24, 2002
@param translator_mode_p 1 if you want translator mode to be enabled, 0 otherwise.