feat(i18n): translate hardcoded article page strings to 5 locales
Deploy to VPS / deploy (push) Has been cancelled

- Add ArticlePage namespace (backToNewsHub, backToNews, mediaGallery,
  joinLinkedIn, internalRelease) to all 5 locale message files
  (en, it, es, de, vec)
- Replace 5 hardcoded English strings in news/[slug]/page.tsx with
  getTranslations() calls

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-06 18:14:46 -05:00
parent cb7458cded
commit c45a5be99e
6 changed files with 47 additions and 11 deletions
+12 -11
View File
@@ -8,7 +8,7 @@ import { prisma } from "@/lib/prisma";
import { ArrowLeft, Calendar, Tag, Linkedin } from "lucide-react";
import BreathingField from "@/components/visuals/BreathingField";
import { setRequestLocale } from "next-intl/server";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { getLocalizedData } from "@/lib/i18nHelper";
import Breadcrumbs from "@/components/seo/Breadcrumbs";
import {
@@ -228,6 +228,7 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
const resolvedParams = await params;
const { slug, locale } = resolvedParams;
setRequestLocale(locale);
const t = await getTranslations({ locale, namespace: "ArticlePage" });
let rawArticle: any = null;
try {
@@ -293,7 +294,7 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
<div className="fixed top-24 left-6 z-50 hidden md:block">
{/* EL BOTÓN DE VOLVER AHORA RESPETA EL IDIOMA */}
<Link href={`/${locale}/news`} className="inline-flex items-center gap-2 text-sm font-medium text-[#86868B] hover:text-[#0066CC] dark:hover:text-[#4DA6FF] transition-colors py-2 px-4 bg-white/50 dark:bg-black/50 backdrop-blur-md rounded-full group shadow-sm border border-black/5 dark:border-white/10">
<ArrowLeft size={16} className="group-hover:-translate-x-1 transition-transform" /> Back to News Hub
<ArrowLeft size={16} className="group-hover:-translate-x-1 transition-transform" /> {t("backToNewsHub")}
</Link>
</div>
@@ -329,7 +330,7 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
{gallery.length > 0 && (
<div className="mt-16 pt-16 border-t border-black/5 dark:border-white/5">
<h3 className="text-xl font-medium mb-8 text-[#1D1D1F] dark:text-white">Media Gallery</h3>
<h3 className="text-xl font-medium mb-8 text-[#1D1D1F] dark:text-white">{t("mediaGallery")}</h3>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
{gallery.map((imgSrc: string, idx: number) => (
<div key={idx} className={`relative rounded-3xl overflow-hidden bg-[#1D1D1F] border border-black/10 dark:border-white/10 ${idx === 0 && gallery.length % 2 !== 0 ? 'sm:col-span-2 h-64 md:h-96' : 'h-48 md:h-64'}`}>
@@ -342,21 +343,21 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
<div className="mt-16 pt-8 border-t border-black/10 dark:border-white/10 flex justify-between items-center">
<Link href={`/${locale}/news`} className="text-[#0066CC] dark:text-[#4DA6FF] font-medium flex items-center gap-2 hover:underline md:hidden">
<ArrowLeft size={16} /> Back to News
<ArrowLeft size={16} /> {t("backToNews")}
</Link>
{article.linkedinUrl ? (
<a
href={article.linkedinUrl}
target="_blank"
rel="noopener noreferrer"
<a
href={article.linkedinUrl}
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-2 text-sm font-semibold text-white bg-[#0A66C2] px-6 py-3 rounded-full hover:bg-[#004182] transition-all shadow-lg shadow-[#0A66C2]/20 ml-auto md:ml-0"
>
<Linkedin size={16} /> Join the conversation on LinkedIn
<Linkedin size={16} /> {t("joinLinkedIn")}
</a>
) : (
<div className="text-xs text-[#86868B] italic hidden md:block">
Internal Corporate Release
{t("internalRelease")}
</div>
)}
</div>