From d41a01a4a1de55ca4a99e61fa7e69bdbff34ba30 Mon Sep 17 00:00:00 2001 From: Jalil Arfaoui Date: Sat, 4 Jan 2025 23:18:06 +0100 Subject: [PATCH] supprime i18n, starlight, blog --- src/pages/blog/[id].astro | 158 ----------- src/pages/blog/index.astro | 118 -------- src/pages/fr/blog/[...slug].astro | 163 ----------- src/pages/fr/blog/[id].astro | 163 ----------- src/pages/fr/blog/index.astro | 116 -------- src/pages/fr/contact.astro | 30 -- src/pages/fr/index.astro | 144 ---------- src/pages/fr/insights/[...slug].astro | 266 ------------------ src/pages/fr/insights/[id].astro | 266 ------------------ src/pages/fr/products/[...slug].astro | 391 -------------------------- src/pages/fr/products/[id].astro | 391 -------------------------- src/pages/fr/products/index.astro | 138 --------- src/pages/fr/services.astro | 181 ------------ 13 files changed, 2525 deletions(-) delete mode 100644 src/pages/blog/[id].astro delete mode 100644 src/pages/blog/index.astro delete mode 100644 src/pages/fr/blog/[...slug].astro delete mode 100644 src/pages/fr/blog/[id].astro delete mode 100644 src/pages/fr/blog/index.astro delete mode 100644 src/pages/fr/contact.astro delete mode 100644 src/pages/fr/index.astro delete mode 100644 src/pages/fr/insights/[...slug].astro delete mode 100644 src/pages/fr/insights/[id].astro delete mode 100644 src/pages/fr/products/[...slug].astro delete mode 100644 src/pages/fr/products/[id].astro delete mode 100644 src/pages/fr/products/index.astro delete mode 100644 src/pages/fr/services.astro diff --git a/src/pages/blog/[id].astro b/src/pages/blog/[id].astro deleted file mode 100644 index 4080462..0000000 --- a/src/pages/blog/[id].astro +++ /dev/null @@ -1,158 +0,0 @@ ---- -// Import necessary components and utilities -import MainLayout from "@/layouts/MainLayout.astro"; -import AvatarBlogLarge from "@components/ui/avatars/AvatarBlogLarge.astro"; -import CardRelated from "@components/ui/cards/CardRelated.astro"; -import Bookmark from "@components/ui/buttons/Bookmark.astro"; -import SocialShare from "@components/ui/buttons/SocialShare.astro"; -import PostFeedback from "@components/ui/feedback/PostFeedback.astro"; -import { Image } from "astro:assets"; -import { capitalize, formatDate } from "@utils/utils"; -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; -import { SITE } from "@data/constants"; - -// Update getStaticPaths for English posts -export async function getStaticPaths() { - const blogPosts = await getCollection("blog", ({ id }) => - id.startsWith("en/") - ); - return blogPosts.map((post) => { - const idWithoutLang = post.id.replace(/^en\//, ""); // Remove the "en/" prefix - return { - params: { id: idWithoutLang }, - props: { post }, - }; - }); -} - -// Get the current post's data -const { post } = Astro.props; - -const blogPosts: CollectionEntry<"blog">[] = await getCollection( - "blog", - ({ id }) => id.startsWith("en/") -); - -// Filter out the current post to get related posts -// Note: This is a very basic way of choosing related posts, just for the purpose of the example. -// In a production site, you might want to implement a more robust algorithm, choosing related posts based on tags, categories, dates, authors, or keywords. -// See example: https://blog.codybrunner.com/2024/adding-related-articles-with-astro-content-collections/ -const relatedPosts: CollectionEntry<"blog">[] = blogPosts.filter( - (blogEntry) => blogEntry.id !== post.id -); - -const pageTitle: string = `${post.data.title} | ${SITE.title}`; ---- - - -
-
-
-
- -
-
-
- - - {post.data.author} - -
    -
  • - {formatDate(post.data.pubDate)} -
  • -
  • - {post.data.readTime} min read -
  • -
-
-
-
-
-
- -

- {post.data.title} -

