[Checkins] SVN: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/ Fiddling a bit aiming at plural support that is both flexible and easy

Lennart Regebro regebro at gmail.com
Wed Jul 16 09:35:48 EDT 2008


Log message for revision 88401:
  Fiddling a bit aiming at plural support that is both flexible and easy 
  to use from templates.
  

Changed:
  U   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/gettextmessagecatalog.py
  U   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.mo
  U   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.po
  A   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.mo
  A   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.po
  U   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/test_imessagecatalog.py
  U   zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/translationdomain.py

-=-
Modified: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/gettextmessagecatalog.py
===================================================================
--- zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/gettextmessagecatalog.py	2008-07-16 13:34:18 UTC (rev 88400)
+++ zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/gettextmessagecatalog.py	2008-07-16 13:35:48 UTC (rev 88401)
@@ -46,14 +46,28 @@
         finally:
             fp.close()
 
-    def getMessage(self, id):
+    def getMessage(self, id, n=None):
         'See IMessageCatalog'
-        return self._catalog.ugettext(id)
+        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                    
 
-    def queryMessage(self, id, default=None):
+    def queryMessage(self, id, default=None, n=None):
         'See IMessageCatalog'
         try:
-            return self._catalog.ugettext(id)
+            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                    
         except KeyError:
             return default
 

Modified: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.mo
===================================================================
(Binary files differ)

Modified: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.po
===================================================================
--- zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.po	2008-07-16 13:34:18 UTC (rev 88400)
+++ zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/en-default.po	2008-07-16 13:35:48 UTC (rev 88401)
@@ -6,9 +6,15 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 msgid "short_greeting"
 msgstr "Hello!"
 
 msgid "greeting"
 msgstr "Hello $name, how are you?"
+
+msgid "There are %d files."
+msgid_plural "There are %d files."
+msgstr[0] "There is one file."
+msgstr[1] "There are %d files."

Added: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.mo
===================================================================
(Binary files differ)


Property changes on: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.po
===================================================================
--- zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.po	                        (rev 0)
+++ zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/pl-default.po	2008-07-16 13:35:48 UTC (rev 88401)
@@ -0,0 +1,21 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Zope 3\n"
+"PO-Revision-Date: 2008-07-12 11:22+0100\n"
+"Last-Translator: Zope 3 contributors\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+msgid "short_greeting"
+msgstr "Cze¶æ!"
+
+msgid "greeting"
+msgstr "Cze¶æ $name, jak siê masz?"
+
+msgid "There is %d file."
+msgid_plural "There are %d files."
+msgstr[0] "Istnieje %d plik."
+msgstr[1] "Istniej± %d pliki."
+msgstr[2] "Istniej± %d plików."

Modified: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/test_imessagecatalog.py
===================================================================
--- zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/test_imessagecatalog.py	2008-07-16 13:34:18 UTC (rev 88400)
+++ zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/tests/test_imessagecatalog.py	2008-07-16 13:35:48 UTC (rev 88401)
@@ -49,6 +49,12 @@
         self.assertEqual(catalog.queryMessage('foo'), None)
         self.assertEqual(catalog.queryMessage('foo', 'bar'), 'bar')
 
+    def testPluralMessage(self):
+        catalog = self._catalog
+        self.assertEqual(catalog.getMessage('There are %d files.', n=1),
+                         'There is one file.')
+        self.assertEqual(catalog.getMessage('There are %d files.', n=3),
+                         'There are 3 files.')
 
     def testGetLanguage(self):
         catalog = self._catalog

Modified: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/translationdomain.py
===================================================================
--- zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/translationdomain.py	2008-07-16 13:34:18 UTC (rev 88400)
+++ zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/translationdomain.py	2008-07-16 13:35:48 UTC (rev 88401)
@@ -127,6 +127,8 @@
                 # single catalog. More importantly, it is extremely helpful
                 # when testing and the test language is used, because it
                 # allows the test language to get the default. 
+                #if target_language == 'en':
+                    #import pdb;pdb.set_trace()
                 text = self._data[catalog_names[0]].queryMessage(
                     msgid, default)
             else:



More information about the Checkins mailing list