diff --git a/gluon/languages.py b/gluon/languages.py index 6a0f22b1..293ecac9 100644 --- a/gluon/languages.py +++ b/gluon/languages.py @@ -431,7 +431,10 @@ class lazyT(object): return str(self) if self.M else local_html_escape(str(self), quote=False) def encode(self, *a, **b): - return str(self).encode(*a, **b) + if PY2 and a[0] != 'utf8': + return to_unicode(str(self)).encode(*a, **b) + else: + return str(self) def decode(self, *a, **b): if PY2: diff --git a/gluon/tests/test_languages.py b/gluon/tests/test_languages.py index 7cc33723..c996bd6a 100644 --- a/gluon/tests/test_languages.py +++ b/gluon/tests/test_languages.py @@ -12,8 +12,9 @@ import tempfile import unittest from gluon import languages -from gluon._compat import PY2, to_unicode +from gluon._compat import PY2, to_unicode, to_bytes from gluon.storage import Messages +from gluon.html import SPAN MP_WORKING = 0 try: @@ -201,3 +202,24 @@ class TestMessages(unittest.TestCase): messages = Messages(T) messages.update({'email_sent':'Email sent', 'test': "ä"}) self.assertEqual(to_unicode(messages.email_sent, 'utf-8'), 'Email sent') + +class TestHTMLTag(unittest.TestCase): + + def setUp(self): + if os.path.isdir('gluon'): + self.langpath = 'applications/welcome/languages' + else: + self.langpath = os.path.realpath( + '../../applications/welcome/languages') + self.http_accept_language = 'en' + + def tearDown(self): + pass + + def test_decode(self): + T = languages.translator(self.langpath, self.http_accept_language) + elem = SPAN(T("Complete")) + self.assertEqual(elem.flatten(), "Complete") + elem = SPAN(T("Cannot be empty", language="ru")) + self.assertEqual(elem.xml(), to_bytes('Пустое значение недопустимо')) + self.assertEqual(elem.flatten(), 'Пустое значение недопустимо')