diff --git a/astro.config.mjs b/astro.config.mjs index 5ea7605..5169651 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,5 +1,6 @@ import solid from "@astrojs/solid-js"; // import image from "@astrojs/image"; +// import compress from 'astro-compress' import mdx from "@astrojs/mdx"; import sitemap from "@astrojs/sitemap"; import { defineConfig } from "astro/config"; @@ -26,8 +27,8 @@ export default defineConfig({ i18n: { defaultLocale: "ru", locales: { - ru: "ru-RU", - en: "en-US", + ru: "ru", + en: "en", }, }, }), @@ -76,7 +77,7 @@ export default defineConfig({ ], }), ], - trailingSlash: "always", + trailingSlash: "ignore", markdown: { syntaxHighlight: "prism", }, diff --git a/src/components/ArticleItem/ArticleItem.tsx b/src/components/ArticleItem/ArticleItem.tsx index 5104f33..4ba2e3c 100644 --- a/src/components/ArticleItem/ArticleItem.tsx +++ b/src/components/ArticleItem/ArticleItem.tsx @@ -14,7 +14,7 @@ export const ArticleItem: Component = (props) => { const hrefLangPrefix = props.data.lang && props.data.lang !== DEFAULT_LANGUAGE ? "/en" : ""; return (
- +

{props.data.title}

{isNonDefaultLanguage && {props.data.lang.toLocaleUpperCase()}} diff --git a/src/pages/blog/[...slug].astro b/src/pages/[...slug].astro similarity index 82% rename from src/pages/blog/[...slug].astro rename to src/pages/[...slug].astro index 2b32f9f..ba62555 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/[...slug].astro @@ -9,13 +9,13 @@ const lang = getLanguageFromURL(Astro.url.pathname); const canonicalUrl = new URL(Astro.url.pathname, Astro.site); export async function getStaticPaths() { - const modules = import.meta.glob>("../../../content/articles/**/*.mdx", { eager: true }); - const entries = Object.keys(modules).map((key) => [key, key.split("/").slice(7)[0]]); + const modules = import.meta.glob>("../../content/articles/**/*.mdx", { eager: true }); + const entries = Object.keys(modules).map((key) => [key, key.split("/").slice(6)[0]]); return entries.map(([key, lang]) => { const article = modules[key]; const published_at = new Date(article.frontmatter.published_at).toLocaleDateString("en-CA"); - const slug = `${published_at}/${lang !== DEFAULT_LANGUAGE ? lang + "/" : ""}${article.frontmatter.slug}`; + const slug = `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}blog/${published_at}/${article.frontmatter.slug}`; return { params: { slug }, props: article }; }); diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index cdc152e..3052a0e 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -14,9 +14,10 @@ for (const key of Object.keys(articles)) { const { title, description, slug, published_at, coverImage } = article[lang].frontmatter; items.push({ link: - `${import.meta.env.SITE}blog/` + + `${import.meta.env.SITE}` + + `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}` + + "blog/" + new Date(published_at).toLocaleDateString("en-CA") + - `${lang !== DEFAULT_LANGUAGE ? "/" + lang : ""}` + `/${slug}/`, title, description: `${description}${coverImage !== undefined ? `${title}` : ""}`, diff --git a/src/utils/string.ts b/src/utils/string.ts index fdf362d..085aa38 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -9,10 +9,3 @@ export function isEmail(email: string): boolean { export function isURL(url: string): boolean { return new RegExp(/(http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\\/~+#-]*[\w@?^=%&\\/~+#-])/).test(url); } - -export function normalizeLangTag(tag: string) { - if (!tag.includes("-")) return tag.toLowerCase(); - const [lang, region] = tag.split("-"); - - return lang.toLowerCase() + "-" + region.toUpperCase(); -} diff --git a/src/utils/url.ts b/src/utils/url.ts index f294648..a003805 100644 --- a/src/utils/url.ts +++ b/src/utils/url.ts @@ -1,4 +1,5 @@ import { DEFAULT_LANGUAGE } from "@root/config"; +import languages from "@i18n/languages"; export const encode = (data: object) => { return Object.keys(data) @@ -7,6 +8,7 @@ export const encode = (data: object) => { }; export const getLanguageFromURL = (pathname: string) => { - const langCodeMatch = pathname.match(/\/([a-z]{1}-?[a-z]{1})\//); - return langCodeMatch ? langCodeMatch[1] : DEFAULT_LANGUAGE; + const lang = pathname.split("/")[1]; + if (Object.hasOwn(languages, lang)) return lang; + return DEFAULT_LANGUAGE; };