Bug 1857002 - Move getLanguageList from browser to toolkit r=gregtatum,settings-reviewers,mconley

This function is helpful for GeckoView and Translations on Android.
Moving it to toolkit for shared use.

Differential Revision: https://phabricator.services.mozilla.com/D190118
This commit is contained in:
Olivia Hall
2023-10-16 18:32:51 +00:00
parent 3c473874e4
commit 632f1b3db0
2 changed files with 32 additions and 33 deletions

View File

@@ -1049,7 +1049,7 @@ var gMainPane = {
const supportedLanguages = const supportedLanguages =
await TranslationsParent.getSupportedLanguages(); await TranslationsParent.getSupportedLanguages();
const languageList = const languageList =
TranslationsState.getLanguageList(supportedLanguages); TranslationsParent.getLanguageList(supportedLanguages);
const downloadPhases = await TranslationsState.createDownloadPhases( const downloadPhases = await TranslationsState.createDownloadPhases(
languageList languageList
); );
@@ -1067,38 +1067,6 @@ var gMainPane = {
); );
} }
/**
* Create a unique list of languages, sorted by the display name.
*
* @param {Object} supportedLanguages
* @returns {Array<{ langTag: string, displayName: string}}
*/
static getLanguageList(supportedLanguages) {
const displayNames = new Map();
for (const languages of [
supportedLanguages.fromLanguages,
supportedLanguages.toLanguages,
]) {
for (const { langTag, displayName } of languages) {
displayNames.set(langTag, displayName);
}
}
let appLangTag = new Intl.Locale(Services.locale.appLocaleAsBCP47)
.language;
// Don't offer to download the app's language.
displayNames.delete(appLangTag);
// Sort the list of languages by the display names.
return [...displayNames.entries()]
.map(([langTag, displayName]) => ({
langTag,
displayName,
}))
.sort((a, b) => a.displayName.localeCompare(b.displayName));
}
/** /**
* Determine the download phase of each language file. * Determine the download phase of each language file.
* *

View File

@@ -1088,6 +1088,37 @@ export class TranslationsParent extends JSWindowActorParent {
}; };
} }
/**
* Create a unique list of languages, sorted by the display name.
*
* @param {Object} supportedLanguages
* @returns {Array<{ langTag: string, displayName: string}}
*/
static getLanguageList(supportedLanguages) {
const displayNames = new Map();
for (const languages of [
supportedLanguages.fromLanguages,
supportedLanguages.toLanguages,
]) {
for (const { langTag, displayName } of languages) {
displayNames.set(langTag, displayName);
}
}
let appLangTag = new Intl.Locale(Services.locale.appLocaleAsBCP47).language;
// Don't offer to download the app's language.
displayNames.delete(appLangTag);
// Sort the list of languages by the display names.
return [...displayNames.entries()]
.map(([langTag, displayName]) => ({
langTag,
displayName,
}))
.sort((a, b) => a.displayName.localeCompare(b.displayName));
}
/** /**
* @param {Object} event * @param {Object} event
* @param {Object} event.data * @param {Object} event.data