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

Reply via email to