summaryrefslogtreecommitdiff
path: root/src/zope/i18n/gettextmessagecatalog.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/i18n/gettextmessagecatalog.py')
-rw-r--r--src/zope/i18n/gettextmessagecatalog.py42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/zope/i18n/gettextmessagecatalog.py b/src/zope/i18n/gettextmessagecatalog.py
index 307e5be..884cf54 100644
--- a/src/zope/i18n/gettextmessagecatalog.py
+++ b/src/zope/i18n/gettextmessagecatalog.py
@@ -22,7 +22,12 @@ from zope.interface import implementer
class _KeyErrorRaisingFallback(object):
def ugettext(self, message):
raise KeyError(message)
+
+ def ungettext(self, singular, plural, n):
+ raise KeyError(singular)
+
gettext = ugettext
+ ngettext = ungettext
@implementer(IGlobalMessageCatalog)
@@ -33,13 +38,20 @@ class GettextMessageCatalog(object):
def __init__(self, language, domain, path_to_file):
"""Initialize the message catalog"""
- self.language = language.decode('utf-8') if isinstance(language, bytes) else language
- self.domain = domain.decode("utf-8") if isinstance(domain, bytes) else domain
+ self.language = (
+ language.decode('utf-8') if isinstance(language, bytes)
+ else language)
+ self.domain = (
+ domain.decode("utf-8") if isinstance(domain, bytes)
+ else domain)
self._path_to_file = path_to_file
self.reload()
catalog = self._catalog
catalog.add_fallback(_KeyErrorRaisingFallback())
- self._gettext = catalog.gettext if str is not bytes else catalog.ugettext
+ self._gettext = (
+ catalog.gettext if str is not bytes else catalog.ugettext)
+ self._ngettext = (
+ catalog.ngettext if str is not bytes else catalog.ungettext)
def reload(self):
'See IMessageCatalog'
@@ -50,13 +62,35 @@ class GettextMessageCatalog(object):
'See IMessageCatalog'
return self._gettext(id)
+ def getPluralMessage(self, singular, plural, n):
+ 'See IMessageCatalog'
+ msg = self._ngettext(singular, plural, n)
+ try:
+ return msg % n
+ except TypeError:
+ return msg
+
+ def queryPluralMessage(self, singular, plural, n, dft1=None, dft2=None):
+ 'See IMessageCatalog'
+ try:
+ msg = self._ngettext(singular, plural, n)
+ except KeyError:
+ if n == 1: # Please FIX using the language rule.
+ msg = dft1
+ else:
+ msg = dft2
+ try:
+ return msg % n
+ except TypeError:
+ return msg
+
def queryMessage(self, id, default=None):
'See IMessageCatalog'
try:
return self._gettext(id)
except KeyError:
return default
-
+
def getIdentifier(self):
'See IMessageCatalog'
return self._path_to_file