Bmansurov has uploaded a new change for review.
https://gerrit.wikimedia.org/r/270882
Change subject: Structured language overlay: prioritize available general
language ...
......................................................................
Structured language overlay: prioritize available general language ...
... if user's specific client side variant isn't available. For example,
if the device language is 'es-lx' and the article is not avialable in this
variant, but available in 'es', then add 'es' to the list of preferred
languages.
Bug: T126868
Change-Id: I18164925563ab88367f738dae4c97af0bffc468f
---
M resources/mobile.languages.structured/util.js
M tests/qunit/mobile.languages.structured/test_util.js
2 files changed, 43 insertions(+), 7 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend
refs/changes/82/270882/1
diff --git a/resources/mobile.languages.structured/util.js
b/resources/mobile.languages.structured/util.js
index 23e5eb4..341e87e 100644
--- a/resources/mobile.languages.structured/util.js
+++ b/resources/mobile.languages.structured/util.js
@@ -26,16 +26,37 @@
* @return {Object[]}
*/
util.getStructuredLanguages = function ( languages,
frequentlyUsedLanguages, deviceLanguage ) {
- var index, lang, variant, allLanguages,
+ var index, lang, variant, allLanguages, parent,
deviceLanguagesWithVariants = {},
parentsMap = {},
variantsMap = {},
preferredLanguages = [],
preferredLanguagesMap = {};
// User's device language will be included to the frequently
used languages
- // map and gets the top priority
+ // map and gets the top priority. If the device language is a
variant
+ // and the article is not available in that variant, but it's
available in
+ // the parent language, then add the parent language to the
list of
+ // frequently used languages.
if ( deviceLanguage ) {
- frequentlyUsedLanguages[ deviceLanguage ] = 101;
+ // Are we dealing with a variant?
+ index = deviceLanguage.indexOf( '-' );
+ if ( index !== -1 ) {
+ parent = deviceLanguage.slice( 0, index );
+ }
+
+ $.each( languages, function ( i, language ) {
+ if ( language.lang === parent || language.lang
=== deviceLanguage ) {
+ deviceLanguagesWithVariants[
language.lang ] = true;
+ }
+ } );
+
+ // Is the device language one of the available
languages?
+ if ( deviceLanguagesWithVariants.hasOwnProperty(
deviceLanguage ) ) {
+ frequentlyUsedLanguages[ deviceLanguage ] = 101;
+ // Is the parent language one of the available
languages?
+ } else if ( parent &&
deviceLanguagesWithVariants.hasOwnProperty( parent ) ) {
+ frequentlyUsedLanguages[ parent ] = 101;
+ }
}
// Separate languages into preferred, parent, and variants.
Parent
diff --git a/tests/qunit/mobile.languages.structured/test_util.js
b/tests/qunit/mobile.languages.structured/test_util.js
index bf38d93..9ff8bbe 100644
--- a/tests/qunit/mobile.languages.structured/test_util.js
+++ b/tests/qunit/mobile.languages.structured/test_util.js
@@ -24,6 +24,11 @@
title: 'Барак Абама',
langname: 'беларуская (тарашкевіца)'
}, {
+ lang: 'en',
+ url:
'https://en.wikipedia.org/wiki/Barack_Obama',
+ title: 'Barack Obama',
+ langname: 'English'
+ }, {
lang: 'ko',
url:
'https://ko.wikipedia.org/wiki/%EB%B2%84%EB%9D%BD_%EC%98%A4%EB%B0%94%EB%A7%88',
title: '버락 오바마',
@@ -61,12 +66,11 @@
}
];
- this.deviceLanguage = 'en-us';
+ this.deviceLanguage = 'es';
this.frequentlyUsedLanguages = {
'zh-min-nan': 1,
zh: 2,
- en: 10,
ko: 1
};
@@ -113,6 +117,11 @@
hasVariants: true,
variantsHeader: 'беларуская'
}, {
+ lang: 'en',
+ url:
'https://en.wikipedia.org/wiki/Barack_Obama',
+ title: 'Barack Obama',
+ langname: 'English'
+ }, {
lang: 'ru',
url:
'https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%B0%D0%BC%D0%B0,_%D0%91%D0%B0%D1%80%D0%B0%D0%BA',
title: 'Обама, Барак',
@@ -143,14 +152,13 @@
}
} );
- QUnit.test( 'test utility functions', 3, function ( assert ) {
+ QUnit.test( 'test utility functions', 4, function ( assert ) {
assert.deepEqual( util.getFrequentlyUsedLanguages(),
this.frequentlyUsedLanguages, 'Frequently used languages is correct.' );
util.saveLanguageUsageCount( 'ko',
util.getFrequentlyUsedLanguages() );
assert.ok( this.saveSpy.calledWith( {
'zh-min-nan': 1,
zh: 2,
- en: 10,
ko: 2
} ), 'Frequently used language is correctly saved.' );
@@ -159,6 +167,13 @@
this.structuredLanguages,
'Structured languages are correct.'
);
+
+ // device language is a variant and only the parent language is
available
+ assert.equal(
+ util.getStructuredLanguages( this.apiLanguages, {},
'en-us' ).preferred[0 ].lang,
+ 'en',
+ '"en" is correctly selected as a preferred language
even though the device language is "en-us".'
+ );
} );
} )( mw.mobileFrontend );
--
To view, visit https://gerrit.wikimedia.org/r/270882
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I18164925563ab88367f738dae4c97af0bffc468f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Bmansurov <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits