From a004cbae639e32235303ed077ec8bebff28bc6b8 Mon Sep 17 00:00:00 2001 From: giancarlo Date: Tue, 23 Apr 2024 23:04:17 +0700 Subject: [PATCH] Modify language identification in locale handling The update changes the way locales are checked against the list of accepted languages. Now, instead the full locale, only the language segment is considered when determining if the locale is accepted. Additionally, a check in 'getPreferredLanguageFromBrowser' was added to ensure 'acceptLanguage' is not undefined before attempting to parse it. --- apps/web/lib/i18n/i18n.server.ts | 4 ++++ packages/i18n/src/i18n.server.ts | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/web/lib/i18n/i18n.server.ts b/apps/web/lib/i18n/i18n.server.ts index c8b86c567..87b124066 100644 --- a/apps/web/lib/i18n/i18n.server.ts +++ b/apps/web/lib/i18n/i18n.server.ts @@ -58,6 +58,10 @@ export const createI18nServerInstance = cache(createInstance); function getPreferredLanguageFromBrowser() { const acceptLanguage = headers().get('accept-language'); + if (!acceptLanguage) { + return; + } + return parseAcceptLanguageHeader(acceptLanguage, languages)[0]; } diff --git a/packages/i18n/src/i18n.server.ts b/packages/i18n/src/i18n.server.ts index 64385e13b..7bf1f201e 100644 --- a/packages/i18n/src/i18n.server.ts +++ b/packages/i18n/src/i18n.server.ts @@ -73,9 +73,15 @@ export function parseAcceptLanguageHeader( // Ignore wildcard '*' if 'ignoreWildcard' is true if (locale === '*' && ignoreWildcard) return []; + const languageSegment = locale.split('-')[0]; + + if (!languageSegment) return []; + // Return the locale if it's included in the accepted languages try { - return acceptedLanguages.includes(locale) ? [locale] : []; + return acceptedLanguages.includes(languageSegment) + ? [languageSegment] + : []; } catch { return []; }