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 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"
Esempio n. 3
0
    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")