- -
- { - post.data.contents.map((content: string, index: any) => - index === 1 ? ( - <> -

- {content} -

- {post.data.cardImageAlt} - - ) : ( -

- {content} -

- ) - ) - } -
-
- -
- { - post.data.tags?.map((tag: string) => ( - - {capitalize(tag)} - - )) - } -
- -
- -
-
-
- -
-
-
-
- -
- - -
-
-

- Related articles -

-
- -
- {relatedPosts.map((entry) => )} -
-
-
diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro deleted file mode 100644 index 26879f0..0000000 --- a/src/pages/blog/index.astro +++ /dev/null @@ -1,118 +0,0 @@ ---- -// Import necessary components, modules and types -import MainLayout from "@/layouts/MainLayout.astro"; -import CardBlog from "@components/ui/cards/CardBlog.astro"; -import CardBlogRecent from "@components/ui/cards/CardBlogRecent.astro"; -import CardInsight from "@components/ui/cards/CardInsight.astro"; -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; -import { SITE } from "@data/constants"; - -// Get all blogs post in English and sort them based on publish date - -const englishBlogEntries = await getCollection("blog", ({ id }) => { - return id.startsWith("en/"); -}); - -const englishInsightsEntries = await getCollection("insights", ({ id }) => { - return id.startsWith("en/"); -}); - -const blogPosts: CollectionEntry<"blog">[] = englishBlogEntries.sort( - (a: CollectionEntry<"blog">, b: CollectionEntry<"blog">) => - b.data.pubDate.valueOf() - a.data.pubDate.valueOf() -); -// Get all insights posts -const insightPosts: CollectionEntry<"insights">[] = englishInsightsEntries; - -// Separate the most recent post from others -const mostRecentPost: CollectionEntry<"blog"> = blogPosts[0]; -const otherPosts: CollectionEntry<"blog">[] = blogPosts.slice(1); - -// Define variables for page content -const title: string = "Your Gateway to Construction Excellence"; -const subTitle: string = - "Explore the latest news, tips, and insights from ScrewFast to enhance your construction projects. From product spotlights to project management strategies, our blog is your go-to resource for all things hardware and construction."; -const secondTitle: string = "Insights"; -const secondSubTitle: string = - "Stay up-to-date with the latest trends and developments in the construction industry with insights from ScrewFast's team of industry experts. "; - -const pageTitle: string = `Blog | ${SITE.title}`; ---- - - -
- -
-

- {title} -

- -

- {subTitle} -

-
-
- -
- -
- {otherPosts.map((blogEntry) => )} -
-
- -
- -
- -
-
-

- {secondTitle} -

-

- {secondSubTitle} -

-
-
- { - insightPosts.map((insightEntry) => ( - - )) - } -
-
-
diff --git a/src/pages/fr/blog/[...slug].astro b/src/pages/fr/blog/[...slug].astro deleted file mode 100644 index 4a73cc9..0000000 --- a/src/pages/fr/blog/[...slug].astro +++ /dev/null @@ -1,163 +0,0 @@ ---- -// Import necessary components and utilities -import MainLayout from "@/layouts/MainLayout.astro"; -import AvatarBlogLarge from "@components/ui/avatars/AvatarBlogLarge.astro"; -import CardRelated from "@components/ui/cards/CardRelated.astro"; -import Bookmark from "@components/ui/buttons/Bookmark.astro"; -import SocialShare from "@components/ui/buttons/SocialShare.astro"; -import PostFeedback from "@components/ui/feedback/PostFeedback.astro"; -import { Image } from "astro:assets"; -import { capitalize, formatDate } from "@utils/utils"; -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; -import { SITE } from "@data/constants"; - -// Update getStaticPaths for French posts -export async function getStaticPaths() { - const blogPosts = await getCollection("blog", ({ id }) => - id.startsWith("fr/") - ); - return blogPosts.map((post) => { - const idWithoutLang = post.id.replace(/^fr\//, ""); // Remove the "fr/" prefix - return { - params: { lang: "fr", id: idWithoutLang }, - props: { post }, - }; - }); -} - -const { post } = Astro.props; - -// Fetch related posts -const blogPosts: CollectionEntry<"blog">[] = await getCollection( - "blog", - ({ id }) => id.startsWith("fr/") -); -const relatedPosts: CollectionEntry<"blog">[] = blogPosts.filter( - (blogEntry) => blogEntry.id !== post.id -); - -const pageTitle: string = `${post.data.title} | ${SITE.title}`; ---- - - -
-
-
-
- -
-
-
-
- - - {post.data.author} - -
-
    -
  • - {formatDate(post.data.pubDate)} -
  • -
  • - {post.data.readTime} min read -
  • -
