Skip to content

Commit b6ff6d5

Browse files
committed
fix(web): localize Go campaign copy
Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
1 parent 7ae26b3 commit b6ff6d5

2 files changed

Lines changed: 257 additions & 2 deletions

File tree

apps/web/src/campaigns/go-plan-content.ts

Lines changed: 227 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,36 @@ const english: GoPlanCampaignCopy = {
3030
workbenchBadgeAria: 'Go first month $5, unlimited use — view Pricing',
3131
};
3232

33-
const localized: Partial<Record<Locale, GoPlanCampaignCopy>> = {
33+
const localized: Record<Locale, GoPlanCampaignCopy> = {
34+
en: english,
35+
id: {
36+
eyebrow: 'PAKET BARU · PENAWARAN PELUNCURAN',
37+
headline: 'Kenali Go: lebih leluasa untuk terus berkarya.',
38+
description: 'Paket ringan untuk desain dan coding sehari-hari, dengan model populer siap digunakan.',
39+
benefit: 'Go bulan pertama $5 · penggunaan tanpa batas',
40+
status: 'Tersedia sekarang · bulan pertama $5',
41+
cta: 'Lihat paket Go',
42+
firstMonth: 'bulan pertama',
43+
renewal: 'Lalu $10 / bulan',
44+
boundary: 'Detail kuota dan ketentuan penawaran ditampilkan di halaman Harga.',
45+
newBadge: 'BARU',
46+
workbenchBadge: 'Go bulan pertama $5 · tanpa batas',
47+
workbenchBadgeAria: 'Go bulan pertama $5, penggunaan tanpa batas — lihat Harga',
48+
},
49+
de: {
50+
eyebrow: 'NEUER TARIF · STARTANGEBOT',
51+
headline: 'Lerne Go kennen: mehr Freiraum, um kreativ zu bleiben.',
52+
description: 'Ein leichter Tarif für alltägliches Design und Coding, mit beliebten Modellen direkt einsatzbereit.',
53+
benefit: 'Go im ersten Monat $5 · unbegrenzte Nutzung',
54+
status: 'Jetzt verfügbar · erster Monat $5',
55+
cta: 'Go-Tarif ansehen',
56+
firstMonth: 'erster Monat',
57+
renewal: 'Danach $10 / Monat',
58+
boundary: 'Kontingentdetails und Angebotsbedingungen stehen auf der Preisseite.',
59+
newBadge: 'NEU',
60+
workbenchBadge: 'Go: erster Monat $5 · unbegrenzt',
61+
workbenchBadgeAria: 'Go: erster Monat $5, unbegrenzte Nutzung — Preise ansehen',
62+
},
3463
'zh-CN': {
3564
eyebrow: '全新套餐 · 首发特惠',
3665
headline: 'Go,让灵感不断线。',
@@ -59,8 +88,204 @@ const localized: Partial<Record<Locale, GoPlanCampaignCopy>> = {
5988
workbenchBadge: 'Go 首月 $5 · 無限用',
6089
workbenchBadgeAria: 'Go 首月 5 美元,無限用,查看 Pricing',
6190
},
91+
'pt-BR': {
92+
eyebrow: 'NOVO PLANO · OFERTA DE LANÇAMENTO',
93+
headline: 'Conheça o Go: mais espaço para continuar criando.',
94+
description: 'Um plano mais leve para design e programação do dia a dia, com modelos populares prontos para usar.',
95+
benefit: 'Go no primeiro mês por $5 · uso ilimitado',
96+
status: 'Disponível agora · primeiro mês por $5',
97+
cta: 'Ver plano Go',
98+
firstMonth: 'primeiro mês',
99+
renewal: 'Depois, $10 / mês',
100+
boundary: 'Os detalhes da franquia e os termos da oferta estão na página de preços.',
101+
newBadge: 'NOVO',
102+
workbenchBadge: 'Go no primeiro mês por $5 · uso ilimitado',
103+
workbenchBadgeAria: 'Go no primeiro mês por $5, uso ilimitado — ver preços',
104+
},
105+
'es-ES': {
106+
eyebrow: 'PLAN NUEVO · OFERTA DE LANZAMIENTO',
107+
headline: 'Conoce Go: más espacio para seguir creando.',
108+
description: 'Un plan más ligero para el diseño y la programación diarios, con modelos populares listos para usar.',
109+
benefit: 'Go el primer mes por $5 · uso ilimitado',
110+
status: 'Disponible ahora · primer mes por $5',
111+
cta: 'Ver el plan Go',
112+
firstMonth: 'primer mes',
113+
renewal: 'Después, $10 / mes',
114+
boundary: 'Los detalles de la cuota y las condiciones de la oferta se muestran en la página de precios.',
115+
newBadge: 'NUEVO',
116+
workbenchBadge: 'Go el primer mes por $5 · uso ilimitado',
117+
workbenchBadgeAria: 'Go el primer mes por $5, uso ilimitado — ver precios',
118+
},
119+
ru: {
120+
eyebrow: 'НОВЫЙ ТАРИФ · СТАРТОВОЕ ПРЕДЛОЖЕНИЕ',
121+
headline: 'Знакомьтесь с Go: больше возможностей творить без остановки.',
122+
description: 'Облегчённый тариф для повседневного дизайна и программирования с популярными моделями, готовыми к работе.',
123+
benefit: 'Первый месяц Go за $5 · безлимитное использование',
124+
status: 'Уже доступно · первый месяц за $5',
125+
cta: 'Посмотреть тариф Go',
126+
firstMonth: 'первый месяц',
127+
renewal: 'Затем $10 / месяц',
128+
boundary: 'Подробности о лимитах и условиях предложения указаны на странице тарифов.',
129+
newBadge: 'НОВИНКА',
130+
workbenchBadge: 'Go: первый месяц за $5 · без лимитов',
131+
workbenchBadgeAria: 'Go: первый месяц за $5, безлимитное использование — открыть тарифы',
132+
},
133+
fa: {
134+
eyebrow: 'طرح جدید · پیشنهاد آغازین',
135+
headline: 'با Go آشنا شوید: فضای بیشتری برای ادامه خلاقیت.',
136+
description: 'طرحی سبک‌تر برای طراحی و کدنویسی روزمره، با مدل‌های محبوب آماده استفاده.',
137+
benefit: 'ماه اول Go با ۵ دلار · استفاده نامحدود',
138+
status: 'اکنون در دسترس · ماه اول ۵ دلار',
139+
cta: 'مشاهده طرح Go',
140+
firstMonth: 'ماه اول',
141+
renewal: 'پس از آن ۱۰ دلار / ماه',
142+
boundary: 'جزئیات سهمیه و شرایط پیشنهاد در صفحه قیمت‌گذاری نمایش داده می‌شود.',
143+
newBadge: 'جدید',
144+
workbenchBadge: 'Go ماه اول ۵ دلار · استفاده نامحدود',
145+
workbenchBadgeAria: 'Go با ۵ دلار برای ماه اول، استفاده نامحدود — مشاهده قیمت‌ها',
146+
},
147+
ar: {
148+
eyebrow: 'خطة جديدة · عرض الإطلاق',
149+
headline: 'تعرّف على Go: مساحة أكبر لمواصلة الإبداع.',
150+
description: 'خطة أخف للتصميم والبرمجة اليومية، مع نماذج شائعة جاهزة للاستخدام.',
151+
benefit: 'Go للشهر الأول مقابل 5 دولارات · استخدام غير محدود',
152+
status: 'متاح الآن · الشهر الأول مقابل 5 دولارات',
153+
cta: 'عرض خطة Go',
154+
firstMonth: 'الشهر الأول',
155+
renewal: 'ثم 10 دولارات / شهريًا',
156+
boundary: 'تظهر تفاصيل الحصة وشروط العرض في صفحة الأسعار.',
157+
newBadge: 'جديد',
158+
workbenchBadge: 'Go للشهر الأول مقابل 5 دولارات · استخدام غير محدود',
159+
workbenchBadgeAria: 'Go للشهر الأول مقابل 5 دولارات، استخدام غير محدود — عرض الأسعار',
160+
},
161+
ja: {
162+
eyebrow: '新プラン · ローンチ特典',
163+
headline: 'Goで、創作をもっと自由に。',
164+
description: '日々のデザインとコーディングに適した軽量プラン。人気モデルをすぐに使えます。',
165+
benefit: 'Go 初月 $5 · 無制限で利用',
166+
status: '提供中 · 初月 $5',
167+
cta: 'Goプランを見る',
168+
firstMonth: '初月',
169+
renewal: '以降 $10 / 月',
170+
boundary: '利用枠の詳細とキャンペーン条件は料金ページに表示されます。',
171+
newBadge: '新着',
172+
workbenchBadge: 'Go 初月 $5 · 無制限',
173+
workbenchBadgeAria: 'Go 初月 $5、無制限で利用 — 料金を見る',
174+
},
175+
ko: {
176+
eyebrow: '새 요금제 · 출시 혜택',
177+
headline: 'Go로 더 여유롭게 창작을 이어가세요.',
178+
description: '일상적인 디자인과 코딩을 위한 가벼운 요금제로, 인기 모델을 바로 사용할 수 있습니다.',
179+
benefit: 'Go 첫 달 $5 · 무제한 사용',
180+
status: '지금 이용 가능 · 첫 달 $5',
181+
cta: 'Go 요금제 보기',
182+
firstMonth: '첫 달',
183+
renewal: '이후 월 $10',
184+
boundary: '사용량 세부 정보와 혜택 조건은 요금 페이지에서 확인할 수 있습니다.',
185+
newBadge: '신규',
186+
workbenchBadge: 'Go 첫 달 $5 · 무제한',
187+
workbenchBadgeAria: 'Go 첫 달 $5, 무제한 사용 — 요금 보기',
188+
},
189+
pl: {
190+
eyebrow: 'NOWY PLAN · OFERTA STARTOWA',
191+
headline: 'Poznaj Go: więcej swobody, by tworzyć bez przerwy.',
192+
description: 'Lżejszy plan do codziennego projektowania i programowania, z popularnymi modelami gotowymi do użycia.',
193+
benefit: 'Go: pierwszy miesiąc za $5 · bez limitu',
194+
status: 'Dostępny teraz · pierwszy miesiąc za $5',
195+
cta: 'Zobacz plan Go',
196+
firstMonth: 'pierwszy miesiąc',
197+
renewal: 'Potem $10 / miesiąc',
198+
boundary: 'Szczegóły limitów i warunki oferty znajdują się na stronie cennika.',
199+
newBadge: 'NOWOŚĆ',
200+
workbenchBadge: 'Go pierwszy miesiąc $5 · bez limitu',
201+
workbenchBadgeAria: 'Go pierwszy miesiąc za $5, bez limitu — zobacz cennik',
202+
},
203+
hu: {
204+
eyebrow: 'ÚJ CSOMAG · BEVEZETŐ AJÁNLAT',
205+
headline: 'Ismerd meg a Gót: több tér az alkotás folytatásához.',
206+
description: 'Könnyebb csomag mindennapi tervezéshez és kódoláshoz, használatra kész népszerű modellekkel.',
207+
benefit: 'Go első hónap $5 · korlátlan használat',
208+
status: 'Már elérhető · első hónap $5',
209+
cta: 'Go csomag megtekintése',
210+
firstMonth: 'első hónap',
211+
renewal: 'Utána $10 / hó',
212+
boundary: 'A keret részletei és az ajánlat feltételei az árak oldalán találhatók.',
213+
newBadge: 'ÚJ',
214+
workbenchBadge: 'Go első hónap $5 · korlátlanul',
215+
workbenchBadgeAria: 'Go első hónap $5, korlátlan használat — árak megtekintése',
216+
},
217+
fr: {
218+
eyebrow: 'NOUVELLE FORMULE · OFFRE DE LANCEMENT',
219+
headline: 'Découvrez Go : plus de liberté pour continuer à créer.',
220+
description: 'Une formule légère pour le design et le code au quotidien, avec des modèles populaires prêts à l’emploi.',
221+
benefit: 'Premier mois de Go à 5 $ · usage illimité',
222+
status: 'Disponible maintenant · premier mois à 5 $',
223+
cta: 'Voir la formule Go',
224+
firstMonth: 'premier mois',
225+
renewal: 'Puis 10 $ / mois',
226+
boundary: 'Les détails du quota et les conditions de l’offre figurent sur la page des tarifs.',
227+
newBadge: 'NOUVEAU',
228+
workbenchBadge: 'Go : premier mois à 5 $ · usage illimité',
229+
workbenchBadgeAria: 'Go : premier mois à 5 $, usage illimité — voir les tarifs',
230+
},
231+
uk: {
232+
eyebrow: 'НОВИЙ ПЛАН · СТАРТОВА ПРОПОЗИЦІЯ',
233+
headline: 'Знайомтеся з Go: більше простору для безперервної творчості.',
234+
description: 'Полегшений план для щоденного дизайну й програмування з популярними моделями, готовими до роботи.',
235+
benefit: 'Перший місяць Go за $5 · безлімітне використання',
236+
status: 'Уже доступно · перший місяць за $5',
237+
cta: 'Переглянути план Go',
238+
firstMonth: 'перший місяць',
239+
renewal: 'Потім $10 / місяць',
240+
boundary: 'Докладні ліміти й умови пропозиції наведено на сторінці цін.',
241+
newBadge: 'НОВИНКА',
242+
workbenchBadge: 'Go: перший місяць за $5 · без обмежень',
243+
workbenchBadgeAria: 'Go: перший місяць за $5, безлімітне використання — переглянути ціни',
244+
},
245+
tr: {
246+
eyebrow: 'YENİ PLAN · LANSMAN TEKLİFİ',
247+
headline: 'Go ile tanışın: üretmeye devam etmek için daha fazla alan.',
248+
description: 'Günlük tasarım ve kodlama için, popüler modelleri kullanıma hazır daha hafif bir plan.',
249+
benefit: 'Go ilk ay $5 · sınırsız kullanım',
250+
status: 'Şimdi kullanılabilir · ilk ay $5',
251+
cta: 'Go planını görüntüle',
252+
firstMonth: 'ilk ay',
253+
renewal: 'Sonrasında aylık $10',
254+
boundary: 'Kota ayrıntıları ve teklif koşulları Fiyatlandırma sayfasında gösterilir.',
255+
newBadge: 'YENİ',
256+
workbenchBadge: 'Go ilk ay $5 · sınırsız kullanım',
257+
workbenchBadgeAria: 'Go ilk ay $5, sınırsız kullanım — fiyatları görüntüle',
258+
},
259+
th: {
260+
eyebrow: 'แพ็กเกจใหม่ · ข้อเสนอช่วงเปิดตัว',
261+
headline: 'รู้จัก Go: พื้นที่มากขึ้นเพื่อสร้างสรรค์ได้อย่างต่อเนื่อง',
262+
description: 'แพ็กเกจเบาสำหรับงานออกแบบและเขียนโค้ดในทุกวัน พร้อมโมเดลยอดนิยมที่ใช้ได้ทันที',
263+
benefit: 'Go เดือนแรก $5 · ใช้งานไม่จำกัด',
264+
status: 'พร้อมใช้งานแล้ว · เดือนแรก $5',
265+
cta: 'ดูแพ็กเกจ Go',
266+
firstMonth: 'เดือนแรก',
267+
renewal: 'จากนั้น $10 / เดือน',
268+
boundary: 'รายละเอียดโควตาและเงื่อนไขข้อเสนอแสดงอยู่ในหน้าราคา',
269+
newBadge: 'ใหม่',
270+
workbenchBadge: 'Go เดือนแรก $5 · ใช้งานไม่จำกัด',
271+
workbenchBadgeAria: 'Go เดือนแรก $5 ใช้งานไม่จำกัด — ดูราคา',
272+
},
273+
it: {
274+
eyebrow: 'NUOVO PIANO · OFFERTA DI LANCIO',
275+
headline: 'Scopri Go: più spazio per continuare a creare.',
276+
description: 'Un piano più leggero per il design e la programmazione di ogni giorno, con modelli popolari pronti all’uso.',
277+
benefit: 'Go primo mese a $5 · uso illimitato',
278+
status: 'Disponibile ora · primo mese a $5',
279+
cta: 'Vedi il piano Go',
280+
firstMonth: 'primo mese',
281+
renewal: 'Poi $10 / mese',
282+
boundary: 'I dettagli della quota e le condizioni dell’offerta sono riportati nella pagina dei prezzi.',
283+
newBadge: 'NOVITÀ',
284+
workbenchBadge: 'Go primo mese $5 · uso illimitato',
285+
workbenchBadgeAria: 'Go primo mese a $5, uso illimitato — vedi i prezzi',
286+
},
62287
};
63288

64289
export function getGoPlanCampaignCopy(locale: Locale): GoPlanCampaignCopy {
65-
return localized[locale] ?? english;
290+
return localized[locale];
66291
}

apps/web/tests/campaigns/go-plan.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
resolveSubscriptionAudience,
88
} from '../../src/campaigns/go-plan';
99
import { getGoPlanCampaignCopy } from '../../src/campaigns/go-plan-content';
10+
import { LOCALES } from '../../src/i18n/types';
1011

1112
describe('Go plan touchpoints', () => {
1213
it('uses the fixed two-week NEW window while keeping a stable Pricing target', () => {
@@ -34,4 +35,33 @@ describe('Go plan touchpoints', () => {
3435
expect(getGoPlanCampaignCopy('zh-CN').workbenchBadge).toBe('Go 首月 $5 · 无限用');
3536
expect(getGoPlanCampaignCopy('en').workbenchBadge).toBe('Go first month $5 · unlimited use');
3637
});
38+
39+
it('ships localized modal and workbench copy for every supported locale', () => {
40+
const english = getGoPlanCampaignCopy('en');
41+
const translatableFields = [
42+
'eyebrow',
43+
'headline',
44+
'description',
45+
'benefit',
46+
'status',
47+
'cta',
48+
'firstMonth',
49+
'renewal',
50+
'boundary',
51+
'workbenchBadge',
52+
'workbenchBadgeAria',
53+
] as const;
54+
55+
for (const locale of LOCALES) {
56+
const copy = getGoPlanCampaignCopy(locale);
57+
for (const field of translatableFields) {
58+
expect(copy[field].trim(), `${locale}.${field}`).not.toBe('');
59+
if (locale !== 'en') {
60+
expect(copy[field], `${locale}.${field} silently fell back to English`).not.toBe(
61+
english[field],
62+
);
63+
}
64+
}
65+
}
66+
});
3767
});

0 commit comments

Comments
 (0)