'grammarForms' => $language->getGrammarForms(),
'pluralRules' => $language->getPluralRules(),
'digitGroupingPattern' => $language->digitGroupingPattern(),
+ 'fallbackLanguages' => $language->getFallbackLanguages(),
);
}
'mediawiki.language' => array(
'scripts' => array(
'resources/src/mediawiki.language/mediawiki.language.js',
- 'resources/src/mediawiki.language/mediawiki.language.numbers.js'
+ 'resources/src/mediawiki.language/mediawiki.language.numbers.js',
+ 'resources/src/mediawiki.language/mediawiki.language.fallback.js',
),
'languageScripts' => array(
'bs' => 'resources/src/mediawiki.language/languages/bs.js',
--- /dev/null
+/*
+ * Language-fallback-chain-related utilities for mediawiki.language.
+ */
+( function ( mw, $ ) {
+ /**
+ * @class mw.language
+ */
+
+ $.extend( mw.language, {
+
+ /**
+ * Get the language fallback chain for current UI language (not including the language itself).
+ *
+ * @return {string[]} List of language keys, e.g. `['de', 'en']`
+ */
+ getFallbackLanguages: function () {
+ return mw.language.getData(
+ mw.config.get( 'wgUserLanguage' ),
+ 'fallbackLanguages'
+ ) || [];
+ },
+
+ /**
+ * Get the language fallback chain for current UI language, including the language itself.
+ *
+ * @return {string[]} List of language keys, e.g. `['pfl', de', 'en']`
+ */
+ getFallbackLanguageChain: function () {
+ return [ mw.config.get( 'wgUserLanguage' ) ]
+ .concat( mw.language.getFallbackLanguages() );
+ }
+
+ } );
+
+}( mediaWiki, jQuery ) );