-
-
-
-
-
- -

- {post.data.title} -

- -
- { - post.data.contents.map((content: string, index: any) => - index === 1 ? ( - <> -

- {content} -

- {post.data.cardImageAlt} - - ) : ( -

- {content} -

- ) - ) - } -
-
- -
- { - post.data.tags?.map((tag: string, index) => ( - - {capitalize(tag)} - - )) - } -
- -
- -
-
-
- -
-
-
-
- -
- - -
-
-

- Articles connexes -

-
- -
- { - relatedPosts.map((entry) => ( - - )) - } -
-
-
diff --git a/src/pages/fr/blog/[id].astro b/src/pages/fr/blog/[id].astro deleted file mode 100644 index 4a73cc9..0000000 --- a/src/pages/fr/blog/[id].astro +++ /dev/null @@ -1,163 +0,0 @@ ---- -// Import necessary components and utilities -import MainLayout from "@/layouts/MainLayout.astro"; -import AvatarBlogLarge from "@components/ui/avatars/AvatarBlogLarge.astro"; -import CardRelated from "@components/ui/cards/CardRelated.astro"; -import Bookmark from "@components/ui/buttons/Bookmark.astro"; -import SocialShare from "@components/ui/buttons/SocialShare.astro"; -import PostFeedback from "@components/ui/feedback/PostFeedback.astro"; -import { Image } from "astro:assets"; -import { capitalize, formatDate } from "@utils/utils"; -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; -import { SITE } from "@data/constants"; - -// Update getStaticPaths for French posts -export async function getStaticPaths() { - const blogPosts = await getCollection("blog", ({ id }) => - id.startsWith("fr/") - ); - return blogPosts.map((post) => { - const idWithoutLang = post.id.replace(/^fr\//, ""); // Remove the "fr/" prefix - return { - params: { lang: "fr", id: idWithoutLang }, - props: { post }, - }; - }); -} - -const { post } = Astro.props; - -// Fetch related posts -const blogPosts: CollectionEntry<"blog">[] = await getCollection( - "blog", - ({ id }) => id.startsWith("fr/") -); -const relatedPosts: CollectionEntry<"blog">[] = blogPosts.filter( - (blogEntry) => blogEntry.id !== post.id -); - -const pageTitle: string = `${post.data.title} | ${SITE.title}`; ---- - - -
-
-
-
- -
-
-
-
- - - {post.data.author} - -
-
    -
  • - {formatDate(post.data.pubDate)} -
  • -
  • - {post.data.readTime} min read -
  • -
-
-
-
-
-
- -

- {post.data.title} -

- -
- { - post.data.contents.map((content: string, index: any) => - index === 1 ? ( - <> -

- {content} -

- {post.data.cardImageAlt} - - ) : ( -

- {content} -

- ) - ) - } -
-
- -
- { - post.data.tags?.map((tag: string, index) => ( - - {capitalize(tag)} - - )) - } -
- -
- -
-
-
- -
-
-
-
- -
- - -
-
-

- Articles connexes -

