From 9de29485734e597aba15f453094dba7bf0dd1d22 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 2 Mar 2026 14:01:41 +0200 Subject: [PATCH] optimise displaynames by caching --- src/locale/helpers.ts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts index 8ae79f33ba..5a88ac53cb 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -32,21 +32,27 @@ export function code3ToCode2Strict(lang: string): string | undefined { return undefined } +const displayNamesCache = new Map() + +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( langCode: string, appLang: string, ): string | undefined { try { - const allNames = new Intl.DisplayNames([appLang], { - type: 'language', - fallback: 'none', - languageDisplay: 'standard', - }) - const translatedName = allNames.of(langCode) - - if (translatedName) { - return translatedName - } + return getDisplayNames(appLang).of(langCode) || undefined } catch (e) { // ignore RangeError from Intl.DisplayNames APIs if (!(e instanceof RangeError)) {