diff -ruN Django-1.0.2-final.orig/django/conf/global_settings.py Django-1.0.2-final/django/conf/global_settings.py
--- Django-1.0.2-final.orig/django/conf/global_settings.py	2008-12-02 17:44:49.070515266 -0500
+++ Django-1.0.2-final/django/conf/global_settings.py	2009-05-20 14:49:09.916101050 -0400
@@ -97,6 +97,53 @@
 # Languages using BiDi (right-to-left) layout
 LANGUAGES_BIDI = ("he", "ar", "fa")
 
+# Languages plural forms
+# From http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms
+LANGUAGES_PLURAL = {
+    # Only one form
+    'ja': 'nplurals=1; plural=0;',
+    'ko': 'nplurals=1; plural=0;',
+    # Two forms, singular used for one only
+    'da': 'nplurals=2; plural=n != 1;',
+    'de': 'nplurals=2; plural=n != 1;',
+    'en': 'nplurals=2; plural=n != 1;',
+    'es': 'nplurals=2; plural=n != 1;',
+    'es-ar': 'nplurals=2; plural=n != 1;',
+    'et': 'nplurals=2; plural=n != 1;',
+    'fi': 'nplurals=2; plural=n != 1;',
+    'gr': 'nplurals=2; plural=n != 1;',
+    'he': 'nplurals=2; plural=n != 1;',
+    'hu': 'nplurals=2; plural=n != 1;',
+    'it': 'nplurals=2; plural=n != 1;',
+    'nl': 'nplurals=2; plural=n != 1;',
+    'no': 'nplurals=2; plural=n != 1;',
+    'pt': 'nplurals=2; plural=n != 1;',
+    'sv': 'nplurals=2; plural=n != 1;',
+    # Two forms, singular used for zero and one
+    'fr': 'nplurals=2; plural=n>1;',
+    'pt-br': 'nplurals=2; plural=n>1;',
+    # Three forms, special case for zero
+    'lv': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;',
+    # Three forms, special cases for one and two
+    'ga': 'nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;',
+    # Three forms, special case for numbers ending in 00 or [2-9][0-9]
+    'ro': 'nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;',
+    # Three forms, special case for numbers ending in 1[2-9]
+    'lt': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    # Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]
+    'hr': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    'ru': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    'sr': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    'uk': 'nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    # Three forms, special cases for 1 and 2, 3, 4
+    'cs': 'nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;',
+    'sk': 'nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;',
+    # Three forms, special case for one and some numbers ending in 2, 3, or 4
+    'pl': 'nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;',
+    # Four forms, special case for one and all numbers ending in 02, 03, or 04
+    'sl': 'nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;',
+}
+
 # If you set this to False, Django will make some optimizations so as not
 # to load the internationalization machinery.
 USE_I18N = True
diff -ruN Django-1.0.2-final.orig/django/utils/translation/trans_real.py Django-1.0.2-final/django/utils/translation/trans_real.py
--- Django-1.0.2-final.orig/django/utils/translation/trans_real.py	2008-12-02 17:44:49.246570326 -0500
+++ Django-1.0.2-final/django/utils/translation/trans_real.py	2009-05-20 14:46:58.660826998 -0400
@@ -76,6 +76,11 @@
     def set_language(self, language):
         self.__language = language
 
+    def set_plural(self, plural_expression):
+        v = plural_expression.split(';')
+        plural = v[1].split('plural=')[1]
+        self.plural = gettext_module.c2py(plural)
+
     def language(self):
         return self.__language
 
@@ -144,6 +149,8 @@
             try:
                 t = gettext_module.translation('django', path, [loc], klass)
                 t.set_language(lang)
+                if lang in settings.LANGUAGES_PLURAL:
+                    t.set_plural(settings.LANGUAGES_PLURAL[lang])
                 return t
             except IOError, e:
                 return None