-
- -
- { - relatedPosts.map((entry) => ( - - )) - } -
-
-
diff --git a/src/pages/fr/blog/index.astro b/src/pages/fr/blog/index.astro deleted file mode 100644 index 522fff5..0000000 --- a/src/pages/fr/blog/index.astro +++ /dev/null @@ -1,116 +0,0 @@ ---- -// Import necessary components, modules and types -import MainLayout from "@/layouts/MainLayout.astro"; -import CardBlog from "@components/ui/cards/CardBlog.astro"; -import CardBlogRecent from "@components/ui/cards/CardBlogRecent.astro"; -import CardInsight from "@components/ui/cards/CardInsight.astro"; -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; -import { SITE } from "@data/constants"; - -// Get all blogs post in French and sort them based on publish date - -const frenchBlogEntries = await getCollection("blog", ({ id }) => { - return id.startsWith("fr/"); -}); - -const frenchInsightsEntries = await getCollection("insights", ({ id }) => { - return id.startsWith("fr/"); -}); - -const blogPosts: CollectionEntry<"blog">[] = frenchBlogEntries.sort( - (a: CollectionEntry<"blog">, b: CollectionEntry<"blog">) => - b.data.pubDate.valueOf() - a.data.pubDate.valueOf(), -); -// Get all insights posts -const insightPosts: CollectionEntry<"insights">[] = frenchInsightsEntries; - -// Separate the most recent post from others -const mostRecentPost: CollectionEntry<"blog"> = blogPosts[0]; -const otherPosts: CollectionEntry<"blog">[] = blogPosts.slice(1); - -// Define variables for page content -const title: string = "Votre Passerelle vers l'Excellence en Construction"; -const subTitle: string = - "Explorez les dernières actualités, astuces et analyses de ScrewFast pour améliorer vos projets de construction. Des mises en avant de produits aux stratégies de gestion de projet, notre blog est votre ressource incontournable pour tout ce qui concerne les outils et la construction."; -const secondTitle: string = "Perspectives"; -const secondSubTitle: string = - "Restez à jour avec les dernières tendances et évolutions de l'industrie de la construction grâce aux analyses de l'équipe d'experts de ScrewFast."; - -const pageTitle: string = `Blog | ${SITE.title}`; ---- - - -
- -
-

- {title} -

- -

- {subTitle} -

-
-
- -
- -
- {otherPosts.map((blogEntry) => )} -
-
- -
- -
- -
-
-

- {secondTitle} -

-

- {secondSubTitle} -

