diff --git a/src/modules/core/utils/Languages.ts b/src/modules/core/utils/Languages.ts index 1eae80ff..3d5387ec 100644 --- a/src/modules/core/utils/Languages.ts +++ b/src/modules/core/utils/Languages.ts @@ -66,8 +66,23 @@ export function langCodeToName(code: string): string { return getLanguage(code).nativeName; } +export const toUniqueLanguageCodes = (codes: string[]): string[] => { + const languages = codes.map((code) => getLanguage(code)); + const languagesByIsoCode = Object.groupBy(languages, (language) => language.isoCode); + + return Object.entries(languagesByIsoCode) + .filter(([, languagesOfIsoCode]) => !!languagesOfIsoCode?.length) + .map(([, languagesOfIsoCode]) => languagesOfIsoCode![0].orgCode); +}; + function defaultNativeLang(): readonly string[] { - return navigator.languages; + const preferredLanguages = toUniqueLanguageCodes([...navigator.languages]); + + if (!preferredLanguages.length) { + return ['en']; + } + + return preferredLanguages; } export function extensionDefaultLangs(): string[] { @@ -88,12 +103,3 @@ export const langSortCmp = (a: string, b: string) => { return aLang.localeCompare(bLang); }; - -export const toUniqueLanguageCodes = (codes: string[]): string[] => { - const languages = codes.map((code) => getLanguage(code)); - const languagesByIsoCode = Object.groupBy(languages, (language) => language.isoCode); - - return Object.entries(languagesByIsoCode) - .filter(([, languagesOfIsoCode]) => !!languagesOfIsoCode?.length) - .map(([, languagesOfIsoCode]) => languagesOfIsoCode![0].orgCode); -};