From 62546832ccbda24d94a82486ba1fe744cad35301 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 2 Oct 2009 18:30:23 +0000 Subject: [PATCH] Update plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html. Complete per Date: 2009/05/12 11:24:52 for languages currently supported in MediaWiki. Added FIXME where CLDR definition is different from MediaWiki's. --- languages/classes/LanguageBe_tarask.php | 2 ++ languages/classes/LanguageBs.php | 2 ++ languages/classes/LanguageCy.php | 3 +++ languages/classes/LanguageGa.php | 16 ++++++++++++++ languages/classes/LanguageHr.php | 2 ++ languages/classes/LanguageLn.php | 18 +++++++++++++++ languages/classes/LanguageLv.php | 3 +++ languages/classes/LanguageMk.php | 21 ++++++++++++++++++ languages/classes/LanguageMo.php | 23 ++++++++++++++++++++ languages/classes/LanguageRo.php | 23 ++++++++++++++++++++ languages/classes/LanguageRu.php | 2 ++ languages/classes/LanguageSe.php | 22 +++++++++++++++++++ languages/classes/LanguageSh.php | 29 +++++++++++++++++++++++++ languages/classes/LanguageSma.php | 22 +++++++++++++++++++ languages/classes/LanguageSr.php | 23 ++++++++++++++++++++ languages/classes/LanguageUk.php | 2 ++ 16 files changed, 213 insertions(+) create mode 100644 languages/classes/LanguageLn.php create mode 100644 languages/classes/LanguageMk.php create mode 100644 languages/classes/LanguageMo.php create mode 100644 languages/classes/LanguageRo.php create mode 100644 languages/classes/LanguageSe.php create mode 100644 languages/classes/LanguageSh.php create mode 100644 languages/classes/LanguageSma.php diff --git a/languages/classes/LanguageBe_tarask.php b/languages/classes/LanguageBe_tarask.php index 358cb48602..8c2a453c47 100644 --- a/languages/classes/LanguageBe_tarask.php +++ b/languages/classes/LanguageBe_tarask.php @@ -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) { diff --git a/languages/classes/LanguageBs.php b/languages/classes/LanguageBs.php index 24f6adde1c..df522f8335 100644 --- a/languages/classes/LanguageBs.php +++ b/languages/classes/LanguageBs.php @@ -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 { diff --git a/languages/classes/LanguageCy.php b/languages/classes/LanguageCy.php index 486f7a7ceb..9a39539333 100644 --- a/languages/classes/LanguageCy.php +++ b/languages/classes/LanguageCy.php @@ -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 ) { diff --git a/languages/classes/LanguageGa.php b/languages/classes/LanguageGa.php index 2fdeed0456..0ac7a408d1 100644 --- a/languages/classes/LanguageGa.php +++ b/languages/classes/LanguageGa.php @@ -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]; + } } diff --git a/languages/classes/LanguageHr.php b/languages/classes/LanguageHr.php index 5fe6b3a729..d8e84876af 100644 --- a/languages/classes/LanguageHr.php +++ b/languages/classes/LanguageHr.php @@ -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 index 0000000000..bcf5f6e334 --- /dev/null +++ b/languages/classes/LanguageLn.php @@ -0,0 +1,18 @@ +preConvertPlural( $forms, 2 ); + + return ($count <= 1) ? $forms[0] : $forms[1]; + } +} diff --git a/languages/classes/LanguageLv.php b/languages/classes/LanguageLv.php index 2c8d9f316f..84974c37e6 100644 --- a/languages/classes/LanguageLv.php +++ b/languages/classes/LanguageLv.php @@ -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 index 0000000000..638393b374 --- /dev/null +++ b/languages/classes/LanguageMk.php @@ -0,0 +1,21 @@ +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 index 0000000000..83cfafb8e2 --- /dev/null +++ b/languages/classes/LanguageMo.php @@ -0,0 +1,23 @@ +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 index 0000000000..928f79fb50 --- /dev/null +++ b/languages/classes/LanguageRo.php @@ -0,0 +1,23 @@ +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/LanguageRu.php b/languages/classes/LanguageRu.php index 5933b47aeb..bb737e8401 100644 --- a/languages/classes/LanguageRu.php +++ b/languages/classes/LanguageRu.php @@ -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 index 0000000000..d34df403f3 --- /dev/null +++ b/languages/classes/LanguageSe.php @@ -0,0 +1,22 @@ +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 index 0000000000..29f06f4fde --- /dev/null +++ b/languages/classes/LanguageSh.php @@ -0,0 +1,29 @@ +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 index 0000000000..5167fb08e9 --- /dev/null +++ b/languages/classes/LanguageSma.php @@ -0,0 +1,22 @@ +preConvertPlural( $forms, 3 ); + + if ( $count == 1 ) { + $index = 1; + } elseif( $count == 2 ) { + $index = 2; + } else { + $index = 3; + } + return $forms[$index]; + } +} diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php index 79a2ec2521..48a4cb70ca 100644 --- a/languages/classes/LanguageSr.php +++ b/languages/classes/LanguageSr.php @@ -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]; + } + } + } } diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php index dbebb1342e..4b1dfde537 100644 --- a/languages/classes/LanguageUk.php +++ b/languages/classes/LanguageUk.php @@ -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) { -- 2.20.1