86 lines
5.0 KiB
JavaScript
86 lines
5.0 KiB
JavaScript
const fs = require('fs');
|
|
let code = fs.readFileSync('src/App.jsx', 'utf8');
|
|
|
|
const replacements = [
|
|
// 1. Remove the laundry message exactly
|
|
[`<p className="opacity-60 font-medium">{t('laundryMsg')}</p>`, ``],
|
|
|
|
// 2. Simple exact text string replacements without modifying complex tags or logic
|
|
[`> Criar Secção`, `> {t('createSection')}`],
|
|
[`Ainda não tem secções criadas`, `{t('noSectionsCreated')}`],
|
|
|
|
[`{copiedLookId === look.id ? 'Link copiado!' : 'Partilhar'}`, `{copiedLookId === look.id ? t('linkCopied') : t('share')}`],
|
|
|
|
[`peça(s) na lavandaria`, `{t('piecesInLaundry')}`],
|
|
[`>A ser lavados<`, `>{t('toBeWashed')}<`],
|
|
[`— Indisponíveis (`, `— {t('unavailable')} (`],
|
|
[`— Disponíveis (`, `— {t('availableLooks')} (`],
|
|
[`Nenhum look disponível`, `{t('noLooksAvailable')}`],
|
|
|
|
[`<Input label="Localidade"`, `<Input label={t('location')}`],
|
|
[`placeholder="Ex: Lisboa, Portugal"`, `placeholder={t('locationEx')}`],
|
|
|
|
[`<Input label="Ideia / Sugestão"`, `<Input label={t('ideaSuggestion')}`],
|
|
[`<Input label="Bug / Erro"`, `<Input label={t('bugError')}`],
|
|
[`placeholder="Escreva aqui a sua mensagem..."`, `placeholder={t('writeMessage')}`],
|
|
[`Enviar Mensagem</button>`, `{t('sendMessage')}</button>`],
|
|
[`'Mensagem enviada com sucesso!'`, `t('msgSentSuccess')`],
|
|
[`'Erro ao enviar mensagem. Verifica a tua ligação.'`, `t('msgSendError')`],
|
|
|
|
[`Notificações</h3>`, `{t('notificationsModal')}</h3>`],
|
|
[`Sem Notificações`, `{t('noNotifications')}`],
|
|
[`>guardou o seu look<`, `>{t('userSavedLook')}<`],
|
|
[`no armário dele!`, `{t('inTheirCloset')}`],
|
|
|
|
[`Look Partilhado`, `{t('sharedLookTitle')}`],
|
|
[`Partilhado por`, `{t('sharedBy')}`],
|
|
[`'alguém'`, `t('someone')`],
|
|
[`Peças incluídas`, `{t('includedPieces')}`],
|
|
[`>Ignorar<`, `>{t('ignore')}<`],
|
|
[`A copiar...`, `{t('copying')}`],
|
|
[`Copiar para o meu armário`, `{t('copyToMyCloset')}`],
|
|
|
|
[`>Adicionar peça como compra futura<`, `>{t('addFuturePurchase')}<`],
|
|
[`>{t('wishlist') || 'Lista de Desejos'}<`, `>{t('wishlist') || t('wishlistDesc')}<`],
|
|
|
|
[`>Suporte e Feedback<`, `>{t('feedbackTitle')}<`],
|
|
[`>Tem alguma ideia, sugestão ou encontrou algum problema? Envie uma mensagem diretamente para nós!<`, `>{t('feedbackDesc')}<`],
|
|
[`>Cor do Tema<`, `>{t('themeColorTitle')}<`],
|
|
[`>Personalize a cor<`, `>{t('personalizeColorDesc')}<`],
|
|
[`Guardar Alterações`, `{t('saveChanges')}`]
|
|
];
|
|
|
|
for (const [oldText, newText] of replacements) {
|
|
code = code.split(oldText).join(newText);
|
|
}
|
|
|
|
// Color map safe replacement using very exact match to avoid breaking braces
|
|
const oldMapColorCode = `['Vermelho', 'Azul', 'Amarelo', 'Verde', 'Laranja', 'Roxo', 'Branco', 'Preto', 'Cinzento', 'Bege'].map(c => (
|
|
<button`;
|
|
const newMapColorCode = `['Vermelho', 'Azul', 'Amarelo', 'Verde', 'Laranja', 'Roxo', 'Branco', 'Preto', 'Cinzento', 'Bege'].map(c => {
|
|
const translatedColor = c === 'Vermelho' ? t('colorRed') : c === 'Azul' ? t('colorBlue') : c === 'Amarelo' ? t('colorYellow') : c === 'Verde' ? t('colorGreen') : c === 'Laranja' ? t('colorOrange') : c === 'Roxo' ? t('colorPurple') : c === 'Branco' ? t('colorWhite') : c === 'Preto' ? t('colorBlack') : c === 'Cinzento' ? t('colorGray') : c === 'Bege' ? t('colorBeige') : c;
|
|
return (
|
|
<button`;
|
|
code = code.replace(oldMapColorCode, newMapColorCode);
|
|
|
|
// Safe replacement for {c} inside button
|
|
const oldInnerCode = ` className={\`px-4 py-2 rounded-xl text-xs font-bold transition-all border-2 \${itemColors.includes(c) ? 'border-primary-600 bg-primary-600 text-white shadow-lg shadow-primary-600/30' : 'border-transparent bg-gray-100 dark:bg-gray-800 text-gray-500 hover:bg-gray-200 dark:hover:bg-gray-700'}\`}
|
|
>
|
|
{c}
|
|
</button>
|
|
))}`;
|
|
const newInnerCode = ` className={\`px-4 py-2 rounded-xl text-xs font-bold transition-all border-2 \${itemColors.includes(c) ? 'border-primary-600 bg-primary-600 text-white shadow-lg shadow-primary-600/30' : 'border-transparent bg-gray-100 dark:bg-gray-800 text-gray-500 hover:bg-gray-200 dark:hover:bg-gray-700'}\`}
|
|
>
|
|
{translatedColor}
|
|
</button>
|
|
);
|
|
})}`;
|
|
if (code.includes(oldInnerCode)) {
|
|
code = code.replace(oldInnerCode, newInnerCode);
|
|
} else {
|
|
console.log("WARNING: oldInnerCode not found!");
|
|
}
|
|
|
|
fs.writeFileSync('src/App.jsx', code);
|
|
console.log('Safe patch applied');
|