From 267f2efade042b1f974ccda8193f1478e55c335c Mon Sep 17 00:00:00 2001 From: Al Murad Uzzaman Date: Wed, 31 Jul 2024 12:59:07 +0600 Subject: [PATCH] slugSelector fn modified for trailing slash --- src/config/config.json | 2 +- src/layouts/helpers/LanguageSwitcher.tsx | 12 +++-- src/lib/utils/languageParser.ts | 60 +++++++++++++++++++----- 3 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/config/config.json b/src/config/config.json index 834fbf1..3b3d910 100755 --- a/src/config/config.json +++ b/src/config/config.json @@ -22,7 +22,7 @@ "blog_folder": "blog", "default_language": "en", "disable_languages": [], - "default_language_in_subdir": true + "default_language_in_subdir": false }, "params": { diff --git a/src/layouts/helpers/LanguageSwitcher.tsx b/src/layouts/helpers/LanguageSwitcher.tsx index 5b60f59..e268ab9 100644 --- a/src/layouts/helpers/LanguageSwitcher.tsx +++ b/src/layouts/helpers/LanguageSwitcher.tsx @@ -1,5 +1,5 @@ import config from "@/config/config.json"; -import languages from "@/config/language.json"; `` +import languages from "@/config/language.json"; import React from "react"; const LanguageSwitcher = ({ @@ -9,7 +9,7 @@ const LanguageSwitcher = ({ lang: string; pathname: string; }) => { - const { default_language } = config.settings; + const { default_language, default_language_in_subdir } = config.settings; // Function to remove trailing slash if necessary const removeTrailingSlash = (path: string) => { @@ -33,11 +33,17 @@ const LanguageSwitcher = ({ const selectedLang = e.target.value; let newPath; const baseUrl = window.location.origin; + if (selectedLang === default_language) { - newPath = `${baseUrl}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`; + if (default_language_in_subdir) { + newPath = `${baseUrl}/${default_language}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`; + } else { + newPath = `${baseUrl}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`; + } } else { newPath = `/${selectedLang}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`; } + window.location.href = newPath; }} value={lang} diff --git a/src/lib/utils/languageParser.ts b/src/lib/utils/languageParser.ts index 431840c..2502e09 100644 --- a/src/lib/utils/languageParser.ts +++ b/src/lib/utils/languageParser.ts @@ -75,6 +75,47 @@ const filteredSupportedLang = supportedLang.filter( export { filteredSupportedLang as supportedLang }; +// export const slugSelector = (url: string, lang: string) => { +// const { default_language, default_language_in_subdir } = config.settings; +// const { trailing_slash } = config.site; + +// let constructedUrl; + +// // Determine the initial URL structure based on language +// if (url === "/") { +// constructedUrl = lang === default_language ? "/" : `/${lang}`; +// } else { +// constructedUrl = getRelativeLocaleUrl(lang, url, { +// normalizeLocale: false, +// }); +// } + +// // Adjust for trailing slash +// if (trailing_slash) { +// if (!constructedUrl.endsWith("/")) { +// constructedUrl += "/"; +// } +// } else { +// if (constructedUrl.endsWith("/")) { +// constructedUrl = constructedUrl.slice(0, -1); +// } +// } + +// // Ensure home URL is absolute +// if (constructedUrl === "") { +// constructedUrl = "/"; +// } + +// // Add language path if necessary +// if (lang === default_language) { +// constructedUrl = default_language_in_subdir +// ? `/${lang}${constructedUrl}` +// : constructedUrl; +// } + +// return constructedUrl; +// }; + export const slugSelector = (url: string, lang: string) => { const { default_language, default_language_in_subdir } = config.settings; const { trailing_slash } = config.site; @@ -90,28 +131,21 @@ export const slugSelector = (url: string, lang: string) => { }); } + // Add language path if necessary + if (lang === default_language && default_language_in_subdir) { + constructedUrl = `/${lang}${constructedUrl}`; + } + // Adjust for trailing slash if (trailing_slash) { if (!constructedUrl.endsWith("/")) { constructedUrl += "/"; } } else { - if (constructedUrl.endsWith("/")) { + if (constructedUrl.endsWith("/") && constructedUrl !== "/") { constructedUrl = constructedUrl.slice(0, -1); } } - // Ensure home URL is absolute - if (constructedUrl === "") { - constructedUrl = "/"; - } - - // Add language path if necessary - if (lang === default_language) { - constructedUrl = default_language_in_subdir - ? `/${lang}${constructedUrl}` - : constructedUrl; - } - return constructedUrl; };