Fix language string normalisation (#960)

Fixes #948
This commit is contained in:
Alex
2026-05-08 12:14:44 +01:00
committed by GitHub
parent 7d589abc35
commit f03be02de0
2 changed files with 45 additions and 5 deletions
@@ -4,7 +4,9 @@ import type { Language } from '../types/index';
import {
LANGUAGE_OPTION_ALL,
LANGUAGE_OPTION_DEFAULT,
buildLanguageNormalizer,
getReleaseSearchLanguageParams,
releaseLanguageMatchesFilter,
} from '../utils/languageFilters';
const supportedLanguages: Language[] = [
@@ -35,4 +37,33 @@ describe('languageFilters release search params', () => {
expect(result).toEqual(['de', 'hu']);
});
it('normalizes legacy default language names when combined with explicit filters', () => {
const result = getReleaseSearchLanguageParams(
[LANGUAGE_OPTION_DEFAULT, 'de'],
supportedLanguages,
['english'],
);
expect(result).toEqual(['en', 'de']);
});
});
describe('releaseLanguageMatchesFilter', () => {
it('matches release language names against legacy default language names', () => {
const normalizer = buildLanguageNormalizer(supportedLanguages);
expect(releaseLanguageMatchesFilter('English', ['english'], normalizer)).toBe(true);
});
it('keeps English-only issue 948 fallback results with a legacy English default', () => {
const normalizer = buildLanguageNormalizer(supportedLanguages);
const issue948Languages = [...Array<string>(48).fill('en'), 'de, en', 'en, es'];
const visibleLanguages = issue948Languages.filter((language) =>
releaseLanguageMatchesFilter(language, ['english'], normalizer),
);
expect(visibleLanguages).toHaveLength(48);
});
});
+14 -5
View File
@@ -48,8 +48,11 @@ export const getLanguageFilterValues = (
return null;
}
const supportedCodes = new Set(supportedLanguages.map((lang) => lang.code));
const defaultCodes = defaultLanguageCodes.filter((code) => supportedCodes.has(code));
const languageNormalizer = buildLanguageNormalizer(supportedLanguages);
const supportedCodes = new Set(supportedLanguages.map((lang) => lang.code.toLowerCase()));
const defaultCodes = defaultLanguageCodes
.map((code) => languageNormalizer.get(code.toLowerCase()) ?? code.toLowerCase())
.filter((code) => supportedCodes.has(code));
const resolved = new Set<string>();
uniqueSelection.forEach((code) => {
@@ -58,8 +61,9 @@ export const getLanguageFilterValues = (
return;
}
if (supportedCodes.has(code)) {
resolved.add(code);
const normalizedCode = languageNormalizer.get(code.toLowerCase()) ?? code.toLowerCase();
if (supportedCodes.has(normalizedCode)) {
resolved.add(normalizedCode);
}
});
@@ -130,6 +134,11 @@ export const releaseLanguageMatchesFilter = (
return part;
});
const selectedSet = new Set(selectedCodes.map((c) => c.toLowerCase()));
const selectedSet = new Set(
selectedCodes.map((code) => {
const normalizedCode = code.toLowerCase();
return languageNormalizer?.get(normalizedCode) ?? normalizedCode;
}),
);
return releaseCodes.every((code) => selectedSet.has(code));
};