feat: add language as post property (#151)
* feat: add language as post property * update frontmatter.json * style: remove extra space * fix: remove unnecessary replacements * feat: add `language` field to `new-post.js` * style: format code style * fix: use `siteConfig.lang` in `jsonLd` * fix: use `siteConfig` when `entry.data` was empty
This commit is contained in:
parent
856c2bb2c0
commit
f79ee3482d
|
@ -55,6 +55,11 @@
|
||||||
"title": "draft",
|
"title": "draft",
|
||||||
"name": "draft",
|
"name": "draft",
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "language",
|
||||||
|
"name": "language",
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ image: ''
|
||||||
tags: []
|
tags: []
|
||||||
category: ''
|
category: ''
|
||||||
draft: false
|
draft: false
|
||||||
|
language: ''
|
||||||
---
|
---
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ const postsCollection = defineCollection({
|
||||||
image: z.string().optional().default(''),
|
image: z.string().optional().default(''),
|
||||||
tags: z.array(z.string()).optional().default([]),
|
tags: z.array(z.string()).optional().default([]),
|
||||||
category: z.string().optional().default(''),
|
category: z.string().optional().default(''),
|
||||||
|
language: z.string().optional().default(''),
|
||||||
|
|
||||||
/* For internal use */
|
/* For internal use */
|
||||||
prevTitle: z.string().default(''),
|
prevTitle: z.string().default(''),
|
||||||
|
|
|
@ -21,9 +21,10 @@ interface Props {
|
||||||
title?: string
|
title?: string
|
||||||
banner?: string
|
banner?: string
|
||||||
description?: string
|
description?: string
|
||||||
|
lang?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
let { title, banner, description } = Astro.props
|
let { title, banner, description, lang } = Astro.props
|
||||||
|
|
||||||
// apply a class to the body element to decide the height of the banner, only used for initial page load
|
// apply a class to the body element to decide the height of the banner, only used for initial page load
|
||||||
// Swup can update the body for each page visit, but it's after the page transition, causing a delay for banner height change
|
// Swup can update the body for each page visit, but it's after the page transition, causing a delay for banner height change
|
||||||
|
@ -52,7 +53,11 @@ if (title) {
|
||||||
const favicons: Favicon[] =
|
const favicons: Favicon[] =
|
||||||
siteConfig.favicon.length > 0 ? siteConfig.favicon : defaultFavicons
|
siteConfig.favicon.length > 0 ? siteConfig.favicon : defaultFavicons
|
||||||
|
|
||||||
const siteLang = siteConfig.lang.replace('_', '-')
|
// const siteLang = siteConfig.lang.replace('_', '-')
|
||||||
|
if (!lang) {
|
||||||
|
lang = `${siteConfig.lang}`
|
||||||
|
}
|
||||||
|
const siteLang = lang.replace('_', '-')
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
|
@ -11,15 +11,16 @@ interface Props {
|
||||||
title?: string
|
title?: string
|
||||||
banner?: string
|
banner?: string
|
||||||
description?: string
|
description?: string
|
||||||
|
lang?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const { title, banner, description } = Astro.props
|
const { title, banner, description, lang } = Astro.props
|
||||||
const hasBannerCredit =
|
const hasBannerCredit =
|
||||||
siteConfig.banner.enable && siteConfig.banner.credit.enable
|
siteConfig.banner.enable && siteConfig.banner.credit.enable
|
||||||
const hasBannerLink = !!siteConfig.banner.credit.url
|
const hasBannerLink = !!siteConfig.banner.credit.url
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title={title} banner={banner} description={description}>
|
<Layout title={title} banner={banner} description={description} lang={lang}>
|
||||||
<slot slot="head" name="head"></slot>
|
<slot slot="head" name="head"></slot>
|
||||||
<div class="max-w-[var(--page-width)] min-h-screen grid grid-cols-[17.5rem_auto] grid-rows-[auto_auto_1fr_auto] lg:grid-rows-[auto_1fr_auto]
|
<div class="max-w-[var(--page-width)] min-h-screen grid grid-cols-[17.5rem_auto] grid-rows-[auto_auto_1fr_auto] lg:grid-rows-[auto_1fr_auto]
|
||||||
mx-auto gap-4 relative px-0 md:px-4"
|
mx-auto gap-4 relative px-0 md:px-4"
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { Icon } from 'astro-icon/components'
|
||||||
import { licenseConfig } from 'src/config'
|
import { licenseConfig } from 'src/config'
|
||||||
import PostMetadata from '../../components/PostMeta.astro'
|
import PostMetadata from '../../components/PostMeta.astro'
|
||||||
import ImageWrapper from '../../components/misc/ImageWrapper.astro'
|
import ImageWrapper from '../../components/misc/ImageWrapper.astro'
|
||||||
import { profileConfig } from '../../config'
|
import { profileConfig, siteConfig } from '../../config'
|
||||||
import { formatDateToYYYYMMDD } from '../../utils/date-utils'
|
import { formatDateToYYYYMMDD } from '../../utils/date-utils'
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
|
@ -41,10 +41,11 @@ const jsonLd = {
|
||||||
url: Astro.site,
|
url: Astro.site,
|
||||||
},
|
},
|
||||||
datePublished: formatDateToYYYYMMDD(entry.data.published),
|
datePublished: formatDateToYYYYMMDD(entry.data.published),
|
||||||
|
inLanguage: (entry.data.language ? entry.data.language.replace('_', '-') : siteConfig.lang.replace('_', '-')),
|
||||||
// TODO include cover image here
|
// TODO include cover image here
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
<MainGridLayout banner={entry.data.image} title={entry.data.title} description={entry.data.description}>
|
<MainGridLayout banner={entry.data.image} title={entry.data.title} description={entry.data.description} lang={entry.data.language}>
|
||||||
<script is:inline slot="head" type="application/ld+json" set:html={JSON.stringify(jsonLd)}></script>
|
<script is:inline slot="head" type="application/ld+json" set:html={JSON.stringify(jsonLd)}></script>
|
||||||
<div class="flex w-full rounded-[var(--radius-large)] overflow-hidden relative mb-4">
|
<div class="flex w-full rounded-[var(--radius-large)] overflow-hidden relative mb-4">
|
||||||
<div id="post-container" class:list={["card-base z-10 px-6 md:px-9 pt-6 pb-4 relative w-full ",
|
<div id="post-container" class:list={["card-base z-10 px-6 md:px-9 pt-6 pb-4 relative w-full ",
|
||||||
|
|
Loading…
Reference in New Issue