diff --git a/astro.config.ts b/astro.config.ts index e45819c..24f9750 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -35,6 +35,7 @@ const imageDomain = new URL(themeConfig.preload.imageHostURL as string).hostname export default defineConfig({ site: url, base: '/', + trailingSlash: 'always', prefetch: { prefetchAll: true, defaultStrategy: 'viewport', diff --git a/src/components/Footer.astro b/src/components/Footer.astro index a01e82e..b00131b 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -9,9 +9,9 @@ const { class: className } = Astro.props const { author } = themeConfig.site const { startYear, - linkA: { name: linkAName, url: linkAUrl }, - linkB: { name: linkBName, url: linkBUrl }, - linkC: { name: linkCName, url: linkCUrl }, + linkA: { name: nameA, url: urlA }, + linkB: { name: nameB, url: urlB }, + linkC: { name: nameC, url: urlC }, } = themeConfig.footer const currentYear = new Date().getFullYear() @@ -27,13 +27,15 @@ const year = Number(startYear) === currentYear ]} >

- {linkAName} / - {linkBName} / - {linkCName} + {nameA} / + {nameB} / + {nameC}

+

Powered by Astro and Retypeset

+

© {year} {author}

diff --git a/src/components/MainHeader.astro b/src/components/MainHeader.astro index 9df0368..f57d944 100644 --- a/src/components/MainHeader.astro +++ b/src/components/MainHeader.astro @@ -19,7 +19,7 @@ const marginBottom = { lg="fixed" >

- +
{title} -
+

{subtitle && ( diff --git a/src/components/MobileHeader.astro b/src/components/MobileHeader.astro index 528c8ce..b9230ca 100644 --- a/src/components/MobileHeader.astro +++ b/src/components/MobileHeader.astro @@ -16,7 +16,7 @@ const marginBottom = {

- +
diff --git a/src/components/PostTitleList.astro b/src/components/PostList.astro similarity index 78% rename from src/components/PostTitleList.astro rename to src/components/PostList.astro index a32fdb9..0f0488b 100644 --- a/src/components/PostTitleList.astro +++ b/src/components/PostList.astro @@ -5,6 +5,7 @@ interface Post { title: string abbrlink?: string published: Date + lang?: string } slug?: string remarkPluginFrontmatter?: { @@ -13,11 +14,19 @@ interface Post { } // Receive posts parameter passed from outside -const { posts } = Astro.props +const { posts, lang: pageLang } = Astro.props // Declare the type of props export interface Props { posts: Post[] + lang?: string +} + +// 构建正确的链接路径 +function getPostUrl(post: Post) { + const postPath = post.data.abbrlink || post.slug + // 如果是在语言文件夹下的页面,添加语言前缀 + return pageLang ? `/${pageLang}/posts/${postPath}/` : `/posts/${postPath}/` } ---
- +
diff --git a/src/utils/i18n/path.ts b/src/utils/i18n/path.ts index 6cba582..cf5718a 100644 --- a/src/utils/i18n/path.ts +++ b/src/utils/i18n/path.ts @@ -3,51 +3,41 @@ import themeConfig from '@/config' const defaultLocale = themeConfig.global.locale const moreLocales = themeConfig.global.moreLocale -export function cleanPath(path: string) { - return path.replace(/^\/+|\/+$/g, '') -} - +// Get the language code in the path export function getLangFromPath(path: string) { - const secondaryLang = moreLocales.find( - lang => - path.startsWith(`/${lang}/`) - || path === `/${lang}` - || path === `/${lang}/`, - ) - return secondaryLang || defaultLocale + const lang = path.split('/')[1] + return moreLocales.includes(lang) ? lang : defaultLocale } +// Get the localized path export function getLocalizedPath(path: string, currentLang?: string) { - const clean = cleanPath(path) + const pathWithoutSlashes = path.replace(/^\/+|\/+$/g, '') const lang = currentLang || getLangFromPath(path) - // 如果是根目录(clean为空),则返回/ - if (clean === '') { + if (pathWithoutSlashes === '') { return lang === defaultLocale ? '/' : `/${lang}/` } - // 其他路径正常处理 - return lang === defaultLocale ? `/${clean}/` : `/${lang}/${clean}/` + return lang === defaultLocale ? `/${pathWithoutSlashes}/` : `/${lang}/${pathWithoutSlashes}/` } export function isHomePage(path: string) { - const clean = cleanPath(path) - return clean === '' || moreLocales.includes(clean) + return path === '/' || moreLocales.some(lang => path === `/${lang}/`) } export function isPostPage(path: string) { - const clean = cleanPath(path) - return clean.startsWith('posts') || moreLocales.some(lang => clean.startsWith(`${lang}/posts`)) + // 简化:检查路径是否包含posts + return path.includes('/posts/') } export function isTagPage(path: string) { - const clean = cleanPath(path) - return clean.startsWith('tags') || moreLocales.some(lang => clean.startsWith(`${lang}/tags`)) + // 简化:检查路径是否包含tags + return path.includes('/tags/') } export function isAboutPage(path: string) { - const clean = cleanPath(path) - return clean.startsWith('about') || moreLocales.some(lang => clean.startsWith(`${lang}/about`)) + // 简化:检查路径是否包含about + return path.includes('/about/') } export function getPagePath(path: string) {