Update plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental...
authorSiebrand Mazeland <siebrand@users.mediawiki.org>
Fri, 2 Oct 2009 18:30:23 +0000 (18:30 +0000)
committerSiebrand Mazeland <siebrand@users.mediawiki.org>
Fri, 2 Oct 2009 18:30:23 +0000 (18:30 +0000)
Added FIXME where CLDR definition is different from MediaWiki's.

16 files changed:
languages/classes/LanguageBe_tarask.php
languages/classes/LanguageBs.php
languages/classes/LanguageCy.php
languages/classes/LanguageGa.php
languages/classes/LanguageHr.php
languages/classes/LanguageLn.php [new file with mode: 0644]
languages/classes/LanguageLv.php
languages/classes/LanguageMk.php [new file with mode: 0644]
languages/classes/LanguageMo.php [new file with mode: 0644]
languages/classes/LanguageRo.php [new file with mode: 0644]
languages/classes/LanguageRu.php
languages/classes/LanguageSe.php [new file with mode: 0644]
languages/classes/LanguageSh.php [new file with mode: 0644]
languages/classes/LanguageSma.php [new file with mode: 0644]
languages/classes/LanguageSr.php
languages/classes/LanguageUk.php

index 358cb48..8c2a453 100644 (file)
@@ -25,6 +25,8 @@ class LanguageBe_tarask extends Language {
                //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
                if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
 
+               // FIXME: CLDR defines 4 plural forms instead of 3
+               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
index 24f6add..df522f8 100644 (file)
@@ -10,6 +10,8 @@ class LanguageBs extends Language {
                if ( !count($forms) ) { return ''; }
                $forms = $this->preConvertPlural( $forms, 3 );
 
+               // FIXME: CLDR defines 4 plural forms instead of 3. Plural for decimals is missing.
+               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
                        return $forms[2];
                } else {
index 486f7a7..9a39539 100644 (file)
@@ -8,6 +8,9 @@
 class LanguageCy extends Language {
        function convertPlural( $count, $forms ) {
                if ( !count($forms) ) { return ''; }
+
+               // FIXME: CLDR defines 4 plural forms; very different, actually.
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#cy
                $forms = $this->preConvertPlural( $forms, 6 );
                $count = abs( $count );
                if ( $count >= 0 && $count <= 3 ) {
index 2fdeed0..0ac7a40 100644 (file)
@@ -34,4 +34,20 @@ class LanguageGa extends Language {
                }
                return $word;
        }
+
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ga
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       $index = 1;
+               } elseif( $count == 2 ) {
+                       $index = 2;
+               } else {
+                       $index = 3;
+               }
+               return $forms[$index];
+       }
 }
index 5fe6b3a..d8e8487 100644 (file)
@@ -8,6 +8,8 @@ class LanguageHr extends Language {
 
        function convertPlural( $count, $forms ) {
                if ( !count($forms) ) { return ''; }
+               // FIXME: CLDR defines 4 plural forms instead of 3. Plural for for decimals is missing.
+               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageLn.php b/languages/classes/LanguageLn.php
new file mode 100644 (file)
index 0000000..bcf5f6e
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageLn extends Language {
+       /**
+        * Use singular form for zero
+        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ln
+
+        */
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               return ($count <= 1) ? $forms[0] : $forms[1];
+       }
+}
index 2c8d9f3..84974c3 100644 (file)
@@ -23,6 +23,9 @@ class LanguageLv extends Language {
         */
        function convertPlural( $count, $forms ) {
                if ( !count($forms) ) { return ''; }
+
+               // FIXME: CLDR defines 3 plural forms instead of 2.  Form for 0 is missing.
+               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#lv
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $forms[0] : $forms[1];
diff --git a/languages/classes/LanguageMk.php b/languages/classes/LanguageMk.php
new file mode 100644 (file)
index 0000000..638393b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageMk extends Language {
+       /**
+        * Plural forms per
+        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mk
+        */
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+               $forms = $this->preConvertPlural( $forms, 2 );
+
+               if ($count > 10 && floor( ($count % 100 ) / 10 ) == 1 ) {
+                       return $forms[1];
+               } else {
+                       return $forms[0];
+               }
+       }
+}
diff --git a/languages/classes/LanguageMo.php b/languages/classes/LanguageMo.php
new file mode 100644 (file)
index 0000000..83cfafb
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageMo extends Language {
+       function convertPlural( $count, $forms ) {
+               // Plural rules per
+               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mo
+               if ( !count($forms) ) { return ''; }
+
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       $index = 0;
+               } elseif ( $count == 0 || $count % 100 < 20 ) {
+                       $index = 1;
+               } else {
+                       $index = 2;
+               }
+               return $forms[$index];
+       }
+}
diff --git a/languages/classes/LanguageRo.php b/languages/classes/LanguageRo.php
new file mode 100644 (file)
index 0000000..928f79f
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageRo extends Language {
+       function convertPlural( $count, $forms ) {
+               // Plural rules per
+               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ro
+               if ( !count($forms) ) { return ''; }
+
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       $index = 0;
+               } elseif ( $count == 0 || $count % 100 < 20 ) {
+                       $index = 1;
+               } else {
+                       $index = 2;
+               }
+               return $forms[$index];
+       }
+}
index 5933b47..bb737e8 100644 (file)
@@ -76,6 +76,8 @@ class LanguageRu extends Language {
                //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
                if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
 
+               // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ($count > 10 && floor(($count % 100) / 10) == 1) {
diff --git a/languages/classes/LanguageSe.php b/languages/classes/LanguageSe.php
new file mode 100644 (file)
index 0000000..d34df40
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSe extends Language {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#se
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       $index = 1;
+               } elseif( $count == 2 ) {
+                       $index = 2;
+               } else {
+                       $index = 3;
+               }
+               return $forms[$index];
+       }
+}
diff --git a/languages/classes/LanguageSh.php b/languages/classes/LanguageSh.php
new file mode 100644 (file)
index 0000000..29f06f4
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSh extends Language {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
+               if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+
+               // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sh
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ($count > 10 && floor(($count % 100) / 10) == 1) {
+                       return $forms[2];
+               } else {
+                       switch ($count % 10) {
+                               case 1:  return $forms[0];
+                               case 2:
+                               case 3:
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
+                       }
+               }
+       }
+}
diff --git a/languages/classes/LanguageSma.php b/languages/classes/LanguageSma.php
new file mode 100644 (file)
index 0000000..5167fb0
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @ingroup Language
+ */
+class LanguageSma extends Language {
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sma
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ( $count == 1 ) {
+                       $index = 1;
+               } elseif( $count == 2 ) {
+                       $index = 2;
+               } else {
+                       $index = 3;
+               }
+               return $forms[$index];
+       }
+}
index 79a2ec2..48a4cb7 100644 (file)
@@ -183,4 +183,27 @@ class LanguageSr extends LanguageSr_ec {
                $this->mConverter = new SrConverter($this, 'sr', $variants, $variantfallbacks, $marker, $flags);
                $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
        }
+
+       function convertPlural( $count, $forms ) {
+               if ( !count($forms) ) { return ''; }
+
+               //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
+               if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+
+               // FIXME: CLDR defines 4 plural forms. Form with decimals missing.
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru
+               $forms = $this->preConvertPlural( $forms, 3 );
+
+               if ($count > 10 && floor(($count % 100) / 10) == 1) {
+                       return $forms[2];
+               } else {
+                       switch ($count % 10) {
+                               case 1:  return $forms[0];
+                               case 2:
+                               case 3:
+                               case 4:  return $forms[1];
+                               default: return $forms[2];
+                       }
+               }
+       }
 }
index dbebb13..4b1dfde 100644 (file)
@@ -62,6 +62,8 @@ class LanguageUk extends Language {
                //if no number with word, then use $form[0] for singular and $form[1] for plural or zero
                if( count($forms) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
 
+               // FIXME: CLDR defines 4 plural forms. Form for decimals is missing/
+               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#uk
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ($count > 10 && floor(($count % 100) / 10) == 1) {