From 340500efcc716d599c08c3c93f2b79a56b5edf00 Mon Sep 17 00:00:00 2001 From: Al Murad Uzzaman Date: Sun, 19 May 2024 17:40:46 +0600 Subject: [PATCH] worked with lang subdir --- astro.config.mjs | 17 +++++--- src/config/config.json | 3 +- src/layouts/PostSingle.astro | 34 ++++++++++++---- src/layouts/components/BlogCard.astro | 35 +++++++++++----- src/layouts/components/Logo.astro | 17 ++++++-- src/layouts/partials/Footer.astro | 24 ++++++++++- src/layouts/partials/Header.astro | 53 ++++++++++--------------- src/layouts/partials/PostSidebar.astro | 24 ++++++++--- src/lib/utils/i18nUtils.ts | 19 +-------- src/pages/[...lang]/blog/[single].astro | 4 +- 10 files changed, 145 insertions(+), 85 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 68d434a..8f2beda 100755 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -7,6 +7,16 @@ import { defineConfig, squooshImageService } from "astro/config"; import remarkCollapse from "remark-collapse"; import remarkToc from "remark-toc"; import config from "./src/config/config.json"; +import languagesJSON from "./src/config/language.json"; +const { default_language } = config.settings; + +const supportedLang = [...languagesJSON.map((lang) => lang.languageCode)]; +const disabledLanguages = config.settings.disable_languages; + +// Filter out disabled languages from supportedLang +const filteredSupportedLang = supportedLang.filter( + (lang) => !disabledLanguages.includes(lang), +); // https://astro.build/config export default defineConfig({ @@ -14,11 +24,8 @@ export default defineConfig({ base: config.site.base_path ? config.site.base_path : "/", trailingSlash: config.site.trailing_slash ? "always" : "never", i18n: { - locales: ["en", "fr", "ar"], - defaultLocale: "en", - routing: { - prefixDefaultLocale: false, - }, + locales: filteredSupportedLang, + defaultLocale: default_language, }, image: { service: squooshImageService(), diff --git a/src/config/config.json b/src/config/config.json index 382577f..83920f1 100755 --- a/src/config/config.json +++ b/src/config/config.json @@ -21,7 +21,8 @@ "summary_length": 200, "blog_folder": "blog", "default_language": "en", - "disable_languages": [] + "disable_languages": [], + "default_language_in_path": false }, "params": { diff --git a/src/layouts/PostSingle.astro b/src/layouts/PostSingle.astro index 3efce71..e9eeefc 100755 --- a/src/layouts/PostSingle.astro +++ b/src/layouts/PostSingle.astro @@ -5,12 +5,14 @@ import config from "@/config/config.json"; import Disqus from "@/helpers/Disqus"; import { getSinglePage } from "@/lib/contentParser.astro"; import dateFormat from "@/lib/utils/dateFormat"; +import { constructUrl } from "@/lib/utils/i18nUtils"; import similarItems from "@/lib/utils/similarItems"; import { humanize, markdownify, slugify } from "@/lib/utils/textConverter"; import type { ContentEntryMap } from "astro:content"; import { FaRegClock, FaRegFolder, FaRegUserCircle } from "react-icons/fa"; import ImageMod from "./components/ImageMod.astro"; -const { default_language } = config.settings; +const { default_language, default_language_in_path } = config.settings; +const { trailing_slash } = config.site; const COLLECTION_FOLDER = "blog"; const { post } = Astro.props; @@ -18,11 +20,29 @@ const { lang } = Astro.params; const posts = await getSinglePage( COLLECTION_FOLDER, - lang as keyof ContentEntryMap, + lang as keyof ContentEntryMap ); const similarPosts = similarItems(post, posts); const { Content } = await post.render(); const { title, description, author, categories, image, date, tags } = post.data; + +const constructLocalizedUrl = (url: string) => { + if (lang === default_language) { + return constructUrl( + default_language_in_path ? `/${lang}${url}` : url, + lang, + default_language, + trailing_slash + ); + } else { + return constructUrl( + url, + lang as keyof ContentEntryMap, + default_language, + trailing_slash + ); + } +}; ---
@@ -46,9 +66,7 @@ const { title, description, author, categories, image, date, tags } = post.data;