From: Santhosh Thottingal Date: Fri, 3 Jan 2014 08:16:19 +0000 (+0530) Subject: Update Russian(ru) plural rules to CLDR 24 X-Git-Tag: 1.31.0-rc.0~17406 X-Git-Url: http://git.cyclocoop.org/data/Luca_Pacioli_%28Gemaelde%29.jpeg?a=commitdiff_plain;h=f50d3eb61e493fdb95436de6622c980165e1b861;p=lhc%2Fweb%2Fwiklou.git Update Russian(ru) plural rules to CLDR 24 Russian (ru) plural rules have a major change. The 'few' form is merged with the 'other' form. The current forms are 'one', 'many', 'other'. In MW ru plural rules were overridden using convertPlural methdod in LanguagesRu.php with 3 forms. Effectively forms[1] and forms[2] are swapped. Followup: I9930b290d004667a3bb09e5c1663ec2c9c27d8a6 Bug: 56931 Change-Id: Ia5779e42315d3f41f52dce2bfffaee0a4297d23b --- diff --git a/languages/classes/LanguageRu.php b/languages/classes/LanguageRu.php index 243a8762ad..d3ac1d222c 100644 --- a/languages/classes/LanguageRu.php +++ b/languages/classes/LanguageRu.php @@ -44,8 +44,9 @@ class LanguageRu extends Language { return $wgGrammarForms['ru'][$case][$word]; } - # These rules are not perfect, but they are currently only used for Wikimedia site names so it doesn't - # matter if they are wrong sometimes. Just add a special case for your site name if necessary. + # These rules are not perfect, but they are currently only used for Wikimedia + # site names so it doesn't matter if they are wrong sometimes. + # Just add a special case for your site name if necessary. # substr doesn't support Unicode and mb_substr has issues, # so break it to characters using preg_match_all and then use array_slice and join @@ -102,62 +103,6 @@ class LanguageRu extends Language { return $word; } - /** - * Plural form transformations - * - * $forms[0] - singular form (for 1, 21, 31, 41...) - * $forms[1] - paucal form (for 2, 3, 4, 22, 23, 24, 32, 33, 34...) - * $forms[2] - plural form (for 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26...) - * - * Examples: - * message with number - * "Сделано $1 {{PLURAL:$1|изменение|изменения|изменений}}" - * ("$1 change[s] were made) - * message without number - * "Действие не может быть выполнено по {{PLURAL:$1|следующей причине|следующим причинам}}:" - * ("The action cannot be performed for the following reason[s]") - * @param $count int - * @param $forms array - * - * @return string - */ - function convertPlural( $count, $forms ) { - $forms = $this->handleExplicitPluralForms( $count, $forms ); - if ( is_string( $forms ) ) { - return $forms; - } - if ( !count( $forms ) ) { - return ''; - } - - // If the actual number is not mentioned in the expression, then just two forms are enough: - // singular for $count === 1 - // plural for $count !== 1 - // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." - if ( count( $forms ) === 2 ) { - return $count === 1 ? $forms[0] : $forms[1]; - } - - // @todo 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 && (int)floor( ( $count % 100 ) / 10 ) === 1 ) { - return $forms[2]; - } - - switch ( $count % 10 ) { - case 1: - return $forms[0]; - case 2: - case 3: - case 4: - return $forms[1]; - default: - return $forms[2]; - } - } - /** * Four-digit number should be without group commas (spaces) * See manual of style at http://ru.wikipedia.org/wiki/Википедия:Оформление_статей diff --git a/tests/phpunit/languages/LanguageRuTest.php b/tests/phpunit/languages/LanguageRuTest.php index ac18276634..e17c70857e 100644 --- a/tests/phpunit/languages/LanguageRuTest.php +++ b/tests/phpunit/languages/LanguageRuTest.php @@ -13,7 +13,7 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'many', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -22,9 +22,9 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testExplicitPlural() { - $forms = array( 'one', 'few', 'many', 'other', '12=dozen' ); + $forms = array( 'one','many', 'other', '12=dozen' ); $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) ); - $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' ); + $forms = array( 'one', 'many', '100=hundred', 'other', '12=dozen' ); $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) ); } @@ -33,8 +33,6 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::getPluralRuleType */ public function testGetPluralRuleType( $result, $value ) { - // TODO: Remove after MW plurals rules made in sync with CLDR - $this->markTestSkipped( 'Skipping. Russian plural forms are overridden in MW' ); $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) ); } @@ -44,10 +42,10 @@ class LanguageRuTest extends LanguageClassesTestCase { array( 'many', 11 ), array( 'one', 91 ), array( 'one', 121 ), - array( 'few', 2 ), - array( 'few', 3 ), - array( 'few', 4 ), - array( 'few', 334 ), + array( 'other', 2 ), + array( 'other', 3 ), + array( 'other', 4 ), + array( 'other', 334 ), array( 'many', 5 ), array( 'many', 15 ), array( 'many', 120 ), @@ -59,7 +57,7 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPluralTwoForms( $result, $value ) { - $forms = array( 'one', 'other' ); + $forms = array( '1=one', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); }