Santhosh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/98768


Change subject: Handle explicit plural forms in custom convertPlural in 
language classes
......................................................................

Handle explicit plural forms in custom convertPlural in language classes

A new protected method looks for explicitly defined forms.
Every overriden language class is required to use this method
unless they don't want to use explicit plural forms.

Includes tests.

Bug: 46422

Redoing old patch I6dc759e3dfb05d6673209ba00da6592a384d5300

Change-Id: I2a9f93567087babb896999f1214d3c56afc67c96
---
M languages/Language.php
M languages/classes/LanguageBe_tarask.php
M languages/classes/LanguageGv.php
M languages/classes/LanguageHr.php
M languages/classes/LanguageKsh.php
M languages/classes/LanguageSr.php
M languages/classes/LanguageSr_ec.php
M languages/classes/LanguageSr_el.php
M languages/classes/LanguageUk.php
M tests/phpunit/languages/LanguageBe_taraskTest.php
M tests/phpunit/languages/LanguageUkTest.php
11 files changed, 76 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/68/98768/1

diff --git a/languages/Language.php b/languages/Language.php
index dc1fc7d..cb5e15d 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -3632,17 +3632,10 @@
         */
        function convertPlural( $count, $forms ) {
                // Handle explicit n=pluralform cases
-               foreach ( $forms as $index => $form ) {
-                       if ( preg_match( '/^\d+=/i', $form ) ) {
-                               $pos = strpos( $form, '=' );
-                               if ( substr( $form, 0, $pos ) === 
(string)$count ) {
-                                       return substr( $form, $pos + 1 );
-                               }
-                               unset( $forms[$index] );
-                       }
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
                }
-
-               $forms = array_values( $forms );
                if ( !count( $forms ) ) {
                        return '';
                }
@@ -3653,6 +3646,34 @@
        }
 
        /**
+        * Handles explicit plural forms for Language::convertPlural()
+        *
+        * In {{PLURAL:$1|0=nothing|one|many}}, 0=nothing will be returned if 
$1 equals zero.
+        * If an explicitly defined plural form matches the $count, then
+        * string value returned, otherwise array returned for further 
consideration
+        * by CLDR rules or overridden convertPlural()
+        *
+        * @since 1.22
+        *
+        * @param int $count non-localized number
+        * @param array $forms different plural forms
+        *
+        * @return array|string
+        */
+       protected function handleExplicitPluralForms( $count, array $forms ) {
+               foreach ( $forms as $index => $form ) {
+                       if ( preg_match( '/\d+=/i', $form ) ) {
+                               $pos = strpos( $form, '=' );
+                               if ( substr( $form, 0, $pos ) === (string) 
$count ) {
+                                       return substr( $form, $pos + 1 );
+                               }
+                               unset( $forms[$index] );
+                       }
+               }
+               return array_values( $forms );
+       }
+
+       /**
         * Checks that convertPlural was given an array and pads it to requested
         * amount of forms by copying the last one.
         *
diff --git a/languages/classes/LanguageBe_tarask.php 
b/languages/classes/LanguageBe_tarask.php
index 6497b50..d3e78fe 100644
--- a/languages/classes/LanguageBe_tarask.php
+++ b/languages/classes/LanguageBe_tarask.php
@@ -46,6 +46,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageGv.php b/languages/classes/LanguageGv.php
index ba8a53c..23a2916 100644
--- a/languages/classes/LanguageGv.php
+++ b/languages/classes/LanguageGv.php
@@ -35,6 +35,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageHr.php b/languages/classes/LanguageHr.php
index 910bc10..0c65ec7 100644
--- a/languages/classes/LanguageHr.php
+++ b/languages/classes/LanguageHr.php
@@ -34,6 +34,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageKsh.php 
b/languages/classes/LanguageKsh.php
index 09c5727..d25ce71 100644
--- a/languages/classes/LanguageKsh.php
+++ b/languages/classes/LanguageKsh.php
@@ -189,6 +189,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php
index 6f0ff4b..7310e8e 100644
--- a/languages/classes/LanguageSr.php
+++ b/languages/classes/LanguageSr.php
@@ -246,6 +246,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageSr_ec.php 
b/languages/classes/LanguageSr_ec.php
index cb9e819..4787856 100644
--- a/languages/classes/LanguageSr_ec.php
+++ b/languages/classes/LanguageSr_ec.php
@@ -34,6 +34,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageSr_el.php 
b/languages/classes/LanguageSr_el.php
index 99d1293..3f086df 100644
--- a/languages/classes/LanguageSr_el.php
+++ b/languages/classes/LanguageSr_el.php
@@ -34,6 +34,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php
index 4ad272b..aabe390 100644
--- a/languages/classes/LanguageUk.php
+++ b/languages/classes/LanguageUk.php
@@ -92,6 +92,10 @@
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
diff --git a/tests/phpunit/languages/LanguageBe_taraskTest.php 
b/tests/phpunit/languages/LanguageBe_taraskTest.php
index d5822f4..e073db5 100644
--- a/tests/phpunit/languages/LanguageBe_taraskTest.php
+++ b/tests/phpunit/languages/LanguageBe_taraskTest.php
@@ -79,12 +79,13 @@
         * @covers Language::convertPlural
         */
        public function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'other' );
+               $forms = array( 'one', 'other',  '0=one' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( 
$value, $forms ) );
        }
 
        public static function providePluralTwoForms() {
                return array(
+                       array( 'one', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
                        array( 'other', 91 ),
diff --git a/tests/phpunit/languages/LanguageUkTest.php 
b/tests/phpunit/languages/LanguageUkTest.php
index 0783fcf..1d81bc5 100644
--- a/tests/phpunit/languages/LanguageUkTest.php
+++ b/tests/phpunit/languages/LanguageUkTest.php
@@ -18,6 +18,17 @@
        }
 
        /**
+        * Test explicit plural forms - n=FormN forms
+        * @covers Language::convertPlural
+        */
+       public function testExplicitPlural() {
+               $forms = array( 'one', 'few', 'many', 'other', '12=dozen' );
+               $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 
12, $forms ) );
+               $forms = array( 'one', 'few', 'many', '100=hundred', 'other', 
'12=dozen' );
+               $this->assertEquals( 'hundred', 
$this->getLang()->convertPlural( 100, $forms ) );
+       }
+
+       /**
         * @dataProvider providePlural
         * @covers Language::getPluralRuleType
         */

-- 
To view, visit https://gerrit.wikimedia.org/r/98768
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2a9f93567087babb896999f1214d3c56afc67c96
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com>
Gerrit-Reviewer: Wizardist <p.selits...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to