-
-
- { - insightPosts.map((insightEntry) => ( - - )) - } -
-
-
diff --git a/src/pages/fr/contact.astro b/src/pages/fr/contact.astro deleted file mode 100644 index 8a95c40..0000000 --- a/src/pages/fr/contact.astro +++ /dev/null @@ -1,30 +0,0 @@ ---- -// Import the necessary components -import MainLayout from "@/layouts/MainLayout.astro"; -import ContactSection from "@components/sections/fr/ContactSection_fr.astro"; ---- - - - - - diff --git a/src/pages/fr/index.astro b/src/pages/fr/index.astro deleted file mode 100644 index c99e733..0000000 --- a/src/pages/fr/index.astro +++ /dev/null @@ -1,144 +0,0 @@ ---- -// Import the necessary components -import MainLayout from "@/layouts/MainLayout.astro"; -import HeroSection from "@components/sections/landing/HeroSection.astro"; -import HeroSectionAlt from "@components/sections/landing/HeroSectionAlt.astro"; -import ClientsSection from "@components/sections/landing/ClientsSection.astro"; -import FeaturesGeneral from "@components/sections/features/FeaturesGeneral.astro"; -import FeaturesNavs from "@components/sections/features/FeaturesNavs.astro"; -import TestimonialsSection from "@components/sections/testimonials/TestimonialsSection.astro"; -import PricingSection from "@components/sections/pricing/PricingSection.astro"; -import FAQ from "@components/sections/misc/FAQ.astro"; -import AnnouncementBanner from "@components/ui/banners/AnnouncementBanner.astro"; -import heroImage from "@images/hero-image.avif"; -import faqs from "@data/fr/faqs.json"; -import features from "@data/fr/features.json"; -import pricing from "@data/fr/pricing.json"; -import featureImage from "@images/features-image.avif"; -import construction from "@images/construction-image.avif"; -import tools from "@images/automated-tools.avif"; -import dashboard from "@images/dashboard-image.avif"; - -const avatarSrcs: Array = [ - "https://images.unsplash.com/photo-1568602471122-7832951cc4c5?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", - "https://images.unsplash.com/photo-1531927557220-a9e23c1e4794?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", - "https://images.unsplash.com/photo-1541101767792-f9b2b1c4f127?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&&auto=format&fit=facearea&facepad=3&w=300&h=300&q=80", - "https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=facearea&facepad=2&w=300&h=300&q=80", -]; ---- - - - - - ScrewFast` - subTitle="Outils matériels de haute qualité et services de construction experts pour tous les besoins en projet." - primaryBtn="Commencez à explorer" - primaryBtnURL="/products" - secondaryBtn="Contacter l'équipe commerciale" - secondaryBtnURL="/contact" - withReview={true} - avatars={avatarSrcs} - rating=`4.8 / 5` - starCount={4} - reviews=`À partir de plus de 12,8k avis` - src={heroImage} - alt="Pile de boîtes de produits ScrewFast contenant des outils matériels assortis" - /> - - - - - - ScrewFast pour répondre parfaitement à vos besoins en matériel et en construction.` - tabs={[ - { - heading: "Outils de pointe", - content: - "Optimisez vos projets avec les outils de pointe de ScrewFast. Faites l'expérience d'une efficacité accrue dans la gestion de la construction avec nos solutions automatisées sophistiquées.", - svg: "tools", - src: tools, - alt: "Équipement lourd jaune et noir sur un champ d'herbe brune", - first: true, - }, - { - heading: "Tableaux de bord intuitifs", - content: - "Naviguez facilement avec les tableaux de bord intuitifs de ScrewFast. Configurez et supervisez vos projets de manière transparente, avec des interfaces conviviales conçues pour une gestion efficace des flux de travail rapide et efficace.", - svg: "dashboard", - src: dashboard, - alt: "Capture d'écran ou représentation graphique du tableau de bord intuitif", - second: true, - }, - { - heading: "Fonctionnalités robustes", - content: - "Minimisez la complexité, maximisez la productivité. Les fonctionnalités robustes de ScrewFast sont conçues pour rationaliser votre processus de construction, offrant des résultats qui se distinguent par leur excellence.", - svg: "house", - src: construction, - alt: "Structure métallique grise d'un bâtiment près d'une grue à tour pendant la journée", - }, - ]} - /> - - - - - - - - - diff --git a/src/pages/fr/insights/[...slug].astro b/src/pages/fr/insights/[...slug].astro deleted file mode 100644 index 26362e4..0000000 --- a/src/pages/fr/insights/[...slug].astro +++ /dev/null @@ -1,266 +0,0 @@ ---- -// Import section components -import { SITE } from "@data/constants"; -import MainLayout from "@/layouts/MainLayout.astro"; -import { Image } from "astro:assets"; -import { getCollection, render } from "astro:content"; - -// Use `getStaticPaths` to generate static routes for generated pages on build -export async function getStaticPaths() { - const insightPosts = await getCollection("insights", ({ id }) => id.startsWith("fr/")); - return insightPosts.map((post) => { - const idWithoutLang = post.id.replace(/^fr\//, ''); // Remove the "fr/" prefix - return { - params: { lang: 'fr', id: idWithoutLang }, - props: { post }, - }; - }); -} - -// Get the props for this page that define a specific insight post -const { post } = Astro.props; - -const { Content } = await render(post); - -const pageTitle: string = `${post.data.title} | ${SITE.title}`; ---- - - -
-
-
-
-
- {post.data.cardImageAlt} -
-
-
- -
- -
-

- {post.data.title} -

- -
- -
-
-
-
-
-
- - - - - diff --git a/src/pages/fr/insights/[id].astro b/src/pages/fr/insights/[id].astro deleted file mode 100644 index 26362e4..0000000 --- a/src/pages/fr/insights/[id].astro +++ /dev/null @@ -1,266 +0,0 @@ ---- -// Import section components -import { SITE } from "@data/constants"; -import MainLayout from "@/layouts/MainLayout.astro"; -import { Image } from "astro:assets"; -import { getCollection, render } from "astro:content"; - -// Use `getStaticPaths` to generate static routes for generated pages on build -export async function getStaticPaths() { - const insightPosts = await getCollection("insights", ({ id }) => id.startsWith("fr/")); - return insightPosts.map((post) => { - const idWithoutLang = post.id.replace(/^fr\//, ''); // Remove the "fr/" prefix - return { - params: { lang: 'fr', id: idWithoutLang }, - props: { post }, - }; - }); -} - -// Get the props for this page that define a specific insight post -const { post } = Astro.props; - -const { Content } = await render(post); - -const pageTitle: string = `${post.data.title} | ${SITE.title}`; ---- - - -
-
-
-
-
- {post.data.cardImageAlt} -
-
-
- -
- -
-

- {post.data.title} -

- -
- -
-
-
-
-
-
- - - - - diff --git a/src/pages/fr/products/[...slug].astro b/src/pages/fr/products/[...slug].astro deleted file mode 100644 index 461113d..0000000 --- a/src/pages/fr/products/[...slug].astro +++ /dev/null @@ -1,391 +0,0 @@ ---- -// Import section components -import MainLayout from "@/layouts/MainLayout.astro"; -import ProductTabBtn from "@components/ui/buttons/ProductTabBtn.astro"; -import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; -import { Image } from "astro:assets"; -import { getCollection } from "astro:content"; -import { SITE } from "@data/constants"; - -// Global declaration for gsap animation library -declare global { - interface Window { - gsap: any; - } -} -// This gets the static paths for all the unique products - -export async function getStaticPaths() { - const productEntries = await getCollection("products", ({ id }) => - id.startsWith("fr/") - ); - return productEntries.map((product) => { - const idWithoutLang = product.id.replace(/^fr\//, ""); // Remove the "fr/" prefix - return { - params: { lang: "fr", id: idWithoutLang }, - props: { product }, - }; - }); -} - -const { product } = Astro.props; - -const pageTitle: string = `${product.data.title} | ${SITE.title}`; ---- - - -
-
- -
-
-

- {product.data.main.content} -

-
-
-
-

- {product.data.title} -

-

- {product.data.description} -

-
-
- {product.data.main.imgAlt} -
-
-
- -
- - -
-
-
-
-
-

- {product.data.longDescription.title} -

-

- {product.data.longDescription.subTitle} -

-

- -

-
- -
- { - product.data.descriptionList.map((list) => ( -
-
-

- {list.title} -

-

- {list.subTitle} -

-
-
- )) - } -
-
-
-
- - -
-
- - -
- - - diff --git a/src/pages/fr/products/[id].astro b/src/pages/fr/products/[id].astro deleted file mode 100644 index 461113d..0000000 --- a/src/pages/fr/products/[id].astro +++ /dev/null @@ -1,391 +0,0 @@ ---- -// Import section components -import MainLayout from "@/layouts/MainLayout.astro"; -import ProductTabBtn from "@components/ui/buttons/ProductTabBtn.astro"; -import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; -import { Image } from "astro:assets"; -import { getCollection } from "astro:content"; -import { SITE } from "@data/constants"; - -// Global declaration for gsap animation library -declare global { - interface Window { - gsap: any; - } -} -// This gets the static paths for all the unique products - -export async function getStaticPaths() { - const productEntries = await getCollection("products", ({ id }) => - id.startsWith("fr/") - ); - return productEntries.map((product) => { - const idWithoutLang = product.id.replace(/^fr\//, ""); // Remove the "fr/" prefix - return { - params: { lang: "fr", id: idWithoutLang }, - props: { product }, - }; - }); -} - -const { product } = Astro.props; - -const pageTitle: string = `${product.data.title} | ${SITE.title}`; ---- - - -
-
- -
-
-

- {product.data.main.content} -

-
-
-
-

- {product.data.title} -

-

- {product.data.description} -

-
-
- {product.data.main.imgAlt} -
-
-
- -
- - -
-
-
-
-
-

- {product.data.longDescription.title} -

-

- {product.data.longDescription.subTitle} -

-

- -

-
- -
- { - product.data.descriptionList.map((list) => ( -
-
-

- {list.title} -

-

- {list.subTitle} -

-
-
- )) - } -
-
-
-
- - -
-
- - -
- - - diff --git a/src/pages/fr/products/index.astro b/src/pages/fr/products/index.astro deleted file mode 100644 index ce17a62..0000000 --- a/src/pages/fr/products/index.astro +++ /dev/null @@ -1,138 +0,0 @@ ---- -// Importing necessary components -import MainLayout from "@/layouts/MainLayout.astro"; -import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro"; -import CardSmall from "@components/ui/cards/CardSmall.astro"; -import CardWide from "@components/ui/cards/CardWide.astro"; -import FeaturesStatsAlt from "@components/sections/features/FeaturesStatsAlt.astro"; -import TestimonialsSectionAlt from "@components/sections/testimonials/TestimonialsSectionAlt.astro"; - -// Importing necessary functions from Astro -import { getCollection } from "astro:content"; -import type { CollectionEntry } from "astro:content"; - -// Fetching all the product related content and sorting it by main.id -const product: CollectionEntry<"products">[] = ( - await getCollection("products", ({ id }) => { - return id.startsWith("fr/"); - }) -).sort( - (a: CollectionEntry<"products">, b: CollectionEntry<"products">) => - a.data.main.id - b.data.main.id -); - -// Define variables for page content -const title: string = "Produits"; -const subTitle: string = - "Explorez la durabilité et la précision des outils ScrewFast, conçus aussi bien pour les professionnels que pour les amateurs. Chacun de nos produits est fabriqué avec précision et conçu pour durer, garantissant que vous disposez du bon outil pour chaque tâche."; - -// Testimonial data that will be rendered in the component -const testimonials = [ - { - content: - "Depuis que nous avons adopté les outils matériels de ScrewFast, l'efficacité sur nos chantiers de construction a explosé. La durabilité des boulons hexagonaux et la précision des vis machine sont tout simplement inégalées. C'est rafraîchissant de travailler avec une entreprise qui comprend vraiment les exigences quotidiennes de l'industrie.", - author: "Jason Clark", - role: "Contremaître de chantier | TopBuild", - avatarSrc: - "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", - avatarAlt: "Description de l'image", - }, - - { - content: - "En tant que designer d'intérieur, je suis toujours à la recherche de matériaux et d'outils de haute qualité qui m'aident à donner vie à mes visions. L'assortiment de vis mixtes de ScrewFast a révolutionné mes projets, offrant le mélange parfait de qualité et de variété. Le support client exceptionnel était la cerise sur le gâteau !", - author: "Maria Gonzalez", - role: "Designer d'intérieur | Creative Spaces", - avatarSrc: - "https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=1376&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", - avatarAlt: "Description de l'image", - }, - - { - content: - "Je suis menuisier professionnel depuis plus de 15 ans, et je peux sincèrement dire que les boulons et écrous à tarauder de ScrewFast sont parmi les meilleurs que j'ai utilisés. Ils adhèrent comme aucun autre, et j'ai une confiance totale dans chaque joint et élément. De plus, le service est impeccable - ils se soucient vraiment du succès de mon projet.", - author: "Richard Kim", - role: "Menuisier-Maître | WoodWright", - avatarSrc: - "https://images.unsplash.com/photo-1474176857210-7287d38d27c6?q=80&w=1470&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80", - avatarAlt: "Description de l'image", - }, -]; ---- - - -
-
-
-

- {title} -

- { - subTitle && ( - - ) - } -
- -
- - -
- { - product.map((product, index) => { - const position = index % 4; - if (position === 0 || position === 3) { - return ; - } else { - return ; - } - }) - } -
-
- - - - -
diff --git a/src/pages/fr/services.astro b/src/pages/fr/services.astro deleted file mode 100644 index 6a60ca7..0000000 --- a/src/pages/fr/services.astro +++ /dev/null @@ -1,181 +0,0 @@ ---- -// Import necessary components -import MainLayout from "@/layouts/MainLayout.astro"; -import MainSection from "@components/ui/blocks/MainSection.astro"; -import LeftSection from "@components/ui/blocks/LeftSection.astro"; -import RightSection from "@components/ui/blocks/RightSection.astro"; -import FeaturesStats from "@components/sections/features/FeaturesStats.astro"; - -// Import necessary images -import blueprints from "@images/blueprints-image.avif"; -import personWorking from "@images/person-working.avif"; -import beforeAfter from "@images/before-after.avif"; -import constructionWorkers from "@images/construction-workers.avif"; -import aerialView from "@images/aerial-view.avif"; -import usingTools from "@images/using-tools.avif"; -import progressBuilding from "@images/progress-building.avif"; -import underConstruction from "@images/under-construction.avif"; - -interface Article { - isRightSection: boolean; - title: string; - subTitle: string; - btnExists?: boolean; - btnTitle?: string; - btnURL?: string; - single?: boolean; - img?: any; - imgAlt?: string; - imgOne?: any; - imgOneAlt?: string; - imgTwo?: any; - imgTwoAlt?: string; -} - -const articles: Article[] = [ - { - isRightSection: true, - title: "Fournir des conseils d'experts", - subTitle: - "Se lancer dans un projet de construction peut être accablant. Avec nos services de consultation professionnelle, nous vous guidons à chaque étape, en veillant à ce que vous preniez des décisions éclairées. Que vous soyez un passionné du bricolage ou un entrepreneur qualifié, nos experts sont là pour vous offrir des conseils sur mesure sur la sélection de produits, l'envergure du projet et la conformité aux réglementations locales.", - single: false, - imgOne: blueprints, - imgOneAlt: "Plans et tablette numérique avec des plans de construction.", - imgTwo: personWorking, - imgTwoAlt: "Personne travaillant au bureau", - }, - { - isRightSection: false, - title: "Transformer les conceptions en réalité", - subTitle: - "Nos artisans qualifiés apportent précision et excellence à chaque projet de construction. Des installations mineures aux travaux structuraux substantiels, ScrewFast offre des services de construction fiables pour concrétiser vos plans. Nous assurons les normes les plus élevées de sécurité et de savoir-faire, en utilisant des outils et des matériaux de haute qualité de notre vaste inventaire.", - img: beforeAfter, - imgAlt: "Chantier de construction avant et après", - btnExists: true, - btnTitle: "En savoir plus", - btnURL: "#", - }, - { - isRightSection: true, - title: "Naviguer dans les projets avec une supervision professionnelle", - subTitle: - "La gestion de projet efficace est au cœur de toute construction réussie. ScrewFast offre une planification approfondie et des services de gestion solides qui maintiennent votre projet dans les délais et dans le budget. Laissez-nous gérer les complexités de la coordination des flux de travail, de l'allocation des ressources et de la communication avec les parties prenantes pendant que vous vous concentrez sur votre vision.", - single: false, - imgOne: constructionWorkers, - imgOneAlt: "Ouvriers du bâtiment orchestrant un projet", - imgTwo: aerialView, - imgTwoAlt: "Vue aérienne d'une construction gérée", - }, - { - isRightSection: false, - title: "Garantir des performances durables", - subTitle: - "Notre engagement envers votre projet ne s'arrête pas à son achèvement. ScrewFast propose des services de maintenance et de support continus pour assurer la longévité et les performances de votre construction. Des vérifications régulières à l'assistance en cas d'urgence, notre équipe réactive est là pour vous fournir un soutien sans faille.", - img: usingTools, - imgAlt: - "Homme en gilet orange et noir portant un casque blanc tenant un outil électrique jaune et noir", - }, - { - isRightSection: true, - title: "Élaboration de stratégies sur mesure pour des défis uniques", - subTitle: - "Pour nos clients d'entreprise de plus grande envergure, ScrewFast propose des solutions personnalisées conçues pour répondre à des défis spécifiques de l'industrie. En comprenant vos besoins uniques, nous concevons des stratégies sur mesure visant à optimiser vos opérations, à améliorer l'efficacité et à faire avancer votre entreprise.", - single: false, - imgOne: progressBuilding, - imgOneAlt: "Structure de bâtiment en cours de construction", - imgTwo: underConstruction, - imgTwoAlt: "Bâtiment marron et gris en construction", - btnExists: true, - btnTitle: "Lire la suite", - btnURL: "#", - }, -]; ---- - - - - - - { - articles.map((article) => { - return article.isRightSection ? ( - - ) : ( - - ); - }) - } - - -