diff --git a/package-lock.json b/package-lock.json index 9984845..d48340a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "dependencies": { "@astrojs/check": "^0.7.0", "@astrojs/sitemap": "^3.1.6", - "@astrojs/starlight": "^0.24.5", + "@astrojs/starlight": "^0.25.0", "@astrojs/starlight-tailwind": "^2.0.3", "@astrojs/tailwind": "^5.1.0", "@astrojs/vercel": "^7.7.2", @@ -18,7 +18,7 @@ "@preline/dropdown": "^2.3.0", "@preline/overlay": "^2.3.0", "@preline/tabs": "^2.3.0", - "astro": "^4.11.3", + "astro": "^4.11.5", "astro-compressor": "^0.4.1", "clipboard": "^2.0.11", "globby": "^14.0.2", @@ -331,9 +331,9 @@ } }, "node_modules/@astrojs/starlight": { - "version": "0.24.5", - "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.24.5.tgz", - "integrity": "sha512-DDI8NpLzk+ReBudhAV09OhO5DxD+KN4Nnp3YlG6kwn/F8fmywNTNgY7VW67Z8aad+A/85OOiQOtq9wIFNRy3YA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.25.0.tgz", + "integrity": "sha512-1T317AsdmMa+EP0tAPZY84G/9Ez79/8G6fHBaUr994GZSaptpr45vlyxyWtxlgIbdlio2EhKaXay4RVqqUKqXw==", "dependencies": { "@astrojs/mdx": "^3.1.0", "@astrojs/sitemap": "^3.1.5", @@ -2179,9 +2179,9 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.9.0.tgz", - "integrity": "sha512-cbSoY8P/jgGByG8UOl3jnP/CWg/Qk+1q+eAKWtcrU3pNoILF8wTsLB0jT44qUBV8Ce1SvA9uqcM9Xf+u3fJFBw==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.1.tgz", + "integrity": "sha512-qdiJS5a/QGCff7VUFIqd0hDdWly9rDp8lhVmXVrS11aazX8LOTRLHAXkkEeONNsS43EcCd7gax9LLoOz4vlFQA==" }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", @@ -2678,9 +2678,9 @@ } }, "node_modules/astro": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.11.3.tgz", - "integrity": "sha512-SuZbB/71XVn+WqWNCe7XOfHuqhS+k4gj8+A3wluTZQrORGaHUFRn/f8F9Tu5yESQZB1q8UKhahvHwkTV3AdVsg==", + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.11.5.tgz", + "integrity": "sha512-TCRhuaLwrxwMhS8S1GG+ZTdrAXigX9C8E/YUTs/r2t+owHxDgwl86IV9xH1IHrCPoqhK6civyAQNOT+GKmkb0A==", "dependencies": { "@astrojs/compiler": "^2.8.1", "@astrojs/internal-helpers": "0.4.1", @@ -2732,13 +2732,13 @@ "prompts": "^2.4.2", "rehype": "^13.0.1", "semver": "^7.6.2", - "shiki": "^1.9.0", - "string-width": "^7.1.0", + "shiki": "^1.10.0", + "string-width": "^7.2.0", "strip-ansi": "^7.1.0", - "tsconfck": "^3.1.0", + "tsconfck": "^3.1.1", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "vite": "^5.3.1", + "vite": "^5.3.2", "vitefu": "^0.2.5", "which-pm": "^2.2.0", "yargs-parser": "^21.1.1", @@ -7098,9 +7098,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "funding": [ { "type": "opencollective", @@ -7117,7 +7117,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -8329,11 +8329,11 @@ } }, "node_modules/shiki": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.9.0.tgz", - "integrity": "sha512-i6//Lqgn7+7nZA0qVjoYH0085YdNk4MC+tJV4bo+HgjgRMJ0JmkLZzFAuvVioJqLkcGDK5GAMpghZEZkCnwxpQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.1.tgz", + "integrity": "sha512-uafV7WCgN4YYrccH6yxpnps6k38sSTlFRrwc4jycWmhWxJIm9dPrk+XkY1hZ2t0I7jmacMNb15Lf2fspa/Y3lg==", "dependencies": { - "@shikijs/core": "1.9.0" + "@shikijs/core": "1.10.1" } }, "node_modules/signal-exit": { @@ -8466,9 +8466,9 @@ } }, "node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -8887,9 +8887,9 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tsconfck": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.0.tgz", - "integrity": "sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz", + "integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==", "bin": { "tsconfck": "bin/tsconfck.js" }, @@ -9200,12 +9200,12 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { diff --git a/package.json b/package.json index b24470d..788bd3c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/check": "^0.7.0", "@astrojs/sitemap": "^3.1.6", - "@astrojs/starlight": "^0.24.5", + "@astrojs/starlight": "^0.25.0", "@astrojs/starlight-tailwind": "^2.0.3", "@astrojs/tailwind": "^5.1.0", "@astrojs/vercel": "^7.7.2", @@ -21,7 +21,7 @@ "@preline/dropdown": "^2.3.0", "@preline/overlay": "^2.3.0", "@preline/tabs": "^2.3.0", - "astro": "^4.11.3", + "astro": "^4.11.5", "astro-compressor": "^0.4.1", "clipboard": "^2.0.11", "globby": "^14.0.2", diff --git a/src/pages/404.astro b/src/pages/404.astro index 323869b..c0e1577 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -4,53 +4,64 @@ import MainLayout from "@/layouts/MainLayout.astro"; import Btn404 from "@components/ui/buttons/Btn404.astro"; import { SITE } from "@data/constants"; +// Define types for translations +type TranslationKeys = 'en' | 'fr'; +type Translations = { + [key in TranslationKeys]: { + pageTitle: string; + subTitle: string; + content: string; + btnTitle: string; + } +}; + // Define variables for page content +const defaultLang: TranslationKeys = "en"; +const translations: Translations = { + en: { + pageTitle: `Page Not Found | ${SITE.title}`, + subTitle: "Oops, this isn't the tool you were looking for!", + content: "Don't let this hiccup slow you down. Let's get you back to building your masterpiece.", + btnTitle: "Go Back", + }, + fr: { + pageTitle: `Page Non Trouvée | ${SITE.title}`, + subTitle: "Oops, ce n'est pas l'outil que vous recherchiez!", + content: "Ne laissez pas ce contretemps vous ralentir. Revenons à la construction de votre chef-d'œuvre.", + btnTitle: "Retournez", + } +}; -const title: string = "404"; +// Determine language from the URL +const urlPath = Astro.url.pathname; +const langCodeMatch = urlPath.match(/^\/(en|fr)\//); +const lang: TranslationKeys = langCodeMatch ? langCodeMatch[1] as TranslationKeys : defaultLang; -const { - subTitle = Astro.currentLocale === "fr" ? "Oops, ce n'est pas l'outil que vous recherchiez!" : "Oops, this isn't the tool you were looking for!", content = Astro.currentLocale === "fr" ? "Ne laissez pas ce contretemps vous ralentir. Revenons à la construction de votre chef-d'œuvre." : "Don't let this hiccup slow you down. Let's get you back to building your masterpiece.", btnTitle = Astro.currentLocale === "fr" ? "Retournez" : "Go Back", - pageTitle = Astro.currentLocale === "fr" ? `Page Non Trouvée | ${SITE.title}` : `Page Not Found | ${SITE.title}` -} = Astro.props; - -interface Props { - pageTitle: string; - subTitle: string; - content: string; - btnTitle: string; -} +const { pageTitle, subTitle, content, btnTitle } = translations[lang]; --- - +
-

- {title} +

+ 404

-

+

{subTitle}

- -

+

{content}

- +
- -