From d7e1272d238beac677fbc39f761377688c16b49d Mon Sep 17 00:00:00 2001
From: Phaired <65019388+Phaired@users.noreply.github.com>
Date: Wed, 4 Jun 2025 12:56:50 +0200
Subject: [PATCH 1/2] fix slug generation and build localized project pages
---
src/components/LanguageSwitcher.astro | 6 ++++-
src/content/config.ts | 16 ++++++++++++
src/i18n/ui.ts | 30 -----------------------
src/i18n/utils.ts | 1 -
src/pages/[lang]/blog/[...slug].astro | 2 +-
src/pages/[lang]/blog/index.astro | 2 +-
src/pages/[lang]/projects/[...slug].astro | 2 +-
src/pages/[lang]/projects/index.astro | 2 +-
src/pages/index.astro | 14 +++++++++++
src/pages/rss.xml.js | 2 +-
10 files changed, 40 insertions(+), 37 deletions(-)
create mode 100644 src/pages/index.astro
diff --git a/src/components/LanguageSwitcher.astro b/src/components/LanguageSwitcher.astro
index aa88010..80121c4 100644
--- a/src/components/LanguageSwitcher.astro
+++ b/src/components/LanguageSwitcher.astro
@@ -1,5 +1,9 @@
---
import { getLocalizedPathname, LANGUAGES } from "../i18n/utils";
+const flags = {
+ en: "🇬🇧",
+ fr: "🇫🇷",
+} as const;
interface Props {
lang: string;
}
@@ -11,7 +15,7 @@ const otherLangs = Object.keys(LANGUAGES).filter((l) => l !== lang);
{
otherLangs.map((l) => (
- {l.toUpperCase()}
+ {flags[l]}
))
}
diff --git a/src/content/config.ts b/src/content/config.ts
index d9603b9..5437b13 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -10,9 +10,17 @@ const blog = defineCollection({
updatedDate: z.coerce.date().optional(),
heroImage: z.string().optional(),
heroGif: z.string().optional(),
+ slug: z.string().optional(),
lang: z.string(),
isVisible: z.boolean().default(false),
}),
+ slug: ({ id, data }) =>
+ data.slug ??
+ id
+ .split("/")
+ .pop()
+ ?.replace(/\.mdx?$/, "")
+ ?.replace(/\.fr$/, "") ?? id,
});
const projects = defineCollection({
@@ -25,9 +33,17 @@ const projects = defineCollection({
updatedDate: z.coerce.date().optional(),
heroImage: z.string().optional(),
heroGif: z.string().optional(),
+ slug: z.string().optional(),
lang: z.string(),
isVisible: z.boolean().default(false),
}),
+ slug: ({ id, data }) =>
+ data.slug ??
+ id
+ .split("/")
+ .pop()
+ ?.replace(/\.mdx?$/, "")
+ ?.replace(/\.fr$/, "") ?? id,
});
export const collections = {
diff --git a/src/i18n/ui.ts b/src/i18n/ui.ts
index 1b635d7..0258125 100644
--- a/src/i18n/ui.ts
+++ b/src/i18n/ui.ts
@@ -109,34 +109,4 @@ export const ui = {
"about.server.title": "Informations serveur",
"about.server.text": "Ce site est hébergé sur pulseheberg et la dernière mise à jour réussie date du {0}.",
},
- es: {
- "site.title": "Astro Blog",
- "site.description": "Bienvenido a mi sitio web!",
- "nav.home": "Inicio",
- "nav.about": "Quien soy",
- "home.welcome": "Bienvenido a mi sitio web",
- "about.title": "Sobre mi",
- "about.description": "Soy un desarrollador web y me encanta Astro!",
- "about.text": `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo
- viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam
- adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus
- et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus
- vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque
- sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.`,
- "home.p1": `Bienvenido a la plantilla de inicio de blog oficial. Esta plantilla sirve como punto de partida ligero y con estilo mĂnimo para cualquiera que quiera construir un sitio web personal, un blog o un portafolio con Astro.`,
- "home.p2": `Esta plantilla viene con algunas integraciones ya configuradas en su archivo astro.config.mjs. Puede personalizar su configuraciĂłn con Astro Integrations para agregar herramientas como Tailwind, React o Vue a su proyecto.`,
- "home.p3":
- "AquĂ hay algunas ideas sobre cĂłmo comenzar con la plantilla:",
- "home.p3.0": "Maneje las traducciones en",
- "home.p3.1": "Edite esta página en",
- "home.p3.2": "Editar páginas traducidas en",
- "home.p3.3": "Edite los elementos de encabezado del sitio en",
- "home.p3.4": "Agregue su nombre al pie de página en",
- "home.p3.5":
- "Consulte las publicaciones de blog incluidas en idiomas ES, EN y FR en",
- "home.p3.6": "Personalice el diseño general del sitio en",
- "home.p3.7":
- "Personalice el diseño de la página de publicación del blog en",
- },
} as const;
diff --git a/src/i18n/utils.ts b/src/i18n/utils.ts
index e9df155..08d51d5 100644
--- a/src/i18n/utils.ts
+++ b/src/i18n/utils.ts
@@ -3,7 +3,6 @@ import { ui } from "./ui";
export const LANGUAGES = {
en: "English",
fr: "Français",
- es: "Español",
};
export const DEFAULT_LANG = "en";
diff --git a/src/pages/[lang]/blog/[...slug].astro b/src/pages/[lang]/blog/[...slug].astro
index a9ebdef..da08191 100644
--- a/src/pages/[lang]/blog/[...slug].astro
+++ b/src/pages/[lang]/blog/[...slug].astro
@@ -5,7 +5,7 @@ import Post from "../../../layouts/Post.astro";
export async function getStaticPaths() {
const posts = await getCollection("blog");
return posts.map((post) => ({
- params: { lang: post.data.lang, slug: post.data.slug },
+ params: { lang: post.data.lang, slug: post.slug },
props: post,
}));
}
diff --git a/src/pages/[lang]/blog/index.astro b/src/pages/[lang]/blog/index.astro
index d8e622a..9a7bfa4 100644
--- a/src/pages/[lang]/blog/index.astro
+++ b/src/pages/[lang]/blog/index.astro
@@ -105,7 +105,7 @@ const posts = (await getCollection("blog"))
{
posts.map((post) => (
Redirecting to {redirectUrl}
+ +