jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/348048 )
Change subject: Consider languages being it's own parent in
LanguageFallbackChainFactory
......................................................................
Consider languages being it's own parent in LanguageFallbackChainFactory
As far as I can tell this change is not that relevant in production because
we are currently exclusively using the …::FALLBACK_ALL mode in production.
But I feel this makes the code more clean and behave more like you would
expect: if you don't ask for a self-reference, you should not get one, even
if it is in core's variants list for some reason.
Bug: T156280
Change-Id: I1d9691c784032669979f8109c9a5f65cbf4122c9
---
M lib/includes/LanguageFallbackChainFactory.php
M lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
2 files changed, 28 insertions(+), 12 deletions(-)
Approvals:
Smalyshev: Looks good to me, but someone else must approve
C. Scott Ananian: Looks good to me, but someone else must approve
Ladsgroup: Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/includes/LanguageFallbackChainFactory.php
b/lib/includes/LanguageFallbackChainFactory.php
index 0c4cda0..7d12a73 100644
--- a/lib/includes/LanguageFallbackChainFactory.php
+++ b/lib/includes/LanguageFallbackChainFactory.php
@@ -99,7 +99,7 @@
* @param Language|string $language Language object or language code as
string
* @param int $mode Bitfield of self::FALLBACK_*
* @param LanguageFallbackChain[] $chain for recursive calls
- * @param array $fetched for recursive calls
+ * @param bool[] $fetched for recursive calls
*
* @throws InvalidArgumentException
* @return LanguageWithConversion[]
@@ -123,16 +123,16 @@
}
if ( $mode & self::FALLBACK_VARIANTS ) {
- /** @var Language $parentLanguage */
- $pieces = explode( '-', $languageCode );
- if ( !in_array( $pieces[0],
LanguageConverter::$languagesWithVariants ) ) {
- $parentLanguage = null;
- } else {
+ $parentLanguage = null;
+ $pieces = explode( '-', $languageCode, 2 );
+
+ if ( in_array( $pieces[0],
LanguageConverter::$languagesWithVariants ) ) {
if ( is_string( $language ) ) {
$language = Language::factory(
$language );
}
$parentLanguage =
$language->getParentLanguage();
}
+
if ( $parentLanguage ) {
// It's less likely to trigger conversion
mistakes by converting
// zh-tw to zh-hk first instead of converting
zh-cn to zh-tw.
@@ -147,12 +147,14 @@
}
foreach ( $variants as $variant ) {
- if ( isset( $fetched[$variant] ) ||
!$parentLanguage->hasVariant( $variant ) ) {
- continue;
+ if ( !isset( $fetched[$variant] )
+ // The self::FALLBACK_SELF mode
is already responsible for self-references.
+ && $variant !== $languageCode
+ && $parentLanguage->hasVariant(
$variant )
+ ) {
+ $chain[] =
LanguageWithConversion::factory( $language, $variant );
+ $fetched[$variant] = true;
}
-
- $chain[] =
LanguageWithConversion::factory( $language, $variant );
- $fetched[$variant] = true;
}
}
}
diff --git a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
index e4c871e..b5e0903 100644
--- a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
@@ -218,7 +218,21 @@
[ 'zh', 'zh-sg' ],
[ 'zh', 'zh-mo' ],
[ 'zh', 'zh-my' ],
- [ 'zh', 'zh' ],
+ ]
+ ],
+ [
+ 'languageCode' => 'zh',
+ 'mode' =>
LanguageFallbackChainFactory::FALLBACK_SELF |
LanguageFallbackChainFactory::FALLBACK_VARIANTS,
+ 'expected' => [
+ 'zh', // This should be the only
difference to the test case above
+ [ 'zh', 'zh-hans' ],
+ [ 'zh', 'zh-hant' ],
+ [ 'zh', 'zh-cn' ],
+ [ 'zh', 'zh-tw' ],
+ [ 'zh', 'zh-hk' ],
+ [ 'zh', 'zh-sg' ],
+ [ 'zh', 'zh-mo' ],
+ [ 'zh', 'zh-my' ],
]
],
[
--
To view, visit https://gerrit.wikimedia.org/r/348048
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I1d9691c784032669979f8109c9a5f65cbf4122c9
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: C. Scott Ananian <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Liangent <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits