Skip to content

Commit e2607ba

Browse files
feat: change the default locale to en
1 parent a39da76 commit e2607ba

33 files changed

Lines changed: 222 additions & 207 deletions

content/i18n-route-map.json

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"home": {
3-
"es": "/",
4-
"en": "/en",
3+
"en": "/",
4+
"es": "/es",
55
"pt": "/pt",
66
"de": "/de",
77
"it": "/it",
@@ -11,8 +11,8 @@
1111
"hu": "/hu"
1212
},
1313
"faq": {
14-
"es": "/preguntas-frecuentes",
15-
"en": "/en/faq",
14+
"en": "/faq",
15+
"es": "/es/preguntas-frecuentes",
1616
"pt": "/pt/perguntas-frequentes",
1717
"de": "/de/haeufige-fragen",
1818
"it": "/it/faq",
@@ -22,8 +22,8 @@
2222
"hu": "/hu/gyakran-ismetelt-kerdesek"
2323
},
2424
"support": {
25-
"es": "/apoya",
26-
"en": "/en/support",
25+
"en": "/support",
26+
"es": "/es/apoya",
2727
"pt": "/pt/apoie",
2828
"de": "/de/unterstuetzen",
2929
"it": "/it/supporto",
@@ -34,8 +34,8 @@
3434
},
3535
"operations": {
3636
"compress": {
37-
"es": "/comprimir",
38-
"en": "/en/compress",
37+
"en": "/compress",
38+
"es": "/es/comprimir",
3939
"pt": "/pt/comprimir",
4040
"de": "/de/komprimieren",
4141
"it": "/it/comprimi",
@@ -45,8 +45,8 @@
4545
"hu": "/hu/tomoriteni"
4646
},
4747
"merge": {
48-
"es": "/unir",
49-
"en": "/en/merge",
48+
"en": "/merge",
49+
"es": "/es/unir",
5050
"pt": "/pt/juntar",
5151
"de": "/de/zusammenfuehren",
5252
"it": "/it/unisci",
@@ -56,8 +56,8 @@
5656
"hu": "/hu/osszefuzni"
5757
},
5858
"split": {
59-
"es": "/dividir",
60-
"en": "/en/split",
59+
"en": "/split",
60+
"es": "/es/dividir",
6161
"pt": "/pt/dividir",
6262
"de": "/de/teilen",
6363
"it": "/it/dividi",
@@ -67,8 +67,8 @@
6767
"hu": "/hu/szetbontas"
6868
},
6969
"extract": {
70-
"es": "/extraer",
71-
"en": "/en/extract",
70+
"en": "/extract",
71+
"es": "/es/extraer",
7272
"pt": "/pt/extrair",
7373
"de": "/de/seiten-extrahieren",
7474
"it": "/it/estrai",
@@ -78,8 +78,8 @@
7878
"hu": "/hu/kivalasztani"
7979
},
8080
"crop": {
81-
"es": "/recortar",
82-
"en": "/en/crop",
81+
"en": "/crop",
82+
"es": "/es/recortar",
8383
"pt": "/pt/recortar",
8484
"de": "/de/zuschneiden",
8585
"it": "/it/ritaglia",
@@ -89,8 +89,8 @@
8989
"hu": "/hu/korulvagas"
9090
},
9191
"rotate": {
92-
"es": "/girar",
93-
"en": "/en/rotate",
92+
"en": "/rotate",
93+
"es": "/es/girar",
9494
"pt": "/pt/girar",
9595
"de": "/de/drehen",
9696
"it": "/it/ruota",
@@ -100,8 +100,8 @@
100100
"hu": "/hu/forgatas"
101101
},
102102
"reorder": {
103-
"es": "/reordenar",
104-
"en": "/en/reorder",
103+
"en": "/reorder",
104+
"es": "/es/reordenar",
105105
"pt": "/pt/reordenar",
106106
"de": "/de/seiten-sortieren",
107107
"it": "/it/riordina",
@@ -111,8 +111,8 @@
111111
"hu": "/hu/atrendezni"
112112
},
113113
"pdfToImages": {
114-
"es": "/convertir-pdf-a-imagenes",
115-
"en": "/en/pdf-to-images",
114+
"en": "/pdf-to-images",
115+
"es": "/es/convertir-pdf-a-imagenes",
116116
"pt": "/pt/pdf-para-imagens",
117117
"de": "/de/pdf-zu-bildern",
118118
"it": "/it/da-pdf-a-immagini",
@@ -122,8 +122,8 @@
122122
"hu": "/hu/pdf-kepekbe"
123123
},
124124
"imagesToPdf": {
125-
"es": "/crear-pdf-desde-imagenes",
126-
"en": "/en/images-to-pdf",
125+
"en": "/images-to-pdf",
126+
"es": "/es/crear-pdf-desde-imagenes",
127127
"pt": "/pt/imagens-para-pdf",
128128
"de": "/de/bilder-zu-pdf",
129129
"it": "/it/da-immagini-a-pdf",
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { ReactNode } from "react";
33
/**
44
* Operations layout — passthrough only.
55
* NavMenu, Footer, FotoLinceBanner, and LocaleProvider are
6-
* already rendered in the parent (es)/layout.tsx.
6+
* already rendered in the parent (en)/layout.tsx.
77
*/
88
export default function OperationsLayout({ children }: { children: ReactNode }) {
99
return <>{children}</>;

src/app/(es)/preguntas-frecuentes/page.tsx renamed to src/app/(en)/faq/page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const LOCALE = DEFAULT_LOCALE;
77

88
export const generateMetadata = createFaqMetadata(LOCALE);
99

10-
export default function EsFaqPage() {
11-
const dictionary = getDictionary(LOCALE);
12-
return <FaqPageContent dictionary={dictionary} />;
10+
export default function EnFaqPage() {
11+
const dictionary = getDictionary(LOCALE);
12+
return <FaqPageContent dictionary={dictionary} />;
1313
}
Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ import { WebVitalsReporter } from "../../components/analytics/WebVitalsReporter"
1212
import CookieBanner from "../../components/CookieBanner";
1313
import { SchemaOrg } from "../../components/SchemaOrg";
1414
import { BreadcrumbSchema } from "../../components/seo/BreadcrumbSchema";
15+
import { localeLabels, DEFAULT_LOCALE, isLocale } from "../../i18n/config";
1516

1617
import { METADATA_BASE, SHARED_ICONS, SHARED_OPEN_GRAPH, SHARED_TWITTER } from "../../lib/metadata-shared";
1718

18-
const LOCALE = "en" as const;
19-
2019
export const metadata = {
2120
metadataBase: METADATA_BASE,
2221
title: "PDFLince - Merge, Compress, Split, and Convert PDFs Online",
2322
description: "Free online PDF tools to merge, compress, split, extract, and convert PDFs. 100% private, local processing in your browser.",
23+
keywords: "merge pdf, compress pdf, split pdf, extract pdf pages, rotate pdf pages, reorder pdf, pdf to images, images to pdf, convert pdf, edit pdf offline",
2424
icons: SHARED_ICONS,
2525
alternates: {
26-
canonical: "https://pdflince.com/en/",
26+
canonical: "https://pdflince.com/",
2727
languages: {
28-
'es-ES': 'https://pdflince.com/',
29-
'es-MX': 'https://pdflince.com/',
30-
'es-CO': 'https://pdflince.com/',
31-
'es-AR': 'https://pdflince.com/',
32-
'es': 'https://pdflince.com/',
33-
'en': 'https://pdflince.com/en/',
34-
'en-US': 'https://pdflince.com/en/',
28+
'es-ES': 'https://pdflince.com/es/',
29+
'es-MX': 'https://pdflince.com/es/',
30+
'es-CO': 'https://pdflince.com/es/',
31+
'es-AR': 'https://pdflince.com/es/',
32+
'es': 'https://pdflince.com/es/',
33+
'en': 'https://pdflince.com/',
34+
'en-US': 'https://pdflince.com/',
3535
'fr': 'https://pdflince.com/fr/',
3636
'fr-FR': 'https://pdflince.com/fr/',
3737
'pt': 'https://pdflince.com/pt/',
@@ -55,23 +55,35 @@ export const metadata = {
5555
images: [{ url: "https://pdflince.com/og-images/og-image-en.png", width: 1409, height: 736, alt: "PDFLince - Private and free PDF processing" }],
5656
title: "PDFLince - Free and Private PDF Tools in Your Browser",
5757
description: "Merge, compress, split, and convert PDFs without uploading files. Secure and 100% private processing.",
58-
url: "https://pdflince.com/en",
58+
url: "https://pdflince.com",
5959
locale: "en_US",
6060
type: "website",
6161
},
6262
twitter: SHARED_TWITTER,
6363
};
6464

65-
export default function EnLayout({ children }: { children: ReactNode }) {
65+
export default async function RootLayout({
66+
children,
67+
params,
68+
}: {
69+
children: ReactNode;
70+
params: Promise<{ locale?: string }>;
71+
}) {
72+
const resolvedParams = await params;
73+
const requestedLocale = resolvedParams?.locale;
74+
const locale = requestedLocale && isLocale(requestedLocale) ? requestedLocale : DEFAULT_LOCALE;
75+
const htmlLang = localeLabels[locale].htmlLang;
76+
6677
return (
67-
<html lang={LOCALE}>
78+
<html lang={htmlLang}>
6879
<head>
80+
<title>{metadata.title}</title>
6981
<GoogleAnalyticsScripts />
7082
<SchemaOrg />
7183
<BreadcrumbSchema />
7284
</head>
7385
<body className={`font-sans ${GeistSans.variable} ${GeistMono.variable}`}>
74-
<LocaleProvider locale={LOCALE}>
86+
<LocaleProvider locale={locale}>
7587
<WebVitalsReporter />
7688
<Suspense fallback={null}>
7789
<GaPageViewTracker />

src/app/de/layout.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ export const metadata = {
2525
alternates: {
2626
canonical: "https://pdflince.com/de/",
2727
languages: {
28-
'es-ES': 'https://pdflince.com/',
29-
'es-MX': 'https://pdflince.com/',
30-
'es-CO': 'https://pdflince.com/',
31-
'es-AR': 'https://pdflince.com/',
32-
'es': 'https://pdflince.com/',
33-
'en': 'https://pdflince.com/en/',
34-
'en-US': 'https://pdflince.com/en/',
28+
'es-ES': 'https://pdflince.com/es/',
29+
'es-MX': 'https://pdflince.com/es/',
30+
'es-CO': 'https://pdflince.com/es/',
31+
'es-AR': 'https://pdflince.com/es/',
32+
'es': 'https://pdflince.com/es/',
33+
'en': 'https://pdflince.com/',
34+
'en-US': 'https://pdflince.com/',
3535
'fr': 'https://pdflince.com/fr/',
3636
'fr-FR': 'https://pdflince.com/fr/',
3737
'pt': 'https://pdflince.com/pt/',
@@ -66,6 +66,7 @@ export default function DeLayout({ children }: { children: ReactNode }) {
6666
return (
6767
<html lang={LOCALE}>
6868
<head>
69+
<title>{metadata.title}</title>
6970
<GoogleAnalyticsScripts />
7071
<SchemaOrg />
7172
<BreadcrumbSchema />

src/app/en/(operations)/[operation]/page.tsx renamed to src/app/es/(operations)/[operation]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createLocaleOperationHandlers } from "../../../(helpers)/operation-handlers";
22

3-
const LOCALE = "en" as const;
3+
const LOCALE = "es" as const;
44

55
const { generateStaticParams, generateMetadata, OperationPage } = createLocaleOperationHandlers(LOCALE);
66

Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { SupportPageContent } from "../../../components/SupportPageContent";
22
import { createSupportMetadata } from "../../(helpers)/locale-metadata";
33

4-
const LOCALE = "en" as const;
4+
const LOCALE = "es" as const;
55

66
export const generateMetadata = createSupportMetadata(LOCALE);
77

8-
export default function EnSupportPage() {
8+
export default function EsSupportPage() {
99
return <SupportPageContent />;
1010
}

0 commit comments

Comments
 (0)