diff --git a/languages/Language.php b/languages/Language.php index c635ebbfd17..95bd31e34b1 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -3130,14 +3130,18 @@ class Language { * @param string $number * @return string */ - function parseFormattedNumber( $number ) { + public function parseFormattedNumber( $number ) { $s = $this->digitTransformTable(); if ( $s ) { + // eliminate empty array values such as ''. (bug 64347) + $s = array_filter( $s ); $number = strtr( $number, array_flip( $s ) ); } $s = $this->separatorTransformTable(); if ( $s ) { + // eliminate empty array values such as ''. (bug 64347) + $s = array_filter( $s ); $number = strtr( $number, array_flip( $s ) ); } diff --git a/tests/phpunit/languages/LanguageTest.php b/tests/phpunit/languages/LanguageTest.php index 5e6cba06bb5..a4ef06deacd 100644 --- a/tests/phpunit/languages/LanguageTest.php +++ b/tests/phpunit/languages/LanguageTest.php @@ -1484,6 +1484,29 @@ class LanguageTest extends LanguageClassesTestCase { ); } + /** + * @dataProvider parseFormattedNumberProvider + */ + public function testParseFormattedNumber( $langCode, $number ) { + $lang = Language::factory( $langCode ); + + $localisedNum = $lang->formatNum( $number ); + $normalisedNum = $lang->parseFormattedNumber( $localisedNum ); + + $this->assertEquals( $number, $normalisedNum ); + } + + public function parseFormattedNumberProvider() { + return array( + array( 'de', 377.01 ), + array( 'fa', 334 ), + array( 'fa', 382.772 ), + array( 'ar', 1844 ), + array( 'lzh', 3731 ), + array( 'zh-classical', 7432 ) + ); + } + /** * @covers Language::commafy() * @dataProvider provideCommafyData