Skip to content

Commit e0c9ce7

Browse files
committed
[DRAFT] refactor: Run i18n-pro-codemod Campaign shard
1 parent ec7de7e commit e0c9ce7

27 files changed

Lines changed: 529 additions & 228 deletions

File tree

apps/web/app/(ee)/admin.dub.co/(dashboard)/commissions/client.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"use client";
2+
import { useTranslations } from "next-intl";
3+
24

35
import { formatDateTooltip } from "@/lib/analytics/format-date-tooltip";
46
import { AnalyticsLoadingSpinner } from "@/ui/analytics/analytics-loading-spinner";
@@ -28,6 +30,8 @@ type Tab = {
2830
};
2931

3032
export default function CommissionsPageClient() {
33+
const t = useTranslations("admin-commissions-dashboard");
34+
3135
const { queryParams, getQueryString, searchParamsObj } = useRouterStuff();
3236
const {
3337
tab: selectedTab = "commissions",
@@ -292,9 +296,7 @@ export default function CommissionsPageClient() {
292296
/>
293297
</TimeSeriesChart>
294298
) : (
295-
<div className="text-center text-sm text-neutral-600">
296-
No data available.
297-
</div>
299+
<div className="text-center text-sm text-neutral-600">{t('messages.no-data-available')}</div>
298300
)
299301
) : (
300302
<AnalyticsLoadingSpinner />

apps/web/app/(ee)/app.dub.co/embed/referrals/earnings-summary.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useTranslations } from "next-intl";
12
import { Button, InfoTooltip } from "@dub/ui";
23
import { currencyFormatter } from "@dub/utils";
34

@@ -8,19 +9,21 @@ export function ReferralsEmbedEarningsSummary({
89
earnings: { upcoming: number; paid: number };
910
programSlug: string;
1011
}) {
12+
const t = useTranslations("referrals-embed-earnings");
13+
1114
return (
1215
<div className="border-border-subtle bg-bg-default flex flex-col justify-between gap-4 rounded-lg border p-4">
1316
<div className="flex items-center justify-between">
1417
<div className="flex items-center gap-1">
15-
<p className="text-content-subtle text-sm">Earnings</p>
18+
<p className="text-content-subtle text-sm">{t('headings.earnings')}</p>
1619
<InfoTooltip content="Summary of your commission earnings from your referrals." />
1720
</div>
1821
<a
1922
href={`https://partners.dub.co/${programSlug}/register`}
2023
target="_blank"
2124
>
2225
<Button
23-
text="Settings"
26+
text={t('buttons.settings')}
2427
variant="secondary"
2528
className="h-7 p-2 text-sm"
2629
/>

apps/web/app/(ee)/partners.dub.co/(auth)/(custom)/framer/login/page.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useTranslations } from "next-intl";
12
import { FramerButton } from "@/ui/auth/login/framer-button";
23
import { APP_DOMAIN, constructMetadata } from "@dub/utils";
34
import Link from "next/link";
@@ -8,28 +9,27 @@ export const metadata = constructMetadata({
89
});
910

1011
export default function CustomPartnerLoginPage() {
12+
const t = useTranslations("framer-partner-login");
13+
1114
return (
1215
<div className="mx-auto my-10 flex w-full max-w-sm flex-col gap-8">
1316
<div className="animate-slide-up-fade relative flex w-auto flex-col items-center [--offset:10px] [animation-duration:1.3s] [animation-fill-mode:both]">
1417
<img
1518
src="https://assets.dub.co/testimonials/companies/framer.svg"
16-
alt="Framer Logo"
19+
alt={t('logo.alt-text')}
1720
className="h-8"
1821
/>
1922
</div>
2023
<div className="animate-slide-up-fade flex flex-col items-center justify-center gap-2 [--offset:10px] [animation-delay:0.15s] [animation-duration:1.3s] [animation-fill-mode:both]">
21-
<h1 className="text-lg font-medium text-neutral-800">
22-
Sign in to Framer Partners
23-
</h1>
24-
<p className="text-center text-sm text-neutral-700">
25-
Not a Framer Partner?&nbsp;
26-
<Link
24+
<h1 className="text-lg font-medium text-neutral-800">{t('headings.sign-in-title')}</h1>
25+
<p className="text-center text-sm text-neutral-700">{t.rich('messages.not-partner-apply', {
26+
component0: (chunks) => <Link
2727
href="https://www.framer.com/creators"
2828
target="_blank"
2929
className="font-normal underline underline-offset-2 transition-colors hover:text-black"
30-
>
31-
Apply today
32-
</Link>
30+
>{chunks}</Link>
31+
})}
32+
3333
</p>
3434
</div>
3535

apps/web/app/(ee)/partners.dub.co/(dashboard)/programs/[programSlug]/apply/page.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { getTranslations } from "next-intl/server";
12
import { getProgram } from "@/lib/fetchers/get-program";
23
import { programLanderSchema } from "@/lib/zod/schemas/program-lander";
34
import { PageContent } from "@/ui/layout/page-content";
@@ -13,6 +14,8 @@ export default async function ProgramDetailsPage({
1314
}: {
1415
params: { programSlug: string };
1516
}) {
17+
const t = await getTranslations("program-application-page");
18+
1619
const program = await getProgram({
1720
slug: programSlug,
1821
include: ["rewards", "defaultDiscount"],
@@ -23,7 +26,7 @@ export default async function ProgramDetailsPage({
2326
return (
2427
<PageContent>
2528
<MaxWidthWrapper className="mb-10 mt-4">
26-
<BackLink href="/programs">Programs</BackLink>
29+
<BackLink href="/programs">{t('navigation.programs-breadcrumb')}</BackLink>
2730
<div className="mt-8 grid grid-cols-1 gap-x-16 gap-y-10 lg:grid-cols-[300px_minmax(0,600px)]">
2831
<div>
2932
<ProgramSidebar program={program} />
@@ -40,14 +43,8 @@ export default async function ProgramDetailsPage({
4043
>
4144
{/* Hero section */}
4245
<div className="grid grid-cols-1 gap-5">
43-
<h1 className="text-4xl font-semibold">
44-
Join the {program.name} affiliate program
45-
</h1>
46-
<p className="text-base text-neutral-700">
47-
Share {program.name} with your audience and for each
48-
subscription generated through your referral, you'll earn a
49-
share of the revenue on any plans they purchase.
50-
</p>
46+
<h1 className="text-4xl font-semibold">{t('headings.join-program-title', { "programName": program.name })}</h1>
47+
<p className="text-base text-neutral-700">{t('descriptions.affiliate-program-benefits', { "programName": program.name })}</p>
5148
</div>
5249

5350
{/* Content blocks */}

apps/web/app/app.dub.co/(auth)/auth/confirm-email-change/[token]/page-client.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"use client";
2+
import { getTranslations } from "next-intl/server";
3+
24

35
import { EmptyState, LoadingSpinner } from "@dub/ui";
46
import { useSession } from "next-auth/react";
@@ -7,6 +9,8 @@ import { useEffect, useRef } from "react";
79
import { toast } from "sonner";
810

911
export default async function ConfirmEmailChangePageClient() {
12+
const t = await getTranslations("confirm-email-change");
13+
1014
const router = useRouter();
1115
const { update, status } = useSession();
1216
const hasUpdatedSession = useRef(false);
@@ -29,8 +33,8 @@ export default async function ConfirmEmailChangePageClient() {
2933
return (
3034
<EmptyState
3135
icon={LoadingSpinner}
32-
title="Verifying Email Change"
33-
description="Verifying your email change request. This might take a few seconds..."
36+
title={t('verification.title')}
37+
description={t('verification.description')}
3438
/>
3539
);
3640
}

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/programs/[programId]/partners/invite-partner-button.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
"use client";
2+
import { useTranslations } from "next-intl";
3+
24

35
import { Button, useKeyboardShortcut } from "@dub/ui";
46
import { useInvitePartnerSheet } from "./invite-partner-sheet";
57

68
export function InvitePartnerButton() {
9+
const t = useTranslations("invite-partner-button");
10+
711
const { invitePartnerSheet, setIsOpen: setShowInvitePartnerSheet } =
812
useInvitePartnerSheet();
913

@@ -15,7 +19,7 @@ export function InvitePartnerButton() {
1519
<Button
1620
type="button"
1721
onClick={() => setShowInvitePartnerSheet(true)}
18-
text="Invite partner"
22+
text={t('buttons.invite-partner')}
1923
shortcut="P"
2024
/>
2125
</>

apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/programs/[programId]/settings/discounts/page-client.tsx

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"use client";
2+
import { useTranslations } from "next-intl";
3+
24

35
import useDiscounts from "@/lib/swr/use-discounts";
46
import useProgram from "@/lib/swr/use-program";
@@ -18,6 +20,8 @@ export function ProgramSettingsDiscountsPageClient() {
1820
}
1921

2022
const DefaultDiscount = () => {
23+
const t = useTranslations("program-discounts-settings");
24+
2125
const { program } = useProgram();
2226
const { discounts, loading } = useDiscounts();
2327

@@ -35,13 +39,9 @@ const DefaultDiscount = () => {
3539
<div className="flex flex-col gap-6 px-6 py-8">
3640
<div className="flex items-center justify-between">
3741
<div>
38-
<h2 className="inline-flex items-center gap-2 text-lg font-semibold text-neutral-900">
39-
Referral Discount <Badge variant="gray">Default</Badge>
42+
<h2 className="inline-flex items-center gap-2 text-lg font-semibold text-neutral-900">{t('headings.referral-discount')}<Badge variant="gray">{t('badges.default')}</Badge>
4043
</h2>
41-
<p className="mt-1 text-sm text-neutral-600">
42-
The discount offered to all customers when referred by your
43-
partners
44-
</p>
44+
<p className="mt-1 text-sm text-neutral-600">{t('descriptions.default-discount')}</p>
4545
</div>
4646
</div>
4747

@@ -56,12 +56,10 @@ const DefaultDiscount = () => {
5656
<div className="flex size-10 items-center justify-center rounded-full border border-neutral-300">
5757
<BadgePercent className="size-5" />
5858
</div>
59-
<p className="text-sm text-neutral-600">
60-
No default referral discount created
61-
</p>
59+
<p className="text-sm text-neutral-600">{t('messages.no-default-discount')}</p>
6260
</div>
6361
<Button
64-
text="Create default discount"
62+
text={t('buttons.create-default-discount')}
6563
variant="primary"
6664
className="h-8 w-fit px-3"
6765
onClick={() => setIsOpen(true)}
@@ -77,6 +75,8 @@ const DefaultDiscount = () => {
7775
};
7876

7977
const AdditionalDiscounts = () => {
78+
const t = useTranslations("program-discounts-settings");
79+
8080
const { program } = useProgram();
8181
const { discounts, loading } = useDiscounts();
8282

@@ -93,15 +93,11 @@ const AdditionalDiscounts = () => {
9393
<div className="flex flex-col gap-6 px-6 py-8">
9494
<div className="flex items-center justify-between">
9595
<div>
96-
<h2 className="inline-flex items-center gap-2 text-lg font-semibold text-neutral-900">
97-
Additional Referral Discounts
98-
</h2>
99-
<p className="mt-1 text-sm text-neutral-600">
100-
Add additional discounts for your referred customers
101-
</p>
96+
<h2 className="inline-flex items-center gap-2 text-lg font-semibold text-neutral-900">{t('headings.additional-referral-discounts')}</h2>
97+
<p className="mt-1 text-sm text-neutral-600">{t('descriptions.additional-discounts')}</p>
10298
</div>
10399
<Button
104-
text="Create discount"
100+
text={t('buttons.create-discount')}
105101
variant="primary"
106102
className="h-8 w-fit px-3"
107103
onClick={() => setIsOpen(true)}
@@ -129,12 +125,8 @@ const AdditionalDiscounts = () => {
129125
<BadgePercent className="size-6 text-neutral-800" />
130126
</div>
131127
<div className="flex flex-col items-center gap-1 px-4 text-center">
132-
<p className="text-base font-medium text-neutral-900">
133-
Additional Discounts
134-
</p>
135-
<p className="text-sm text-neutral-600">
136-
No additional discounts have been added yet
137-
</p>
128+
<p className="text-base font-medium text-neutral-900">{t('headings.additional-discounts')}</p>
129+
<p className="text-sm text-neutral-600">{t('messages.no-additional-discounts')}</p>
138130
</div>
139131
</div>
140132
)}
@@ -151,6 +143,8 @@ const Discount = ({
151143
discount: DiscountProps;
152144
isDefault: boolean;
153145
}) => {
146+
const t = useTranslations("program-discounts-settings");
147+
154148
const { DiscountSheet, setIsOpen } = useDiscountSheet({
155149
...(discount && { discount }),
156150
isDefault,
@@ -172,9 +166,9 @@ const Discount = ({
172166
</span>
173167
</div>
174168
{discount.partnersCount && discount?.partnersCount > 0 ? (
175-
<Badge variant="green">{discount.partnersCount} partners</Badge>
169+
<Badge variant="green">{t('badges.partners-count', { "discountPartnersCount": discount.partnersCount })}</Badge>
176170
) : (
177-
<Badge variant="gray">All partners</Badge>
171+
<Badge variant="gray">{t('badges.all-partners')}</Badge>
178172
)}
179173
</div>
180174
</div>

apps/web/app/app.dub.co/(dashboard)/[slug]/settings/domains/page-client.tsx

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"use client";
2+
import { useTranslations } from "next-intl";
3+
24

35
import { clientAccessCheck } from "@/lib/api/tokens/permissions";
46
import useDomains from "@/lib/swr/use-domains";
@@ -32,6 +34,8 @@ import { ChevronDown, Crown } from "lucide-react";
3234
import { useEffect, useState } from "react";
3335

3436
export function CustomDomains() {
37+
const t = useTranslations("domains-settings");
38+
3539
const {
3640
id: workspaceId,
3741
plan,
@@ -79,10 +83,7 @@ export function CustomDomains() {
7983

8084
const disabledTooltip = exceededDomains ? (
8185
<TooltipContent
82-
title={`You can only add up to ${domainsLimit} ${pluralize(
83-
"domain",
84-
domainsLimit || 0,
85-
)} on the ${capitalize(plan)} plan. Upgrade to add more domains`}
86+
title={t('limits.upgrade-required-message', { "domainsLimit": domainsLimit, "domainsLimit0": domainsLimit || 0, "capitalizePlan": capitalize(plan) })}
8687
cta="Upgrade"
8788
onClick={() => {
8889
queryParams({
@@ -131,28 +132,24 @@ export function CustomDomains() {
131132
content={
132133
<div className="grid w-screen gap-px p-2 sm:w-fit sm:min-w-[17rem]">
133134
<Button
134-
text="Connect a domain you own"
135+
text={t('buttons.connect-domain')}
135136
variant="outline"
136137
icon={<Globe className="h-4 w-4" />}
137138
className="h-9 justify-start px-2 text-neutral-800"
138139
onClick={() => setShowAddEditDomainModal(true)}
139140
/>
140141
<Button
141142
text={
142-
<div className="flex items-center gap-3">
143-
Claim free .link domain
144-
{plan === "free" ? (
143+
<div className="flex items-center gap-3">{t('buttons.claim-free-link-domain')}{plan === "free" ? (
145144
<Badge
146145
variant="neutral"
147146
className="flex items-center gap-1"
148147
>
149148
<Crown className="size-3" />
150-
<span className="uppercase">Pro</span>
149+
<span className="uppercase">{t('badges.pro-plan')}</span>
151150
</Badge>
152151
) : dotLinkClaimed ? (
153-
<span className="rounded-md border border-green-200 bg-green-500/10 px-1 py-0.5 text-xs text-green-900">
154-
Claimed
155-
</span>
152+
<span className="rounded-md border border-green-200 bg-green-500/10 px-1 py-0.5 text-xs text-green-900">{t('badges.claimed-status')}</span>
156153
) : null}
157154
</div>
158155
}
@@ -172,8 +169,7 @@ export function CustomDomains() {
172169
variant="primary"
173170
className="h-9 w-fit rounded-lg"
174171
text={
175-
<div className="flex items-center gap-2">
176-
Add custom domain{" "}
172+
<div className="flex items-center gap-2">{t('buttons.add-custom-domain')}
177173
<ChevronDown className="size-4 transition-transform duration-75 group-data-[state=open]:rotate-180" />
178174
</div>
179175
}
@@ -207,18 +203,14 @@ export function CustomDomains() {
207203
<div className="flex flex-col items-center gap-4 rounded-xl border border-neutral-200 py-10">
208204
<EmptyState
209205
icon={Globe}
210-
title={
211-
archived
212-
? "No archived domains found"
213-
: "No custom domains found"
214-
}
206+
title={archived ? t('empty-states.no-domains-conditional_0') : t('empty-states.no-domains-conditional_1')}
215207
/>
216208
<AddDomainButton />
217209
</div>
218210
) : (
219211
<AnimatedEmptyState
220-
title="No custom domains found"
221-
description="Use custom domains for better brand recognition and click-through rates"
212+
title={t('empty-states.no-custom-domains')}
213+
description={t('empty-states.custom-domains-description')}
222214
cardContent={
223215
<>
224216
<Globe className="size-4 text-neutral-700" />

0 commit comments

Comments
 (0)