summaryrefslogtreecommitdiff
path: root/src/zope/i18n/tests/test_plurals.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/i18n/tests/test_plurals.py')
-rw-r--r--src/zope/i18n/tests/test_plurals.py59
1 files changed, 46 insertions, 13 deletions
diff --git a/src/zope/i18n/tests/test_plurals.py b/src/zope/i18n/tests/test_plurals.py
index 6c408db..79d8347 100644
--- a/src/zope/i18n/tests/test_plurals.py
+++ b/src/zope/i18n/tests/test_plurals.py
@@ -17,8 +17,9 @@
import os
import unittest
from zope.i18n import tests
+from zope.i18n.translationdomain import TranslationDomain
from zope.i18n.gettextmessagecatalog import GettextMessageCatalog
-from zope.i18n.tests import test_imessagecatalog
+from zope.i18nmessageid import MessageFactory
class TestPlurals(unittest.TestCase):
@@ -29,6 +30,14 @@ class TestPlurals(unittest.TestCase):
catalog = GettextMessageCatalog(locale, variant, self._path)
return catalog
+ def _getTranslationDomain(self, locale, variant="default"):
+ path = os.path.dirname(tests.__file__)
+ self._path = os.path.join(path, '%s-%s.mo' % (locale, variant))
+ catalog = GettextMessageCatalog(locale, variant, self._path)
+ domain = TranslationDomain('default')
+ domain.addCatalog(catalog)
+ return domain
+
def test_GermanPlurals(self):
"""Germanic languages such as english and german share the plural
rule. We test the german here.
@@ -42,13 +51,12 @@ class TestPlurals(unittest.TestCase):
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 3),
'Es gibt 3 Dateien.')
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 0),
'Es gibt 0 Dateien.')
-
+
# Unknown id
- self.assertRaises(KeyError, catalog.getPluralMessage,
+ self.assertRaises(KeyError, catalog.getPluralMessage,
'There are %d files.', 'bar', 6)
# Query without default values
@@ -79,23 +87,18 @@ class TestPlurals(unittest.TestCase):
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 0),
u"Istnieją 0 plików.")
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 1),
u"Istnieje 1 plik.")
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 3),
u"Istnieją 3 pliki.")
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 17),
u"Istnieją 17 plików.")
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 23),
u"Istnieją 23 pliki.")
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 28),
u"Istnieją 28 plików.")
@@ -111,7 +114,6 @@ class TestPlurals(unittest.TestCase):
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 1.0),
'There is one file.')
-
self.assertEqual(catalog.getPluralMessage(
'There is one file.', 'There are %d files.', 3.5),
'There are 3 files.')
@@ -122,14 +124,45 @@ class TestPlurals(unittest.TestCase):
'The item is rated %s/5 stars.', 3.5),
'The item is rated 3.5/5 stars.')
- # It's cast either to an int or a float because of the %s in
- # the translation string.
+ # It's cast either to an int or a float because of the %s in
+ # the translation string.
self.assertEqual(catalog.getPluralMessage(
'There is %d chance.',
'There are %f chances.', 1.5),
'There are 1.500000 chances.')
-
self.assertEqual(catalog.getPluralMessage(
'There is %d chance.',
'There are %f chances.', 3.5),
'There are 3.500000 chances.')
+
+ def test_recursive_translation(self):
+ domain = self._getTranslationDomain('en')
+ factory = MessageFactory('default')
+ translate = domain.translate
+
+ # Singular
+ banana = factory('banana', msgid_plural='bananas', number=1)
+ phrase = factory('There is %d ${type}.',
+ msgid_plural='There are %d ${type}.',
+ number=1, mapping={'type': banana})
+ self.assertEqual(
+ translate(phrase, target_language="en"),
+ 'There is 1 banana.')
+
+ # Plural
+ apple = factory('apple', msgid_plural='apples', number=10)
+ phrase = factory('There is %d ${type}.',
+ msgid_plural='There are %d ${type}.',
+ number=10, mapping={'type': apple})
+ self.assertEqual(
+ translate(phrase, target_language="en"),
+ 'There are 10 apples.')
+
+ # Straight translation with translatable mapping
+ apple = factory('apple', msgid_plural='apples', number=75)
+ self.assertEqual(
+ translate(msgid='There is %d ${type}.',
+ msgid_plural='There are %d ${type}.',
+ mapping={'type': apple},
+ target_language="en", number=75),
+ 'There are 75 apples.')