fix: adjustments

finxol.io f57dc91b 2b7467a6

verified
Changed files
+45 -33
src
+4 -2
astro.config.mjs
···
adapter: deno(),
integrations: [preact(), icon()],
i18n: {
-
locales: ["en", "fr"],
-
defaultLocale: "fr",
+
locales: /** @type {string[]} */ (
+
/** @type {unknown} */ (config.locales)
+
),
+
defaultLocale: config.defaultLocale,
routing: {
prefixDefaultLocale: false,
},
+7 -24
src/components/pages/index.astro
···
import Layout from "@/layouts/Layout.astro";
import "@/assets/styles/index.css";
import { Icon } from "astro-icon/components";
-
import { projects as projectsMetadata } from "@/data/projects";
+
import { projects } from "@/data/projects";
+
import { locale } from "@/hooks/useLocale.astro";
interface Props {
content: {
···
title: string;
description: string;
};
-
projects: Array<{
-
id: string;
-
name: string;
-
description: string;
-
}>;
};
}
const {
-
content: { intro, languages, blogSection, projectsSection, projects },
+
content: { intro, languages, blogSection, projectsSection },
} = Astro.props;
-
-
// Merge project descriptions with metadata
-
const projectsWithMetadata = projects.map((proj) => {
-
const metadata = projectsMetadata.find((p) => p.id === proj.id);
-
if (!metadata) {
-
throw new Error(`Project metadata not found for id: ${proj.id}`);
-
}
-
return {
-
...metadata,
-
name: proj.name,
-
description: proj.description,
-
};
-
});
---
<Layout>
···
<section class="container content-projects">
{
-
projectsWithMetadata.map((project) => (
+
projects.map((project) => (
<div
class="project"
{...(project.colour && {
···
/>
<img
src={project.imgs.jpg.src}
-
alt={project.name}
+
alt={project.title[locale]}
/>
</picture>
<a href={`/projects/${project.slug}`} class="cover">
-
{project.name}
+
{project.title[locale]}
</a>
-
<p>{project.description}</p>
+
<p>{project.description[locale]}</p>
<ul>
{project.tags.map((tag: string) => (
<li class="tag">{tag}</li>
+2 -2
src/components/pages/project.astro
···
const { content } = Astro.props;
-
const project = projects.find((p) => p.id === content.projectId);
+
const project = projects.find((p) => p.slug === content.projectId);
if (!project) {
throw new Error(`Project not found: ${content.projectId}`);
}
···
</picture>
<div class="container">
-
<Icon name={project.dateIcon} />
+
<Icon name="tabler:brand-git" />
<span>
{content.datePrefix}
{project.startDate.toLocaleDateString(locale)}
+1
src/config.ts
···
export const config = {
defaultLocale: "fr",
+
locales: ["fr", "en"],
domains: {
fr: "https://next.colinozanne.fr",
en: "https://next.colinozanne.co.uk",
+24 -5
src/data/projects.ts
···
import karrWebp from "@/assets/img/karr_demo.webp";
import blogJpg from "@/assets/img/finxol_blog_home.jpg";
import blogWebp from "@/assets/img/finxol_blog_home.webp";
+
import recaroPitchJpg from "@/assets/img/viscircle_recaro_pitch.jpg";
+
import recaroPitchWebp from "@/assets/img/viscircle_recaro_pitch.webp";
+
import { config } from "@/config.ts";
+
+
type Localised = Record<(typeof config.locales)[number], string>;
export interface ProjectMetadata {
-
id: string;
slug: string;
+
title: Localised;
+
description: Localised;
imgs: {
jpg: ImageMetadata;
webp: ImageMetadata;
···
tags: string[];
colour?: string;
startDate: Date;
-
dateIcon: string;
runtime: string;
runtimeIcon: string;
repoUrl: string;
···
export const projects: ProjectMetadata[] = [
{
-
id: "karr",
slug: "karr",
+
title: {
+
fr: "Karr",
+
en: "Karr",
+
},
+
description: {
+
fr: "Plateforme de covoiturage fédérée pour les entreprises",
+
en: "Federated carpool platform for businesses",
+
},
imgs: {
jpg: karrJpg,
webp: karrWebp,
},
tags: ["Next.js", "Hono", "OpenAuth", "CI"],
startDate: new Date("10 October 2024"),
-
dateIcon: "tabler:brand-git",
runtime: "NodeJS",
runtimeIcon: "tabler:brand-nodejs",
repoUrl: "https://github.com/karr-mobi/karr",
repoIcon: "tabler:brand-github",
},
{
-
id: "blog",
slug: "blog",
+
title: {
+
fr: "Blog Technique",
+
en: "Technical Blog",
+
},
+
description: {
+
fr:
+
"Blog personnel technique sur lequel j'écris des articles sur la technologie",
+
en: "Technical blog where I write articles about technology",
+
},
imgs: {
jpg: blogJpg,
webp: blogWebp,
+7
src/hooks/useLocale.astro
···
+
---
+
import { config } from "@/config";
+
+
export type Locale = (typeof config.locales)[number];
+
+
export const locale = (Astro.currentLocale as Locale) || config.defaultLocale;
+
---