feat(i18n): translate hardcoded article page strings to 5 locales
Deploy to VPS / deploy (push) Has been cancelled
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:
@@ -184,6 +184,13 @@
|
|||||||
"page": "Seite",
|
"page": "Seite",
|
||||||
"of": "von"
|
"of": "von"
|
||||||
},
|
},
|
||||||
|
"ArticlePage": {
|
||||||
|
"backToNewsHub": "Zurück zum News Hub",
|
||||||
|
"backToNews": "Zurück zu Nachrichten",
|
||||||
|
"mediaGallery": "Mediengalerie",
|
||||||
|
"joinLinkedIn": "Diskussion auf LinkedIn beitreten",
|
||||||
|
"internalRelease": "Interne Unternehmensmitteilung"
|
||||||
|
},
|
||||||
"AuthModal": {
|
"AuthModal": {
|
||||||
"b2bPortal": "B2B-Portal",
|
"b2bPortal": "B2B-Portal",
|
||||||
"signIn": "Anmelden",
|
"signIn": "Anmelden",
|
||||||
|
|||||||
@@ -184,6 +184,13 @@
|
|||||||
"page": "Page",
|
"page": "Page",
|
||||||
"of": "of"
|
"of": "of"
|
||||||
},
|
},
|
||||||
|
"ArticlePage": {
|
||||||
|
"backToNewsHub": "Back to News Hub",
|
||||||
|
"backToNews": "Back to News",
|
||||||
|
"mediaGallery": "Media Gallery",
|
||||||
|
"joinLinkedIn": "Join the conversation on LinkedIn",
|
||||||
|
"internalRelease": "Internal Corporate Release"
|
||||||
|
},
|
||||||
"AuthModal": {
|
"AuthModal": {
|
||||||
"b2bPortal": "B2B Portal",
|
"b2bPortal": "B2B Portal",
|
||||||
"signIn": "Sign In",
|
"signIn": "Sign In",
|
||||||
|
|||||||
@@ -184,6 +184,13 @@
|
|||||||
"page": "Página",
|
"page": "Página",
|
||||||
"of": "de"
|
"of": "de"
|
||||||
},
|
},
|
||||||
|
"ArticlePage": {
|
||||||
|
"backToNewsHub": "Volver al News Hub",
|
||||||
|
"backToNews": "Volver a Noticias",
|
||||||
|
"mediaGallery": "Galería de Medios",
|
||||||
|
"joinLinkedIn": "Únete a la conversación en LinkedIn",
|
||||||
|
"internalRelease": "Comunicado Corporativo Interno"
|
||||||
|
},
|
||||||
"AuthModal": {
|
"AuthModal": {
|
||||||
"b2bPortal": "Portal B2B",
|
"b2bPortal": "Portal B2B",
|
||||||
"signIn": "Iniciar Sesión",
|
"signIn": "Iniciar Sesión",
|
||||||
|
|||||||
@@ -184,6 +184,13 @@
|
|||||||
"page": "Pagina",
|
"page": "Pagina",
|
||||||
"of": "di"
|
"of": "di"
|
||||||
},
|
},
|
||||||
|
"ArticlePage": {
|
||||||
|
"backToNewsHub": "Torna al News Hub",
|
||||||
|
"backToNews": "Torna alle Notizie",
|
||||||
|
"mediaGallery": "Galleria Media",
|
||||||
|
"joinLinkedIn": "Partecipa alla conversazione su LinkedIn",
|
||||||
|
"internalRelease": "Comunicato Aziendale Interno"
|
||||||
|
},
|
||||||
"AuthModal": {
|
"AuthModal": {
|
||||||
"b2bPortal": "Portale B2B",
|
"b2bPortal": "Portale B2B",
|
||||||
"signIn": "Accedi",
|
"signIn": "Accedi",
|
||||||
|
|||||||
@@ -184,6 +184,13 @@
|
|||||||
"page": "Pagina",
|
"page": "Pagina",
|
||||||
"of": "de"
|
"of": "de"
|
||||||
},
|
},
|
||||||
|
"ArticlePage": {
|
||||||
|
"backToNewsHub": "Torna al News Hub",
|
||||||
|
"backToNews": "Torna a łe Notissie",
|
||||||
|
"mediaGallery": "Gałeria Media",
|
||||||
|
"joinLinkedIn": "Parteçipa a ła conversassion su LinkedIn",
|
||||||
|
"internalRelease": "Comunicato Aziendałe Interno"
|
||||||
|
},
|
||||||
"AuthModal": {
|
"AuthModal": {
|
||||||
"b2bPortal": "Portal par ditte",
|
"b2bPortal": "Portal par ditte",
|
||||||
"signIn": "Entra chive",
|
"signIn": "Entra chive",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { prisma } from "@/lib/prisma";
|
|||||||
import { ArrowLeft, Calendar, Tag, Linkedin } from "lucide-react";
|
import { ArrowLeft, Calendar, Tag, Linkedin } from "lucide-react";
|
||||||
import BreathingField from "@/components/visuals/BreathingField";
|
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 { getLocalizedData } from "@/lib/i18nHelper";
|
||||||
import Breadcrumbs from "@/components/seo/Breadcrumbs";
|
import Breadcrumbs from "@/components/seo/Breadcrumbs";
|
||||||
import {
|
import {
|
||||||
@@ -228,6 +228,7 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
|
|||||||
const resolvedParams = await params;
|
const resolvedParams = await params;
|
||||||
const { slug, locale } = resolvedParams;
|
const { slug, locale } = resolvedParams;
|
||||||
setRequestLocale(locale);
|
setRequestLocale(locale);
|
||||||
|
const t = await getTranslations({ locale, namespace: "ArticlePage" });
|
||||||
|
|
||||||
let rawArticle: any = null;
|
let rawArticle: any = null;
|
||||||
try {
|
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">
|
<div className="fixed top-24 left-6 z-50 hidden md:block">
|
||||||
{/* EL BOTÓN DE VOLVER AHORA RESPETA EL IDIOMA */}
|
{/* 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">
|
<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>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -329,7 +330,7 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
|
|||||||
|
|
||||||
{gallery.length > 0 && (
|
{gallery.length > 0 && (
|
||||||
<div className="mt-16 pt-16 border-t border-black/5 dark:border-white/5">
|
<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">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
{gallery.map((imgSrc: string, idx: number) => (
|
{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'}`}>
|
<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,7 +343,7 @@ 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">
|
<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">
|
<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>
|
</Link>
|
||||||
|
|
||||||
{article.linkedinUrl ? (
|
{article.linkedinUrl ? (
|
||||||
@@ -352,11 +353,11 @@ export default async function ArticlePage({ params }: { params: Promise<{ slug:
|
|||||||
rel="noopener noreferrer"
|
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"
|
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>
|
</a>
|
||||||
) : (
|
) : (
|
||||||
<div className="text-xs text-[#86868B] italic hidden md:block">
|
<div className="text-xs text-[#86868B] italic hidden md:block">
|
||||||
Internal Corporate Release
|
{t("internalRelease")}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user