MOBILE-4288 multilang: Fix unknown language filter
parent
335a758350
commit
1f588bba85
|
@ -47,10 +47,12 @@ export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler
|
||||||
// Get available languages.
|
// Get available languages.
|
||||||
const regex = /<(?:lang|span)[^>]+lang="([a-zA-Z0-9_-]+)"[^>]*>.*?<\/(?:lang|span)>/img;
|
const regex = /<(?:lang|span)[^>]+lang="([a-zA-Z0-9_-]+)"[^>]*>.*?<\/(?:lang|span)>/img;
|
||||||
const languages: Set<string> = new Set();
|
const languages: Set<string> = new Set();
|
||||||
|
let firstLanguage: string | undefined;
|
||||||
let match: RegExpExecArray | null;
|
let match: RegExpExecArray | null;
|
||||||
|
|
||||||
while ((match = regex.exec(text))) {
|
while ((match = regex.exec(text))) {
|
||||||
const language = match[1].toLowerCase().replace(/_/g, '-');
|
const language = match[1].toLowerCase().replace(/_/g, '-');
|
||||||
|
firstLanguage = firstLanguage ?? language;
|
||||||
|
|
||||||
languages.add(language);
|
languages.add(language);
|
||||||
}
|
}
|
||||||
|
@ -62,6 +64,10 @@ export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler
|
||||||
language = CoreLang.getParentLanguage();
|
language = CoreLang.getParentLanguage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!language) {
|
||||||
|
language = firstLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
if (!language) {
|
if (!language) {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,25 @@ describe('Lang', () => {
|
||||||
`, 'Japanese text');
|
`, 'Japanese text');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('filters multilang text using unknown language', async () => {
|
||||||
|
currentLanguage = 'ca';
|
||||||
|
parentLanguage = undefined;
|
||||||
|
|
||||||
|
await expectMultilangFilter(`
|
||||||
|
<span class="multilang" lang="es">Spanish</span>
|
||||||
|
<span class="multilang" lang="en">English</span>
|
||||||
|
<span class="multilang" lang="ja">Japanese</span>
|
||||||
|
text
|
||||||
|
`, 'Spanish text');
|
||||||
|
|
||||||
|
await expectMultilangFilter(`
|
||||||
|
{mlang es}Spanish{mlang}
|
||||||
|
{mlang en}English{mlang}
|
||||||
|
{mlang ja}Japanese{mlang}
|
||||||
|
text
|
||||||
|
`, 'text');
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test multilang filter (normalizing whitespace).
|
* Test multilang filter (normalizing whitespace).
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue