Remplace l'option i18n du plugin sitemap (qui supposait des chemins identiques entre langues) par un serialize custom basé sur getAlternateUrls(). Ajoute le support des routes dynamiques (albums photo, blog posts) via des patterns regex, et l'entrée statique /photo/blog. Toutes les pages traduites ont désormais des hreflang fr/en/ar + x-default corrects dans le sitemap et le HTML.
45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
import { defineConfig } from "astro/config";
|
|
|
|
import sitemap from "@astrojs/sitemap";
|
|
import tailwind from "@astrojs/tailwind";
|
|
import { getAlternateUrls } from "./src/utils/page-translations.ts";
|
|
|
|
// https://astro.build/config
|
|
export default defineConfig({
|
|
site: "https://jalil.arfaoui.net",
|
|
devToolbar: { enabled: false },
|
|
integrations: [
|
|
tailwind(),
|
|
sitemap({
|
|
serialize(item) {
|
|
const url = new URL(item.url);
|
|
const pathname = decodeURIComponent(url.pathname).replace(/\/$/, "") || "/";
|
|
const alternates = getAlternateUrls(pathname);
|
|
if (alternates) {
|
|
const fullUrl = (path) =>
|
|
path === "/" ? `${url.origin}/` : `${url.origin}${path}/`;
|
|
item.links = [
|
|
{ lang: "fr", url: fullUrl(alternates.fr) },
|
|
{ lang: "en", url: fullUrl(alternates.en) },
|
|
{ lang: "ar", url: fullUrl(alternates.ar) },
|
|
{ lang: "x-default", url: fullUrl(alternates.fr) },
|
|
];
|
|
}
|
|
return item;
|
|
},
|
|
}),
|
|
],
|
|
redirects: {
|
|
"/photos": {
|
|
status: 301,
|
|
destination: "https://photos.jalil.arfaoui.net"
|
|
}
|
|
},
|
|
i18n: {
|
|
defaultLocale: "fr",
|
|
locales: ["fr", "en", "ar"],
|
|
routing: {
|
|
prefixDefaultLocale: false
|
|
}
|
|
}
|
|
});
|