summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Regebro <regebro@gmail.com>2008-07-16 16:59:29 +0000
committerLennart Regebro <regebro@gmail.com>2008-07-16 16:59:29 +0000
commit55467991c56f20ef2699741cba00361185a0f7c1 (patch)
treea9a377c7cada9acd30b2c56e1a47baefe957dcf9
parenta5aaa5bc0f63ba02c7c488615caa2fa78a708525 (diff)
downloadzope-i18n-regebro-pluralsupport.tar.gz
Changed the API. It's unwieldy as it is, so better have separate methods regebro-pluralsupport
for plurals.
-rw-r--r--src/zope/i18n/gettextmessagecatalog.py48
-rw-r--r--src/zope/i18n/tests/en-default.mobin479 -> 478 bytes
-rw-r--r--src/zope/i18n/tests/en-default.po2
-rw-r--r--src/zope/i18n/tests/test_imessagecatalog.py27
4 files changed, 55 insertions, 22 deletions
diff --git a/src/zope/i18n/gettextmessagecatalog.py b/src/zope/i18n/gettextmessagecatalog.py
index 596ce1a..0d7c8b6 100644
--- a/src/zope/i18n/gettextmessagecatalog.py
+++ b/src/zope/i18n/gettextmessagecatalog.py
@@ -23,6 +23,9 @@ from zope.interface import implements
class _KeyErrorRaisingFallback(object):
def ugettext(self, message):
raise KeyError(message)
+
+ def ungettext(self, message, message2, n):
+ raise KeyError(message)
class GettextMessageCatalog(object):
@@ -46,31 +49,40 @@ class GettextMessageCatalog(object):
finally:
fp.close()
- def getMessage(self, id, n=None):
+ def getMessage(self, id):
'See IMessageCatalog'
- if n is None:
- return self._catalog.ugettext(id)
- else:
- msg = self._catalog.ungettext(id, id, n)
- try:
- return msg % n
- except TypeError:
- return msg
+ return self._catalog.ugettext(id)
+
+ def getPluralMessage(self, id1, id2, n):
+ 'See IMessageCatalog'
+ msg = self._catalog.ungettext(id1, id2, n)
+ try:
+ return msg % n
+ except TypeError:
+ return msg
- def queryMessage(self, id, default=None, n=None):
+ def queryMessage(self, id, default=None):
'See IMessageCatalog'
try:
- if n is None:
- return self._catalog.ugettext(id)
- else:
- msg = self._catalog.ungettext(id, id, n)
- try:
- return msg % n
- except TypeError:
- return msg
+ return self._catalog.ugettext(id)
except KeyError:
return default
+ def queryPluralMessage(self, id1, id2, n, default1=None, default2=None):
+ 'See IMessageCatalog'
+ try:
+ msg = self._catalog.ungettext(id1, id2, n)
+ except KeyError:
+ if n == 1:
+ msg = default1
+ else:
+ msg = default2
+ try:
+ return msg % n
+ except TypeError:
+ return msg
+
+
def getIdentifier(self):
'See IMessageCatalog'
return self._path_to_file
diff --git a/src/zope/i18n/tests/en-default.mo b/src/zope/i18n/tests/en-default.mo
index d6eb705..3e9dc9e 100644
--- a/src/zope/i18n/tests/en-default.mo
+++ b/src/zope/i18n/tests/en-default.mo
Binary files differ
diff --git a/src/zope/i18n/tests/en-default.po b/src/zope/i18n/tests/en-default.po
index fbe0694..fc45a11 100644
--- a/src/zope/i18n/tests/en-default.po
+++ b/src/zope/i18n/tests/en-default.po
@@ -14,7 +14,7 @@ msgstr "Hello!"
msgid "greeting"
msgstr "Hello $name, how are you?"
-msgid "There are %d files."
+msgid "There is one file."
msgid_plural "There are %d files."
msgstr[0] "There is one file."
msgstr[1] "There are %d files."
diff --git a/src/zope/i18n/tests/test_imessagecatalog.py b/src/zope/i18n/tests/test_imessagecatalog.py
index fa4d2c0..eb42f81 100644
--- a/src/zope/i18n/tests/test_imessagecatalog.py
+++ b/src/zope/i18n/tests/test_imessagecatalog.py
@@ -49,13 +49,34 @@ class TestIMessageCatalog(unittest.TestCase):
self.assertEqual(catalog.queryMessage('foo'), None)
self.assertEqual(catalog.queryMessage('foo', 'bar'), 'bar')
- def testPluralMessage(self):
+ def testGetPluralMessage(self):
catalog = self._catalog
- self.assertEqual(catalog.getMessage('There are %d files.', n=1),
+ self.assertEqual(catalog.getPluralMessage(
+ 'There is one file.', 'There are %d files.', 1),
'There is one file.')
- self.assertEqual(catalog.getMessage('There are %d files.', n=3),
+ self.assertEqual(catalog.getPluralMessage(
+ 'There is one file.', 'There are %d files.', 3),
'There are 3 files.')
+ self.assertRaises(KeyError, catalog.getPluralMessage,
+ 'There are %d files.', 'bar', 6)
+ def testQeuryPluralMessage(self):
+ catalog = self._catalog
+ self.assertEqual(catalog.queryPluralMessage(
+ 'There is one file.', 'There are %d files.', 1),
+ 'There is one file.')
+ self.assertEqual(catalog.queryPluralMessage(
+ 'There is one file.', 'There are %d files.', 3),
+ 'There are 3 files.')
+ self.assertEqual(catalog.queryPluralMessage(
+ 'There are %d files.', 'There is one file.', 1,
+ 'There is one file.', 'There are %d files.', ),
+ 'There is one file.')
+ self.assertEqual(catalog.queryPluralMessage(
+ 'There are %d files.', 'There is one file.', 3,
+ 'There is one file.', 'There are %d files.', ),
+ 'There are 3 files.')
+
def testGetLanguage(self):
catalog = self._catalog
self.assertEqual(catalog.language, 'en')