def test_localize_exception(self): message_catalog = { 'bad ${name}': 'TRANSLATED ${name} BLAH', 'hello world': 'howdy world', 'blah blah': 'yada yada', } gettext = message_catalog.get e1 = ValueError("hello world") assert localize_exc(e1, gettext) == "howdy world" e2 = i18n_exception(ValueError, "blah blah") assert localize_exc(e2, gettext) == "yada yada" e3 = i18n_exception(ValueError, "bad ${name}", name="llama") assert localize_exc(e3, gettext) == "TRANSLATED llama BLAH"
def _translateSessionMessages(self, messages, **kwargs): """ Translates Session messages using interpolation like so: >>> self._translateSessionMessages(u"Hello world") [u'Hello world'] >>> self._translateSessionMessages("Message ${a1} ${a2}", a1="aaaa", a2="bbbb") [u'Message aaaa bbbb'] >>> self._translateSessionMessages([('First message ${arg1}', {'arg1': 'axxx'}), 'Second message', ]) [u'First message axxx', 'Second message'] >>> self._translateSessionMessages(['First message','Second message']) ['First message', 'Second message'] >>> self._translateSessionMessages(ValueError('bad value')) ['bad value'] >>> from naaya.core.exceptions import i18n_exc >>> self._translateSessionMessages(i18n_exc(ValueError, 'bad ${x}', x='gigi')) ['bad gigi'] """ translate = self.getPortalI18n().get_translation if isinstance(messages, (str, unicode)): return [translate(messages, **kwargs), ] elif isinstance(messages, (list, tuple)): # This is the 3rd example translated_messages = [] for message in messages: if isinstance(message, (list, tuple)): message_str = message[0] #the message try: interpolation_params = message[1] except IndexError: interpolation_params = {} trans_message = translate(message_str, **interpolation_params) elif isinstance(message, (str, unicode)): trans_message = translate(message) else: trans_message = translate(str(message)) if not trans_message: # There is no translation return unmodified trans_message = message translated_messages.append(trans_message) return translated_messages elif isinstance(messages, Exception): return [ localize_exc(messages, translate) ] else: raise ValueError("Invalid arguments")