From a2d2fd3c2a53fc98d6288bd049fd8e37a1914280 Mon Sep 17 00:00:00 2001 From: Gauthier Date: Tue, 12 Nov 2024 19:58:33 +0100 Subject: [PATCH] fix(i18n): update extractMessages function for better escaping of characters (#1079) This PR fix a bug when a translation message has two single quote like "message": "hello 'world'", the extractMessages function was escaping the message correcly. --- src/i18n/extractMessages.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/i18n/extractMessages.ts b/src/i18n/extractMessages.ts index bdb901eb5..9820a9c7e 100644 --- a/src/i18n/extractMessages.ts +++ b/src/i18n/extractMessages.ts @@ -25,15 +25,14 @@ async function extractMessages( try { const formattedMessages = messages .trim() - .replace(/^\s*(['"])?([a-zA-Z0-9_-]+)(['"])?:/gm, '"$2":') - .replace( - /'.*'/g, - (match) => - `"${match - .match(/'(.*)'/)?.[1] - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"')}"` - ) + .replace(/^\s*(['"])?([a-zA-Z0-9_-]+)(['"])?:[\s\n]*/gm, '"$2":') + .replace(/^"[a-zA-Z0-9_-]+":'.*',?$/gm, (match) => { + const parts = /^("[a-zA-Z0-9_-]+":)'(.*)',?$/.exec(match); + if (!parts) return match; + return `${parts[1]}"${parts[2] + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"')}",`; + }) .replace(/,$/, ''); const messagesJson = JSON.parse(`{${formattedMessages}}`); return { namespace: namespace.trim(), messages: messagesJson };