From adeb5cc23fb2aea5c88981dd8a2563476b4d3f93 Mon Sep 17 00:00:00 2001 From: Chris Anderson Date: Thu, 17 Jul 2025 16:03:54 -0500 Subject: [PATCH] chore: initial translation work for unsubscribe screens --- .../subscriptions/SubscriptionController.ts | 95 +++++++++++++++++-- 1 file changed, 89 insertions(+), 6 deletions(-) diff --git a/apps/platform/src/subscriptions/SubscriptionController.ts b/apps/platform/src/subscriptions/SubscriptionController.ts index 7b352471..c15cd8d3 100644 --- a/apps/platform/src/subscriptions/SubscriptionController.ts +++ b/apps/platform/src/subscriptions/SubscriptionController.ts @@ -28,6 +28,62 @@ interface EmailUnsubscribeParams { user_id: number } +const strings: Record> = { + en: { + title: 'Communication Preferences', + description: 'Choose which methods of communication you would like to continue to receive:', + success_message: 'Your preferences have been updated!', + no_subscriptions: 'You are not subscribed to any notifications.', + save: 'Save Preferences', + unsubscribed: 'You have been unsubscribed!', + }, + es: { + title: 'Preferencias de Comunicación', + description: 'Elige qué métodos de comunicación deseas seguir recibiendo:', + success_message: '¡Tus preferencias han sido actualizadas!', + no_subscriptions: 'No estás suscrito a ninguna notificación.', + save: 'Guardar Preferencias', + unsubscribed: '¡Te has dado de baja!', + }, + fr: { + title: 'Préférences de communication', + description: 'Choisissez les méthodes de communication que vous souhaitez continuer à recevoir :', + success_message: 'Vos préférences ont été mises à jour !', + no_subscriptions: 'Vous n\'êtes abonné à aucune notification.', + save: 'Enregistrer les Préférences', + unsubscribed: 'Vous avez été désabonné !', + }, + de: { + title: 'Kommunikationspräferenzen', + description: 'Wählen Sie, welche Kommunikationsmethoden Sie weiterhin erhalten möchten:', + success_message: 'Ihre Einstellungen wurden aktualisiert!', + no_subscriptions: 'Sie sind für keine Benachrichtigungen angemeldet.', + save: 'Einstellungen speichern', + unsubscribed: 'Sie wurden abgemeldet!', + }, + pt: { + title: 'Preferências de comunicação', + description: 'Escolha quais métodos de comunicação você gostaria de continuar recebendo:', + success_message: 'Suas preferências foram atualizadas!', + no_subscriptions: 'Você não está inscrito em nenhuma notificação.', + save: 'Salvar Preferências', + unsubscribed: 'Você foi cancelado!', + }, + it: { + title: 'Preferenze di Iscrizione', + description: 'Scegli quali metodi di comunicazione desideri continuare a ricevere:', + success_message: 'Le tue preferenze sono state aggiornate!', + no_subscriptions: 'Non sei iscritto a nessuna notifica.', + save: 'Salva Preferenze', + unsubscribed: 'Sei stato disiscritto!', + }, +} + +const keysForLocale = (locale: string | undefined) => { + const baseLocale = locale?.split('-')[0] ?? 'en' + return strings[baseLocale] +} + export const emailUnsubscribeSchema: JSONSchemaType = { $id: 'emailUnsubscribe', type: 'object', @@ -50,8 +106,30 @@ publicRouter.get('/email', async ctx => { if (!campaign) throw new RequestError(SubscriptionError.UnsubscribeInvalidCampaign) await unsubscribe(user.id, campaign.subscription_id) + + const keys = keysForLocale(user.locale) + ctx.headers['content-type'] = 'text/html' - ctx.body = '

You have been unsubscribed!

' + ctx.body = ` + + + + +

${keys.unsubscribed}

+ + ` }) publicRouter.post('/email', async ctx => { @@ -101,7 +179,7 @@ const subscriptionPreferencesTemplate = compileTemplate - Subscription Preferences + {{title}}