Files
web/scripts/i18n/syncDefaultMessage/syncFormattedMessage.ts
Joakim Jäderberg aafad9781f 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
2025-10-22 11:00:03 +00:00

29 lines
974 B
TypeScript

/**
* Pattern 1: FormattedMessage with id and defaultMessage
* @code <FormattedMessage id="myKey" defaultMessage="old message" />
*/
export function syncFormattedMessage({
translations,
fileContent,
}: {
translations: Record<string, string>;
fileContent: string;
}): { updated: false } | { updated: true; fileContent: string } {
let updated = false;
Object.entries(translations).forEach(([messageId, messageValue]) => {
const regex = new RegExp(
`(id=["']${messageId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}["'].*?defaultMessage=)["']([^"']*?)["']`,
"gs"
);
if (regex.test(fileContent)) {
const escapedValue = messageValue
.replace(/"/g, '\\"')
.replace(/\n/g, "\\n");
fileContent = fileContent.replace(regex, `$1"${escapedValue}"`);
updated = true;
}
});
return updated ? { updated, fileContent } : { updated };
}