Aude has uploaded a new change for review.
https://gerrit.wikimedia.org/r/180142
Change subject: Language fallback for labels of referenced items.
......................................................................
Language fallback for labels of referenced items.
Change-Id: I3973b059ec9ea03cd3cbcdd672ee1a0c8432d262
---
M lib/includes/LanguageFallbackChain.php
M lib/tests/phpunit/LanguageFallbackChainTest.php
M repo/includes/EntityParserOutputGenerator.php
M repo/includes/EntityParserOutputGeneratorFactory.php
4 files changed, 47 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/42/180142/1
diff --git a/lib/includes/LanguageFallbackChain.php
b/lib/includes/LanguageFallbackChain.php
index 4bd2f7d..1736535 100644
--- a/lib/includes/LanguageFallbackChain.php
+++ b/lib/includes/LanguageFallbackChain.php
@@ -39,6 +39,23 @@
}
/**
+ * Return language codes to use when fetching entries from the database.
+ *
+ * @see LanguageWithConversion::getFetchLanguageCode
+ *
+ * @return string[]
+ */
+ public function getFetchLanguageCodes() {
+ $codes = array();
+
+ foreach ( $this->chain as $language ) {
+ $codes[] = $language->getFetchLanguageCode();
+ }
+
+ return $codes;
+ }
+
+ /**
* Try to fetch the best value in a multilingual data array.
*
* @param string[]|array[] $data Multilingual data with language codes
as keys
diff --git a/lib/tests/phpunit/LanguageFallbackChainTest.php
b/lib/tests/phpunit/LanguageFallbackChainTest.php
index e1294d5..ed845eb 100644
--- a/lib/tests/phpunit/LanguageFallbackChainTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainTest.php
@@ -3,7 +3,9 @@
namespace Wikibase\Test;
use Language;
+use Wikibase\LanguageFallbackChain;
use Wikibase\LanguageFallbackChainFactory;
+use Wikibase\LanguageWithConversion;
/**
* @covers Wikibase\LanguageFallbackChain
@@ -198,4 +200,28 @@
);
}
+ public function provideFetchLanguageCodes() {
+ return array(
+ 'empty' => array( array() ),
+ 'de-ch' => array( array( 'de-ch', 'de', 'en' ) ),
+ 'zh' => array( array( 'zh-hans', 'zh-hant', 'zh-cn',
'zh-tw', 'zh-hk', 'zh-sg', 'zh-mo', 'zh-my', 'en' ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideFetchLanguageCodes
+ */
+ public function testGetFetchLanguageCodes( array $languages ) {
+ $languagesWithConversion = array();
+
+ foreach ( $languages as $language ) {
+ $languagesWithConversion[] =
LanguageWithConversion::factory( $language );
+ }
+
+ $chain = new LanguageFallbackChain( $languagesWithConversion );
+
+ $codes = $chain->getFetchLanguageCodes();
+ $this->assertEquals( $languages, $codes );
+ }
+
}
diff --git a/repo/includes/EntityParserOutputGenerator.php
b/repo/includes/EntityParserOutputGenerator.php
index 856bde2..d3db80b 100644
--- a/repo/includes/EntityParserOutputGenerator.php
+++ b/repo/includes/EntityParserOutputGenerator.php
@@ -9,7 +9,6 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\Entity;
use Wikibase\DataModel\Entity\Item;
-use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\SiteLinkList;
use Wikibase\DataModel\StatementListProvider;
use Wikibase\Lib\Store\EntityInfoBuilderFactory;
@@ -225,10 +224,9 @@
$entityInfoBuilder->resolveRedirects();
$entityInfoBuilder->removeMissing();
- // @todo: apply language fallback!
$entityInfoBuilder->collectTerms(
array( 'label', 'description' ),
- array( $this->languageCode )
+ $this->languageFallbackChain->getFetchLanguageCodes()
);
$entityInfoBuilder->collectDataTypes();
diff --git a/repo/includes/EntityParserOutputGeneratorFactory.php
b/repo/includes/EntityParserOutputGeneratorFactory.php
index 025d410..1a69a6b 100644
--- a/repo/includes/EntityParserOutputGeneratorFactory.php
+++ b/repo/includes/EntityParserOutputGeneratorFactory.php
@@ -132,11 +132,9 @@
* @return LanguageFallbackChain
*/
private function getLanguageFallbackChain( $languageCode ) {
- // @fixme inject User
- $context = RequestContext::getMain();
-
- return
$this->languageFallbackChainFactory->newFromUserAndLanguageCodeForPageView(
- $context->getUser(),
+ // Language fallback must depend ONLY on the target language,
+ // so we don't confuse the parser cache with user specific HTML.
+ return $this->languageFallbackChainFactory->newFromLanguageCode(
$languageCode
);
}
--
To view, visit https://gerrit.wikimedia.org/r/180142
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3973b059ec9ea03cd3cbcdd672ee1a0c8432d262
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: wmf/1.25wmf12c
Gerrit-Owner: Aude <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits