Merged in feat/lokalise-rebuild (pull request #2993)
Feat/lokalise rebuild * chore(lokalise): update translation ids * chore(lokalise): easier to switch between projects * chore(lokalise): update translation ids * . * . * . * . * . * . * chore(lokalise): update translation ids * chore(lokalise): update translation ids * . * . * . * chore(lokalise): update translation ids * chore(lokalise): update translation ids * . * . * chore(lokalise): update translation ids * chore(lokalise): update translation ids * chore(lokalise): new translations * merge * switch to errors for missing id's * merge * sync translations Approved-by: Linus Flood
This commit is contained in:
47
scripts/i18n/syncDefaultMessage/syncIntlFormatMessage.ts
Normal file
47
scripts/i18n/syncDefaultMessage/syncIntlFormatMessage.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
export function syncIntlFormatMessage({
|
||||
translations,
|
||||
fileContent,
|
||||
}: {
|
||||
translations: Record<string, string>;
|
||||
fileContent: string;
|
||||
}): { updated: boolean; fileContent: string } {
|
||||
let updated = false;
|
||||
const entries = Object.entries(translations);
|
||||
|
||||
for (const [messageId, messageValue] of entries) {
|
||||
const escapedId = messageId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||
|
||||
// Find intl.formatMessage({...}) blocks that contain the specific id
|
||||
const outerRegex = new RegExp(
|
||||
`intl\\.formatMessage\\(\\s*\\{([^}]*?\\bid\\s*:\\s*['"]${escapedId}['"][^}]*?)\\}\\s*\\)`,
|
||||
"gs"
|
||||
);
|
||||
|
||||
fileContent = fileContent.replace(
|
||||
outerRegex,
|
||||
(fullMatch, innerObject) => {
|
||||
// Find defaultMessage: '...' or "..."
|
||||
const dmRegex =
|
||||
/defaultMessage\s*:\s*(['"])((?:\\.|[\s\S])*?)\1/;
|
||||
if (!dmRegex.test(innerObject)) return fullMatch;
|
||||
|
||||
const newInner = innerObject.replace(
|
||||
dmRegex,
|
||||
(_m: unknown, quote: string, _old: unknown) => {
|
||||
// Escape backslashes first, then the surrounding quote, and newlines
|
||||
const escaped = messageValue
|
||||
.replace(/\\/g, "\\\\")
|
||||
.replace(new RegExp(quote, "g"), `\\${quote}`)
|
||||
.replace(/\n/g, "\\n");
|
||||
return `defaultMessage: ${quote}${escaped}${quote}`;
|
||||
}
|
||||
);
|
||||
|
||||
updated = true;
|
||||
return `intl.formatMessage({${newInner}})`;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return { updated, fileContent };
|
||||
}
|
||||
Reference in New Issue
Block a user