annotate roundup/cgi/TranslationService.py @ 3909:e89bcb28f683

indexargs_url force ids to int ids appear as hyperdb.String instances, which confused indexargs_url when they appear in the filterspec. They need to be treated as treated as integers when generating URLs. It feels sort of hacky to check for 'id' like this but I'm at a loss for what else to do in this case. Suggestions are welcome :) Maybe we should look into using some other hyperdb class to represent ids? this fixes [SF#783492] Some trailing whitespace also got trimmed.
author Justus Pendleton <jpend@users.sourceforge.net>
date Tue, 18 Sep 2007 16:59:42 +0000
parents a16239e37598
children f11fe2a13234
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1 # TranslationService for Roundup templates
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
2 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
3 # This module is free software, you may redistribute it
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
4 # and/or modify under the same terms as Python.
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
5 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
6 # This module provides National Language Support
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
7 # for Roundup templating - much like roundup.i18n
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
8 # module for Roundup command line interface.
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
9 # The only difference is that translator objects
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
10 # returned by get_translation() have one additional
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
11 # method which is used by TAL engines:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
12 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
13 # translate(domain, msgid, mapping, context, target_language, default)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
14 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
15
3806
a16239e37598 Handle 8-bit untranslateable messages from database properties
Richard Jones <richard@users.sourceforge.net>
parents: 3775
diff changeset
16 __version__ = "$Revision: 1.4 $"[11:-2]
a16239e37598 Handle 8-bit untranslateable messages from database properties
Richard Jones <richard@users.sourceforge.net>
parents: 3775
diff changeset
17 __date__ = "$Date: 2007-01-14 22:54:15 $"[7:-2]
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
18
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
19 from roundup import i18n
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
20 from roundup.cgi.PageTemplates import Expressions, PathIterator, TALES
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
21 from roundup.cgi.TAL import TALInterpreter
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
22
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
23 ### Translation classes
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
24
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
25 class TranslationServiceMixin:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
26
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
27 OUTPUT_ENCODING = "utf-8"
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
28
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
29 def translate(self, domain, msgid, mapping=None,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
30 context=None, target_language=None, default=None
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
31 ):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
32 _msg = self.gettext(msgid)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
33 #print ("TRANSLATE", msgid, _msg, mapping, context)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
34 _msg = TALInterpreter.interpolate(_msg, mapping)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
35 return _msg
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
36
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
37 def gettext(self, msgid):
3806
a16239e37598 Handle 8-bit untranslateable messages from database properties
Richard Jones <richard@users.sourceforge.net>
parents: 3775
diff changeset
38 if not isinstance(msgid, unicode):
a16239e37598 Handle 8-bit untranslateable messages from database properties
Richard Jones <richard@users.sourceforge.net>
parents: 3775
diff changeset
39 msgid = unicode(msgid, 'utf8')
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
40 return self.ugettext(msgid).encode(self.OUTPUT_ENCODING)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
41
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
42 def ngettext(self, singular, plural, number):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
43 return self.ungettext(singular, plural, number).encode(
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
44 self.OUTPUT_ENCODING)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
45
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
46 class TranslationService(TranslationServiceMixin, i18n.RoundupTranslations):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
47 pass
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
48
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
49 class NullTranslationService(TranslationServiceMixin,
3775
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
50 i18n.RoundupNullTranslations):
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
51 def ugettext(self, message):
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
52 if self._fallback:
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
53 return self._fallback.ugettext(message)
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
54 # Sometimes the untranslatable message is a UTF-8 encoded string
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
55 # (thanks to PageTemplate's internals).
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
56 if not isinstance(message, unicode):
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
57 return unicode(message, 'utf8')
beaf7ea86e5e handle 8-bit untranslateable messages in tracker templates
Richard Jones <richard@users.sourceforge.net>
parents: 2807
diff changeset
58 return message
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
59
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
60 ### TAL patching
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
61 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
62 # Template Attribute Language (TAL) uses only global translation service,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
63 # which is not thread-safe. We will use context variable 'i18n'
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
64 # to access request-dependent transalation service (with domain
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
65 # and target language set during initializations of the roundup
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
66 # client interface.
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
67 #
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
68
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
69 class Context(TALES.Context):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
70
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
71 def __init__(self, compiler, contexts):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
72 TALES.Context.__init__(self, compiler, contexts)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
73 if not self.contexts.get('i18n', None):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
74 # if the context contains no TranslationService,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
75 # create default one
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
76 self.contexts['i18n'] = get_translation()
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
77 self.i18n = self.contexts['i18n']
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
78
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
79 def translate(self, domain, msgid, mapping=None,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
80 context=None, target_language=None, default=None):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
81 if context is None:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
82 context = self.contexts.get('here')
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
83 return self.i18n.translate(domain, msgid,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
84 mapping=mapping, context=context, default=default,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
85 target_language=target_language)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
86
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
87 class Engine(TALES.Engine):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
88
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
89 def getContext(self, contexts=None, **kwcontexts):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
90 if contexts is not None:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
91 if kwcontexts:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
92 kwcontexts.update(contexts)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
93 else:
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
94 kwcontexts = contexts
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
95 return Context(self, kwcontexts)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
96
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
97 # patching TAL like this is a dirty hack,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
98 # but i see no other way to specify different Context class
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
99 Expressions._engine = Engine(PathIterator.Iterator)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
100 Expressions.installHandlers(Expressions._engine)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
101
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
102 ### main API function
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
103
2807
aa0316a1b2aa get_translation: removed 'domain' argument, added 'tracker_home' argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2556
diff changeset
104 def get_translation(language=None, tracker_home=None,
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
105 translation_class=TranslationService,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
106 null_translation_class=NullTranslationService
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
107 ):
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
108 """Return Translation object for given language and domain
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
109
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
110 Arguments 'translation_class' and 'null_translation_class'
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
111 specify the classes that are instantiated for existing
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
112 and non-existing translations, respectively.
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
113 """
2807
aa0316a1b2aa get_translation: removed 'domain' argument, added 'tracker_home' argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2556
diff changeset
114 return i18n.get_translation(language=language,
aa0316a1b2aa get_translation: removed 'domain' argument, added 'tracker_home' argument
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2556
diff changeset
115 tracker_home=tracker_home,
2556
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
116 translation_class=translation_class,
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
117 null_translation_class=null_translation_class)
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
118
297dedb7226e TranslationService for Roundup templates
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
119 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/