mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 04:55:42 +09:00
29 lines
993 B
TypeScript
29 lines
993 B
TypeScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import {Locales} from '@fluxer/constants/src/Locales';
|
|
|
|
const displayNamesByLocale = new Map<string, Intl.DisplayNames>();
|
|
|
|
function getDisplayNames(locale?: string): Intl.DisplayNames {
|
|
const localeCode = locale?.trim() || Locales.EN_US;
|
|
let displayNames = displayNamesByLocale.get(localeCode);
|
|
if (!displayNames) {
|
|
displayNames = new Intl.DisplayNames([localeCode], {type: 'region', fallback: 'none'});
|
|
displayNamesByLocale.set(localeCode, displayNames);
|
|
}
|
|
return displayNames;
|
|
}
|
|
|
|
export function getRegionDisplayName(regionCode: string, options?: {locale?: string}): string | undefined {
|
|
const displayNames = getDisplayNames(options?.locale);
|
|
const trimmedRegionCode = regionCode.trim();
|
|
if (trimmedRegionCode.length !== 2) {
|
|
return undefined;
|
|
}
|
|
const upperRegionCode = trimmedRegionCode.toUpperCase();
|
|
if (!/^[A-Z]{2}$/.test(upperRegionCode)) {
|
|
return undefined;
|
|
}
|
|
return displayNames.of(upperRegionCode) || undefined;
|
|
}
|