Fix native language codes usage in "browse languages"

The native language code returned by the browser could be a code that is not included in the defined ISOLanguages object. E.g. "en-GB" while the object only has "en".

This caused the "English" browse language to not be able to get selected as an allowed language.
This commit is contained in:
schroda
2026-07-06 23:57:04 +02:00
parent 4629b4f868
commit 3112f7c47e
3 changed files with 21 additions and 1 deletions

View File

@@ -726,6 +726,23 @@ export const METADATA_MIGRATIONS: IMetadataMigration[] = [
})) satisfies IMetadataMigration['values'])(),
],
},
{
values: [
{
key: 'browseLanguages',
oldValue: /^\[.*]$/g,
newValue: (browseLanguagesValue) => {
const convertedBrowseLanguages = convertToObject<string[]>(browseLanguagesValue, []);
const convertedToValidIsoCodes = convertedBrowseLanguages.map(
(language) => getISOLanguage(language)?.isoCode ?? language,
);
return JSON.stringify(convertedToValidIsoCodes);
},
},
],
},
];
export const ALL_APP_METADATA_KEY_PREFIXES: string[] = [

View File

@@ -116,7 +116,9 @@ const toUniqueISOLanguageCodes = (codes: string[]): string[] => {
};
export function getPreferredISOLanguageCodes(): readonly string[] {
const preferredLanguages = toUniqueISOLanguageCodes([...navigator.languages]);
const preferredLanguages = toUniqueISOLanguageCodes([...navigator.languages]).map(
(language) => getISOLanguage(language)?.isoCode ?? language,
);
if (!preferredLanguages.length) {
return [DEFAULT_LANGUAGE];