diff options
author | Souheil CHELFOUH <trollfot@gmail.com> | 2018-09-04 11:55:12 +0200 |
---|---|---|
committer | Souheil CHELFOUH <trollfot@gmail.com> | 2018-09-04 11:55:12 +0200 |
commit | b759fc44c2804aa380e8f40ccf608374f8e91305 (patch) | |
tree | ca582b26b42a0a9bef8a0f658dd06b3c5a412a7c /src/zope/i18n/gettextmessagecatalog.py | |
parent | ece19b3b7d984657019a896bdc5e3b407f75ac9e (diff) | |
download | zope-i18n-b759fc44c2804aa380e8f40ccf608374f8e91305.tar.gz |
First implementation of plurals. This is a bit rough, still.
Added Polish translations to have a complex plural rule handy.
Currently, only german is tested.
We need to test the whole set of languages and probably add more.
Diffstat (limited to 'src/zope/i18n/gettextmessagecatalog.py')
-rw-r--r-- | src/zope/i18n/gettextmessagecatalog.py | 42 |
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 |