From a109b6df43f0c30fd3b1bd8eb1885f4071eeccd2 Mon Sep 17 00:00:00 2001 From: PatrikKozak Date: Mon, 8 Apr 2024 17:21:05 -0400 Subject: [PATCH] fix: optimizes closest match condition --- packages/translations/src/utilities/init.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/translations/src/utilities/init.ts b/packages/translations/src/utilities/init.ts index 2dd91fc3f7..10900bad8a 100644 --- a/packages/translations/src/utilities/init.ts +++ b/packages/translations/src/utilities/init.ts @@ -181,25 +181,27 @@ const acceptedLanguages = [ export function matchLanguage(header: string): string | undefined { const parsedHeader = parseAcceptLanguage(header) - let matchedLanguage = { isExactMatch: false, language: '' } + let bestMatch = { isExactMatch: false, language: '' } for (const { language } of parsedHeader) { for (const acceptedLanguage of acceptedLanguages) { if (language === acceptedLanguage) { - if (!matchedLanguage.isExactMatch || matchedLanguage.language === '') { - matchedLanguage = { isExactMatch: true, language: acceptedLanguage } + // exact match + if (!bestMatch.isExactMatch) { + bestMatch = { isExactMatch: true, language: acceptedLanguage } } } else if ( + !bestMatch.isExactMatch && language.startsWith(acceptedLanguage) && - !matchedLanguage.isExactMatch && - acceptedLanguage.length > matchedLanguage.language.length + acceptedLanguage !== bestMatch.language ) { - matchedLanguage.language = acceptedLanguage + // closest match + bestMatch = { isExactMatch: false, language: acceptedLanguage } } } } - return matchedLanguage.language || undefined + return bestMatch.language || undefined } const initTFunction: InitTFunction = (args) => {