jenkins-bot has submitted this change and it was merged.

Change subject: (bug #56685) Parsing of localized quantities.
......................................................................


(bug #56685) Parsing of localized quantities.

This introduces MediaWikiNumberUnlocalizer which relies on
MediaWiki's Language class for converting numbers to canonical form.

IMPORTANT: requires I9acb56d4f7f4 to be merged. (done)

Change-Id: I996e8d032a476d245bbfc2872d7eae4bbad79cb1
---
M lib/WikibaseLib.classes.php
M lib/WikibaseLib.php
A lib/includes/parsers/MediaWikiNumberUnlocalizer.php
A lib/tests/phpunit/parsers/MediaWikiNumberUnlocalizerTest.php
4 files changed, 86 insertions(+), 0 deletions(-)

Approvals:
  Tobias Gritschacher: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/WikibaseLib.classes.php b/lib/WikibaseLib.classes.php
index 4bb20af..92aabbd 100644
--- a/lib/WikibaseLib.classes.php
+++ b/lib/WikibaseLib.classes.php
@@ -138,6 +138,7 @@
 
                // includes/parsers
                'Wikibase\Lib\EntityIdParser' => 
'includes/parsers/EntityIdParser.php',
+               'Wikibase\Lib\MediaWikiNumberUnlocalizer' => 
'includes/parsers/MediaWikiNumberUnlocalizer.php',
 
                // includes/specials
                'Wikibase\Lib\Specials\SpecialWikibasePage' => 
'includes/specials/SpecialWikibasePage.php',
diff --git a/lib/WikibaseLib.php b/lib/WikibaseLib.php
index 9e819b1..2315187 100644
--- a/lib/WikibaseLib.php
+++ b/lib/WikibaseLib.php
@@ -136,7 +136,15 @@
        // i18n
        $wgExtensionMessagesFiles['WikibaseLib'] = __DIR__ . 
'/WikibaseLib.i18n.php';
 
+       // This is somewhat hackish, make WikibaseValueParserBuilders, 
analogous to WikibaseValueFormatterBuilders
        $wgValueParsers['wikibase-entityid'] = 'Wikibase\Lib\EntityIdParser';
+       $wgValueParsers['quantity'] = function( ValueParsers\ParserOptions 
$options ) {
+               $unlocalizer = new Wikibase\Lib\MediaWikiNumberUnlocalizer();
+               return new \ValueParsers\QuantityParser(
+                       new \ValueParsers\DecimalParser( $options, $unlocalizer 
),
+                       $options );
+       };
+
        $wgDataValues['wikibase-entityid'] = 
'Wikibase\DataModel\Entity\EntityIdValue';
        $wgJobClasses['ChangeNotification'] = 'Wikibase\ChangeNotificationJob';
        $wgJobClasses['UpdateRepoOnMove'] = 'Wikibase\UpdateRepoOnMoveJob';
diff --git a/lib/includes/parsers/MediaWikiNumberUnlocalizer.php 
b/lib/includes/parsers/MediaWikiNumberUnlocalizer.php
new file mode 100644
index 0000000..b802bf3
--- /dev/null
+++ b/lib/includes/parsers/MediaWikiNumberUnlocalizer.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Wikibase\Lib;
+use Language;
+use ValueParsers\ParserOptions;
+use ValueParsers\Unlocalizer;
+
+/**
+ * MediaWikiNumberUnlocalizer
+ *
+ * @since 0.5
+ *
+ * @license GPL 2+
+ * @author Daniel Kinzler
+ */
+class MediaWikiNumberUnlocalizer implements Unlocalizer {
+
+       /**
+        * @see Unlocalizer::unlocalize()
+        *
+        * @param string $number string to process
+        * @param string $language language code
+        * @param ParserOptions $options
+        *
+        * @return string unlocalized string
+        */
+       public function unlocalize( $number, $language, ParserOptions $options 
) {
+               $language = Language::factory( $language );
+
+               $canonicalizedNumber = $language->parseFormattedNumber( $number 
);
+               return $canonicalizedNumber;
+       }
+}
diff --git a/lib/tests/phpunit/parsers/MediaWikiNumberUnlocalizerTest.php 
b/lib/tests/phpunit/parsers/MediaWikiNumberUnlocalizerTest.php
new file mode 100644
index 0000000..a20bcae
--- /dev/null
+++ b/lib/tests/phpunit/parsers/MediaWikiNumberUnlocalizerTest.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Wikibase\Lib\Test;
+
+use ValueParsers\ParserOptions;
+use Wikibase\Lib\MediaWikiNumberUnlocalizer;
+
+/**
+ * @covers Wikibase\Lib\MediaWikiNumberUnlocalizer
+ *
+ * @since 0.5
+ *
+ * @group ValueParsers
+ * @group WikibaseLib
+ * @group Wikibase
+ *
+ * @licence GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class MediaWikiNumberUnlocalizerTest extends \PHPUnit_Framework_TestCase {
+
+       public function provideUnlocalize() {
+               return array(
+                       array( '123,456.789', 'en', '123456.789' ),
+                       array( '123.456,789', 'de', '123456.789' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUnlocalize
+        *
+        * @param $localized
+        * @param $lang
+        * @param $expected
+        */
+       public function testUnlocalize( $localized, $lang, $expected ) {
+               $unlocalizer = new MediaWikiNumberUnlocalizer();
+               $options = new ParserOptions();
+
+               $actual = $unlocalizer->unlocalize( $localized, $lang, $options 
);
+
+               $this->assertEquals( $expected, $actual );
+       }
+}

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I996e8d032a476d245bbfc2872d7eae4bbad79cb1
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Henning Snater <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to