@@ -387,7 +387,15 @@ def __init__(self, instance, request, env, form=None, translator=None):
387387 self .instance = instance
388388 self .request = request
389389 self .env = env
390- self .setTranslator (translator )
390+ if translator is not None :
391+ self .setTranslator (translator )
392+ # XXX we should set self.language to "translator"'s language,
393+ # but how to get it ?
394+ self .language = ""
395+ else :
396+ self .setTranslator (TranslationService .NullTranslationService ())
397+ self .language = "" # as is the default from determine_language
398+
391399 self .mailer = Mailer (instance .config )
392400 # If True the form contents wins over the database contents when
393401 # rendering html properties. This is set when an error occurs so
@@ -540,11 +548,13 @@ def handle_xmlrpc(self):
540548 # Set the charset and language, since other parts of
541549 # Roundup may depend upon that.
542550 self .determine_charset ()
543- self .determine_language ()
551+ if self .instance .config ["WEB_TRANSLATE_XMLRPC" ] :
552+ self .determine_language ()
544553 # Open the database as the correct user.
545554 try :
546555 self .determine_user ()
547556 self .db .tx_Source = "xmlrpc"
557+ self .db .i18n = self .translator
548558 except LoginError as msg :
549559 output = xmlrpc_ .client .dumps (
550560 xmlrpc_ .client .Fault (401 , "%s" % msg ),
@@ -594,12 +604,14 @@ def handle_xmlrpc(self):
594604 def handle_rest (self ):
595605 # Set the charset and language
596606 self .determine_charset ()
597- self .determine_language ()
607+ if self .instance .config ["WEB_TRANSLATE_REST" ] :
608+ self .determine_language ()
598609 # Open the database as the correct user.
599610 # TODO: add everything to RestfulDispatcher
600611 try :
601612 self .determine_user ()
602613 self .db .tx_Source = "rest"
614+ self .db .i18n = self .translator
603615 except LoginError as err :
604616 self .response_code = http_ .client .UNAUTHORIZED
605617 output = s2b ("Invalid Login - %s" % str (err ))
@@ -622,7 +634,7 @@ def handle_rest(self):
622634 # Call csrf with xmlrpc checks enabled.
623635 # It will return True if everything is ok,
624636 # raises exception on check failure.
625- csrf_ok = self .handle_csrf (xmlrpc = True )
637+ csrf_ok = self .handle_csrf (xmlrpc = True )
626638 except (Unauthorised , UsageError ) as msg :
627639 # report exception back to server
628640 exc_type , exc_value , exc_tb = sys .exc_info ()
@@ -699,7 +711,6 @@ def inner_main(self):
699711 self ._error_message = []
700712 try :
701713 self .determine_charset ()
702- self .determine_language ()
703714
704715 try :
705716 # make sure we're identified (even anonymously)
@@ -708,6 +719,9 @@ def inner_main(self):
708719 # figure out the context and desired content template
709720 self .determine_context ()
710721
722+ self .determine_language ()
723+ self .db .i18n = self .translator
724+
711725 # if we've made it this far the context is to a bit of
712726 # Roundup's real web interface (not a file being served up)
713727 # so do the Anonymous Web Acess check now
@@ -764,6 +778,9 @@ def inner_main(self):
764778 # exception or a NotModified exception. Those
765779 # exceptions will be handled by the outermost set of
766780 # exception handlers.
781+ self .determine_language ()
782+ self .db .i18n = self .translator
783+
767784 self .serve_file (designator )
768785 except SendStaticFile as file :
769786 self .serve_static_file (str (file ))
@@ -985,11 +1002,18 @@ def determine_language(self):
9851002 else :
9861003 language = ""
9871004
1005+ if not language :
1006+ # default to tracker language
1007+ language = self .instance .config ["TRACKER_LANGUAGE" ]
1008+
1009+ # this maybe is not correct, as get_translation could not
1010+ # find desired locale and switch back to "en" but we set
1011+ # self.language to the desired language !
9881012 self .language = language
989- if language :
990- self .setTranslator (TranslationService .get_translation (
991- language ,
992- tracker_home = self .instance .config ["TRACKER_HOME" ]))
1013+
1014+ self .setTranslator (TranslationService .get_translation (
1015+ language ,
1016+ tracker_home = self .instance .config ["TRACKER_HOME" ]))
9931017
9941018 def authenticate_bearer_token (self , challenge ):
9951019 ''' authenticate the bearer token. Refactored from determine_user()
0 commit comments