optimise displaynames by caching
This commit is contained in:
+16
-10
@@ -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)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user