mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-26 12:29:06 +01:00
3732c5f71e
ESLint rules have been added to enforce our JSDoc conventions. These rules were introduced by updating `@metamask/eslint-config` to v9. Some of the rules have been disabled because the effort to fix all lint errors was too high. It might be easiest to enable these rules one directory at a time, or one rule at a time. Most of the changes in this PR were a result of running `yarn lint:fix`. There were a handful of manual changes that seemed obvious and simple to make. Anything beyond that and the rule was left disabled.
60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
import extension from 'extensionizer';
|
|
import promisify from 'pify';
|
|
import allLocales from '../../_locales/index.json';
|
|
|
|
const getPreferredLocales = extension.i18n
|
|
? promisify(extension.i18n.getAcceptLanguages, { errorFirst: false })
|
|
: async () => [];
|
|
|
|
// mapping some browsers return hyphen instead underscore in locale codes (e.g. zh_TW -> zh-tw)
|
|
const existingLocaleCodes = {};
|
|
allLocales.forEach((locale) => {
|
|
if (locale && locale.code) {
|
|
existingLocaleCodes[locale.code.toLowerCase().replace('_', '-')] =
|
|
locale.code;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Returns a preferred language code, based on settings within the user's browser. If we have no translations for the
|
|
* users preferred locales, 'en' is returned.
|
|
*
|
|
* @returns {Promise<string>} Promises a locale code, either one from the user's preferred list that we have a translation for, or 'en'
|
|
*/
|
|
export default async function getFirstPreferredLangCode() {
|
|
let userPreferredLocaleCodes;
|
|
|
|
try {
|
|
userPreferredLocaleCodes = await getPreferredLocales();
|
|
} catch (e) {
|
|
// Brave currently throws when calling getAcceptLanguages, so this handles that.
|
|
userPreferredLocaleCodes = [];
|
|
}
|
|
|
|
// safeguard for Brave Browser until they implement chrome.i18n.getAcceptLanguages
|
|
// https://github.com/MetaMask/metamask-extension/issues/4270
|
|
if (!userPreferredLocaleCodes) {
|
|
userPreferredLocaleCodes = [];
|
|
}
|
|
|
|
let firstPreferredLangCode = userPreferredLocaleCodes
|
|
.map((code) => code.toLowerCase().replace('_', '-'))
|
|
.find(
|
|
(code) =>
|
|
existingLocaleCodes[code] !== undefined ||
|
|
existingLocaleCodes[code.split('-')[0]] !== undefined,
|
|
);
|
|
|
|
// if we have matched against a code with a '-' present, meaning its a regional
|
|
// code for which we have a non-regioned locale, we need to set firstPreferredLangCode
|
|
// to the correct non-regional code.
|
|
if (
|
|
firstPreferredLangCode !== undefined &&
|
|
existingLocaleCodes[firstPreferredLangCode] === undefined
|
|
) {
|
|
firstPreferredLangCode = firstPreferredLangCode.split('-')[0];
|
|
}
|
|
|
|
return existingLocaleCodes[firstPreferredLangCode] || 'en';
|
|
}
|