Liangent has uploaded a new change for review.
https://gerrit.wikimedia.org/r/71072
Change subject: Enable variant level fallback for {{#property: }}
......................................................................
Enable variant level fallback for {{#property: }}
Change-Id: I181b88fec971c066b9dde7145a85467faafaa02d
---
M client/includes/parserhooks/PropertyParserFunction.php
M lib/includes/SnakFormatter.php
M lib/includes/TypedValueFormatter.php
M lib/includes/formatters/EntityIdLabelFormatter.php
4 files changed, 30 insertions(+), 14 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/72/71072/1
diff --git a/client/includes/parserhooks/PropertyParserFunction.php
b/client/includes/parserhooks/PropertyParserFunction.php
index 4d09ab9..434e7e3 100644
--- a/client/includes/parserhooks/PropertyParserFunction.php
+++ b/client/includes/parserhooks/PropertyParserFunction.php
@@ -114,7 +114,11 @@
* @return string - wikitext format
*/
private function formatSnakList( $snaks ) {
- $formattedValues = $this->snaksFormatter->formatSnaks( $snaks,
$this->language->getCode() );
+ $formattedValues = $this->snaksFormatter->formatSnaks( $snaks,
+ Utils::getLanguageFallbackChain( $this->language,
+ Utils::LANGUAGE_FALLBACK_SELF |
Utils::LANGUAGE_FALLBACK_VARIANTS
+ )
+ );
return $this->language->commaList( $formattedValues );
}
diff --git a/lib/includes/SnakFormatter.php b/lib/includes/SnakFormatter.php
index 4ebe82b..0982fa5 100644
--- a/lib/includes/SnakFormatter.php
+++ b/lib/includes/SnakFormatter.php
@@ -67,34 +67,34 @@
* @since 0.4
*
* @param Snak[] $snaks
- * @param string $languageCode
+ * @param array $languages
*
* @return string[]
*/
- public function formatSnaks( array $snaks, $languageCode ) {
+ public function formatSnaks( array $snaks, $languages ) {
$formattedValues = array();
foreach ( $snaks as $snak ) {
- $formattedValues[] = $this->formatSnak( $snak,
$languageCode );
+ $formattedValues[] = $this->formatSnak( $snak,
$languages );
}
return $formattedValues;
}
- private function formatSnak( Snak $snak, $languageCode ) {
+ private function formatSnak( Snak $snak, $languages ) {
if ( $snak instanceof PropertyValueSnak ) {
- return $this->formatPropertyValueSnak( $snak,
$languageCode );
+ return $this->formatPropertyValueSnak( $snak,
$languages );
}
// TODO: we might want to allow customization here (this
happens for NoValue and SomeValue snaks)
return '';
}
- private function formatPropertyValueSnak( PropertyValueSnak $snak,
$languageCode ) {
+ private function formatPropertyValueSnak( PropertyValueSnak $snak,
$languages ) {
$dataValue = $snak->getDataValue();
$dataTypeId = $this->getDataTypeForProperty(
$snak->getPropertyId() );
- return $this->typedValueFormatter->formatToString( $dataValue,
$dataTypeId, $languageCode );
+ return $this->typedValueFormatter->formatToString( $dataValue,
$dataTypeId, $languages );
}
private function getDataTypeForProperty( EntityId $propertyId ) {
diff --git a/lib/includes/TypedValueFormatter.php
b/lib/includes/TypedValueFormatter.php
index 06ce802..cf05788 100644
--- a/lib/includes/TypedValueFormatter.php
+++ b/lib/includes/TypedValueFormatter.php
@@ -38,7 +38,7 @@
*/
class TypedValueFormatter {
- public function formatToString( DataValue $dataValue, DataType
$dataType, $languageCode ) {
+ public function formatToString( DataValue $dataValue, DataType
$dataType, $languages ) {
// TODO: update this code to obtain the string formatter as
soon as corresponding changes
// in the DataTypes library have been made.
@@ -48,7 +48,7 @@
// FIXME: before we can properly use the DataType system some
issues to its implementation need
// to be solved. Once this is done, this evil if block and
function it calls should go.
if ( $valueFormatter === false && $dataType->getId() ===
'wikibase-item' ) {
- $valueFormatter = $this->evilGetEntityIdFormatter(
$languageCode );
+ $valueFormatter = $this->evilGetEntityIdFormatter(
$languages );
}
if ( $valueFormatter === false ) {
@@ -69,7 +69,7 @@
return $valueFormatter->format( $dataValue );
}
- private function evilGetEntityIdFormatter( $languageCode ) {
+ private function evilGetEntityIdFormatter( $languages ) {
$entityLookup = new CachingEntityLoader( new
WikiPageEntityLookup( Settings::get( 'repoDatabase' ) ) );
$prefixMap = array();
@@ -85,7 +85,7 @@
$idFormatter = new EntityIdFormatter( $options );
$options = new FormatterOptions();
- $options->setOption( EntityIdLabelFormatter::OPT_LANG,
$languageCode );
+ $options->setOption( EntityIdLabelFormatter::OPT_LANG,
$languages );
$labelFormatter = new EntityIdLabelFormatter( $options,
$entityLookup );
$labelFormatter->setIdFormatter( $idFormatter );
diff --git a/lib/includes/formatters/EntityIdLabelFormatter.php
b/lib/includes/formatters/EntityIdLabelFormatter.php
index f744c64..e3c93d1 100644
--- a/lib/includes/formatters/EntityIdLabelFormatter.php
+++ b/lib/includes/formatters/EntityIdLabelFormatter.php
@@ -146,12 +146,24 @@
return false;
}
- $languageCode = $this->getOption( self::OPT_LANG );
+ $languages = $this->getOption( self::OPT_LANG );
+
+ // back-compat for usages where $languages is a string
+ if ( is_string( $languages ) ) {
+ $languages = array( LanguageWrapper::factory(
Language::factory( $languages ) ) );
+ }
/**
* @var Entity $entity
*/
- return $entity->getLabel( $languageCode );
+ foreach ( $languages as $language ) {
+ $label = $entity->getLabel(
$language->getFetchLanguage()->getCode() );
+ if ( $label !== false ) {
+ return $language->translate( $label );
+ }
+ }
+
+ return false;
}
}
--
To view, visit https://gerrit.wikimedia.org/r/71072
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I181b88fec971c066b9dde7145a85467faafaa02d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Liangent <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits