optimise displaynames by caching

This commit is contained in:
Samuel Newman
2026-03-02 14:01:41 +02:00
parent 80dc15e776
commit 9de2948573
+16 -10
View File
@@ -32,21 +32,27 @@ export function code3ToCode2Strict(lang: string): string | undefined {
return undefined return undefined
} }
const displayNamesCache = new Map<string, Intl.DisplayNames>()
function getDisplayNames(appLang: string): Intl.DisplayNames {
let cached = displayNamesCache.get(appLang)
if (!cached) {
cached = new Intl.DisplayNames([appLang], {
type: 'language',
fallback: 'none',
languageDisplay: 'standard',
})
displayNamesCache.set(appLang, cached)
}
return cached
}
function getLocalizedLanguage( function getLocalizedLanguage(
langCode: string, langCode: string,
appLang: string, appLang: string,
): string | undefined { ): string | undefined {
try { try {
const allNames = new Intl.DisplayNames([appLang], { return getDisplayNames(appLang).of(langCode) || undefined
type: 'language',
fallback: 'none',
languageDisplay: 'standard',
})
const translatedName = allNames.of(langCode)
if (translatedName) {
return translatedName
}
} catch (e) { } catch (e) {
// ignore RangeError from Intl.DisplayNames APIs // ignore RangeError from Intl.DisplayNames APIs
if (!(e instanceof RangeError)) { if (!(e instanceof RangeError)) {