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.
This commit is contained in:
Gauthier
2024-11-12 19:58:33 +01:00
committed by GitHub
parent cb94ad5a2e
commit a2d2fd3c2a

View File

@@ -25,15 +25,14 @@ async function extractMessages(
try { try {
const formattedMessages = messages const formattedMessages = messages
.trim() .trim()
.replace(/^\s*(['"])?([a-zA-Z0-9_-]+)(['"])?:/gm, '"$2":') .replace(/^\s*(['"])?([a-zA-Z0-9_-]+)(['"])?:[\s\n]*/gm, '"$2":')
.replace( .replace(/^"[a-zA-Z0-9_-]+":'.*',?$/gm, (match) => {
/'.*'/g, const parts = /^("[a-zA-Z0-9_-]+":)'(.*)',?$/.exec(match);
(match) => if (!parts) return match;
`"${match return `${parts[1]}"${parts[2]
.match(/'(.*)'/)?.[1]
.replace(/\\/g, '\\\\') .replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')}"` .replace(/"/g, '\\"')}",`;
) })
.replace(/,$/, ''); .replace(/,$/, '');
const messagesJson = JSON.parse(`{${formattedMessages}}`); const messagesJson = JSON.parse(`{${formattedMessages}}`);
return { namespace: namespace.trim(), messages: messagesJson }; return { namespace: namespace.trim(), messages: messagesJson };