From 1f588bba85a8a25b38d3306b5952d0879297ae33 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Wed, 3 May 2023 12:25:31 +0200 Subject: [PATCH] MOBILE-4288 multilang: Fix unknown language filter --- .../multilang/services/handlers/multilang.ts | 6 ++++++ src/core/services/tests/lang.test.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/addons/filter/multilang/services/handlers/multilang.ts b/src/addons/filter/multilang/services/handlers/multilang.ts index 30685c130..af0014f74 100644 --- a/src/addons/filter/multilang/services/handlers/multilang.ts +++ b/src/addons/filter/multilang/services/handlers/multilang.ts @@ -47,10 +47,12 @@ export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler // Get available languages. const regex = /<(?:lang|span)[^>]+lang="([a-zA-Z0-9_-]+)"[^>]*>.*?<\/(?:lang|span)>/img; const languages: Set = new Set(); + let firstLanguage: string | undefined; let match: RegExpExecArray | null; while ((match = regex.exec(text))) { const language = match[1].toLowerCase().replace(/_/g, '-'); + firstLanguage = firstLanguage ?? language; languages.add(language); } @@ -62,6 +64,10 @@ export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler language = CoreLang.getParentLanguage(); } + if (!language) { + language = firstLanguage; + } + if (!language) { return text; } diff --git a/src/core/services/tests/lang.test.ts b/src/core/services/tests/lang.test.ts index 574d93f0d..c82e06ce5 100644 --- a/src/core/services/tests/lang.test.ts +++ b/src/core/services/tests/lang.test.ts @@ -122,6 +122,25 @@ describe('Lang', () => { `, 'Japanese text'); }); + it('filters multilang text using unknown language', async () => { + currentLanguage = 'ca'; + parentLanguage = undefined; + + await expectMultilangFilter(` + Spanish + English + Japanese + text + `, 'Spanish text'); + + await expectMultilangFilter(` + {mlang es}Spanish{mlang} + {mlang en}English{mlang} + {mlang ja}Japanese{mlang} + text + `, 'text'); + }); + /** * Test multilang filter (normalizing whitespace). */