accounts-frontend/packages/app/components/i18n/localeFlags.ts

47 lines
1.4 KiB
TypeScript
Raw Normal View History

import supportedLocales from 'app/i18n';
const localeToCountryCode: Record<string, string> = {
2020-05-24 04:38:24 +05:30
en: 'gb',
be: 'by',
pt: 'br',
uk: 'ua',
vi: 'vn',
sl: 'si',
sr: 'rs',
zh: 'cn',
2020-06-15 03:34:41 +05:30
cs: 'cz',
};
2020-07-20 17:49:15 +05:30
const SUPPORTED_LANGUAGES: ReadonlyArray<string> = Object.keys(supportedLocales);
2020-07-20 17:49:15 +05:30
export function getCountriesList(): string[] {
return SUPPORTED_LANGUAGES.map((locale) => localeToCountryCode[locale] || locale);
}
2020-07-21 18:53:32 +05:30
const flagIconLoadingChain: ReadonlyArray<(locale: string) => { default: string }> = [
2020-07-20 17:49:15 +05:30
(locale) => require(`./flags/${locale}.svg`),
(locale) => require(`flag-icon-css/flags/4x3/${localeToCountryCode[locale] || locale}.svg`),
];
2020-07-20 17:49:15 +05:30
/**
* Возвращает для указанной локали её флаг с учётом всех нюансов загрузки флага
* и подбора соответствующего локали флага.
*
* @param {string} locale
*
* @returns {string}
*/
export function getLocaleIconUrl(locale: string): string {
for (const flagIconLoadingChainElement of flagIconLoadingChain) {
try {
2020-07-21 18:53:32 +05:30
return flagIconLoadingChainElement(locale).default;
2020-07-20 17:49:15 +05:30
} catch (err) {
if (!err.message.startsWith('Cannot find module')) {
throw err;
}
}
2020-07-20 17:49:15 +05:30
}
2020-07-21 18:53:32 +05:30
2020-10-11 23:49:12 +05:30
// eslint-disable-next-line @typescript-eslint/no-var-requires
2020-07-21 18:53:32 +05:30
return require('./flags/unknown.svg').default;
2020-07-20 17:49:15 +05:30
}