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
29 lines
974 B
TypeScript
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 };
|
|
}
|