diff --git a/gluon/tests/test_languages.py b/gluon/tests/test_languages.py
index c996bd6a..cfa07cb8 100644
--- a/gluon/tests/test_languages.py
+++ b/gluon/tests/test_languages.py
@@ -93,20 +93,162 @@ class TestTranslations(unittest.TestCase):
'Hello World')
self.assertEqual(str(T('Hello World## comment')),
'Hello World')
+ self.assertEqual(str(T.M('**Hello World**')),
+ 'Hello World')
+ # sub_tuple testing
self.assertEqual(str(T('%s %%{shop}', 1)),
'1 shop')
self.assertEqual(str(T('%s %%{shop}', 2)),
'2 shops')
+ self.assertEqual(str(T('%%{quark(%s)}', 1)),
+ 'quark')
+ self.assertEqual(str(T('%%{quark(%i)}', 2)),
+ 'quarks')
+ self.assertEqual(str(T('%%{!quark(%s)}', 1)),
+ 'Quark')
+ self.assertEqual(str(T('%%{!!quark(%i)}', 2)),
+ 'Quarks')
+ self.assertEqual(str(T('%%{!!!quark(%s)}', 0)),
+ 'QUARKS')
+ self.assertEqual(str(T('%%{?an?%i}', 1)),
+ 'an')
+ self.assertEqual(str(T('%%{?an?%s}', 0)),
+ '0')
+ self.assertEqual(str(T('%%{??%i}', 1)),
+ '')
+ self.assertEqual(str(T('%%{??%s}', 2)),
+ '2')
+ self.assertEqual(str(T('%%{?%i}', 1)),
+ '')
+ self.assertEqual(str(T('%%{?%s}', 0)),
+ '0')
+ self.assertEqual(str(T('%%{?one?%i?zero}', 1)),
+ 'one')
+ self.assertEqual(str(T('%%{?one?%s?zero}', 23)),
+ '23')
+ self.assertEqual(str(T('%%{?one?%i?zero}', 0)),
+ 'zero')
+ self.assertEqual(str(T('%%{?one?%s?}', 1)),
+ 'one')
+ self.assertEqual(str(T('%%{?one?%i?}', 23)),
+ '23')
+ self.assertEqual(str(T('%%{?one?%s?}', 0)),
+ '')
+ self.assertEqual(str(T('%%{??%i?zero}', 1)),
+ '')
+ self.assertEqual(str(T('%%{??%s?zero}', 23)),
+ '23')
+ self.assertEqual(str(T('%%{??%i?zero}', 0)),
+ 'zero')
+ self.assertEqual(str(T('%%{??1?}%s', '')),
+ '')
+ self.assertEqual(str(T('%%{??%s?}', 23)),
+ '23')
+ self.assertEqual(str(T('%%{??0?}%s', '')),
+ '')
self.assertEqual(str(T('%s %%{shop[0]}', 1)),
'1 shop')
self.assertEqual(str(T('%s %%{shop[0]}', 2)),
'2 shops')
- self.assertEqual(str(T('%s %%{quark[0]}', 1)),
- '1 quark')
- self.assertEqual(str(T('%s %%{quark[0]}', 2)),
- '2 quarks')
- self.assertEqual(str(T.M('**Hello World**')),
- 'Hello World')
+ self.assertEqual(str(T('%i %%{?one?not_one[0]}', 1)),
+ '1 one')
+ self.assertEqual(str(T('%i %%{?one?not_one[0]}', 2)),
+ '2 not_one')
+ self.assertEqual(str(T('%%{??on[0]} %i', 1)),
+ ' 1')
+ self.assertEqual(str(T('%%{??on[0]} %s', 0)),
+ 'on 0')
+ self.assertEqual(str(T('%%{?on[0]} %s', 1)),
+ ' 1')
+ self.assertEqual(str(T('%%{?on[0]} %i', 2)),
+ 'on 2')
+ self.assertEqual(str(T('%i %%{?one?or_more?zero[0]}', 1)),
+ '1 one')
+ self.assertEqual(str(T('%i %%{?one?or_more?zero[0]}', 2)),
+ '2 or_more')
+ self.assertEqual(str(T('%i %%{?one?or_more?zero[0]}', 0)),
+ '0 zero')
+ self.assertEqual(str(T('%i %%{?one?hands?[0]}', 1)),
+ '1 one')
+ self.assertEqual(str(T('%s %%{?one?hands?[0]}', 2)),
+ '2 hands')
+ self.assertEqual(str(T('%i %%{?one?hands?[0]}', 0)),
+ '0 ')
+ self.assertEqual(str(T('%s %%{??or_more?zero[0]}', 1)),
+ '1 ')
+ self.assertEqual(str(T('%i %%{??or_more?zero[0]}', 2)),
+ '2 or_more')
+ self.assertEqual(str(T('%s %%{??or_more?zero[0]}', 0)),
+ '0 zero')
+ self.assertEqual(str(T('%i%%{??nd?[0]}', 1)),
+ '1')
+ self.assertEqual(str(T('%i%%{??nd?[0]}', 2)),
+ '2nd')
+ self.assertEqual(str(T('%i%%{??nd?[0]}', 0)),
+ '0')
+ self.assertEqual(str(T('%i%%{?st?[0]}', 1)),
+ '1st')
+ self.assertEqual(str(T('%i%%{?st?[0]}', 2)),
+ '2')
+ self.assertEqual(str(T('%i%%{?st?[0]}', 0)),
+ '0')
+ # sub_dict testing
+ self.assertEqual(str(T('%(key)s %%{is(key)}', dict(key=1))),
+ '1 is')
+ self.assertEqual(str(T('%(key)i %%{is(key)}', dict(key=2))),
+ '2 are')
+ self.assertEqual(str(T('%%{!!!is(%(key)s)}', dict(key=2))),
+ 'ARE')
+ self.assertEqual(str(T('%(key)i %%{?not_one(key)}', dict(key=1))),
+ '1 ')
+ self.assertEqual(str(T('%(key)s %%{?not_one(key)}', dict(key=2))),
+ '2 not_one')
+ self.assertEqual(str(T('%(key)i %%{?not_one(key)}', dict(key=0))),
+ '0 not_one')
+ self.assertEqual(str(T('%(key)s %%{?one?not_one(key)}', dict(key=1))),
+ '1 one')
+ self.assertEqual(str(T('%(key)i %%{?one?not_one(key)}', dict(key=2))),
+ '2 not_one')
+ self.assertEqual(str(T('%(key)s %%{?one?not_one(key)}', dict(key=0))),
+ '0 not_one')
+ self.assertEqual(str(T('%(key)i %%{?one?(key)}', dict(key=1))),
+ '1 one')
+ self.assertEqual(str(T('%(key)s %%{?one?(key)}', dict(key=2))),
+ '2 ')
+ self.assertEqual(str(T('%(key)i %%{?one?(key)}', dict(key=0))),
+ '0 ')
+ self.assertEqual(str(T('%(key)s %%{??not_one(key)}', dict(key=1))),
+ '1 ')
+ self.assertEqual(str(T('%(key)i %%{??not_one(key)}', dict(key=2))),
+ '2 not_one')
+ self.assertEqual(str(T('%(key)s %%{?not_one(key)}', dict(key=1))),
+ '1 ')
+ self.assertEqual(str(T('%(key)i %%{?not_one(key)}', dict(key=0))),
+ '0 not_one')
+ self.assertEqual(str(T('%(key)s %%{?one?other?zero(key)}', dict(key=1))),
+ '1 one')
+ self.assertEqual(str(T('%(key)i %%{?one?other?zero(key)}', dict(key=4))),
+ '4 other')
+ self.assertEqual(str(T('%(key)s %%{?one?other?zero(key)}', dict(key=0))),
+ '0 zero')
+ self.assertEqual(str(T('%(key)i %%{?one?two_or_more?(key)}', dict(key=1))),
+ '1 one')
+ self.assertEqual(str(T('%(key)s %%{?one?two_or_more?(key)}', dict(key=2))),
+ '2 two_or_more')
+ self.assertEqual(str(T('%(key)i %%{?one?two_or_more?(key)}', dict(key=0))),
+ '0 ')
+ self.assertEqual(str(T('%(key)s %%{??two_or_more?zero(key)}', dict(key=1))),
+ '1 ')
+ self.assertEqual(str(T('%(key)i %%{??two_or_more?zero(key)}', dict(key=2))),
+ '2 two_or_more')
+ self.assertEqual(str(T('%(key)s %%{??two_or_more?zero(key)}', dict(key=0))),
+ '0 zero')
+ self.assertEqual(str(T('%(key)i %%{??two_or_more?(key)}', dict(key=1))),
+ '1 ')
+ self.assertEqual(str(T('%(key)s %%{??two_or_more?(key)}', dict(key=0))),
+ '0 ')
+ self.assertEqual(str(T('%(key)i %%{??two_or_more?(key)}', dict(key=2))),
+ '2 two_or_more')
T.force('it')
self.assertEqual(str(T('Hello World')),
'Salve Mondo')